要求不使用额外的数据结构
/*
* @Author: HerrDing (1103037805@qq.com)
* @Date: 2022-04-23 21:24:57
* @LastEditors: HerrDing
* @LastEditTime: 2022-04-23 22:24:42
* @FilePath: /刷题/reversestack.cpp
* @Description:reverse stack without extra data structure.
*
* Copyright (c) 2022 by Ding, All Rights Reserved.
*/
#include <iostream>
#include <stack>
#include <time.h>
using namespace std;
class ReverseStack
{
public:
void Reverse(stack<int> &st)
{
if (st.empty())
{
return;
}
/** 1. pop the last element */
int last = StackBottom(st);
/** 2.reverse other elements */
Reverse(st);
/** 3.deal curent last */
st.push(last);
}
private:
int StackBottom(stack<int> &st)
{
if (st.size() == 1)
{
int last = st.top();
st.pop();
return last;
}
/** 1. pop current element */
int t = st.top();
st.pop();
/** 2. deal other elements */
int last = StackBottom(st);
/** 3. deal current element */
st.push(t);
return last;
}
};
int main()
{
clock_t time_s;
clock_t time_e;
time_s = clock();
stack<int> st;
for (int i = 0; i < 10; ++i)
{
st.push(i);
}
ReverseStack test;
test.Reverse(st);
while (!st.empty())
{
cout << st.top() << endl;
st.pop();
}
time_e = clock();
cout << "consume time: " << static_cast<double>(time_e - time_s) / CLOCKS_PER_SEC << "s." << endl;
return 0;
}