
题目
解决代码及点评
/* 用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5}, 1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1}, 5 处在栈顶。 */ #include <iostream> using namespace std; template <class T> class Stack { public: Stack(int Len = 10); //默认栈的大小为10 ~Stack() { delete[] pArr;} void Push(T value); void Pop(); T Top(); void Reverse( int n); //递归翻转一个栈 不得申请额外空间 void AddToBottom(T value); //将元素value压入栈底 bool IsEmpty(); bool IsFull(); private: int nTop; //指向下一个要插入的位置 int nLen; //栈的总大小 T *pArr; }; template<class T> Stack<T>::Stack(int Len) { if (Len <= 0) { return; } nLen = Len; nTop = 0; pArr = new T[nLen]; } template<class T> void Stack<T>::Push(T value) { if (nTop == nLen) { cout<<"栈已满!"<<endl; return; } pArr[nTop++] = value; } template<class T> void Stack<T>::Pop() { if (nTop == 0) { cout<<"栈为空!"<<endl; return; } nTop--; } template<class T> T Stack<T>::Top() { if (nTop == 0) { cout<<"栈为空!"<<endl; } else { return pArr[nTop - 1]; } } template<class T> bool Stack<T>::IsEmpty() { return nTop == 0; } template<class T> bool Stack<T>::IsFull() { return nTop == nLen; } bool IsSubPop(int *pArr1, int *pArr2, int nLen) { Stack<int> s; int j = 0; for (int i = 0; i < nLen; i++) { s.Push(pArr1[i]); while (!s.IsEmpty() && s.Top() == pArr2[j]) { s.Pop(); j++; } } return s.IsEmpty(); } template<class T> void Stack<T>::AddToBottom(T value) //将元素value压入栈底 { if (IsEmpty()) { Push(value); } else { T topValue = Top(); Pop(); AddToBottom(value); Push(topValue); } } template<class T> void Stack<T>::Reverse(int n) //递归翻转一个栈 不得申请额外空间 { // n==0是结束条件 if (n == 0) { return; } else { // 获取top元素后弹出 T topValue = Top(); //取出栈顶元素 Pop(); // 递归翻转 Reverse(n-1); //翻转n-1个元素 AddToBottom(topValue); //将栈顶元素压入栈底 } } int main() { Stack<int> s; for (int i = 0; i < 5; i++) { s.Push(i); } // 翻转 s.Reverse(5); while (!s.IsEmpty()) { cout<<s.Top()<<endl; s.Pop(); } system("pause"); return 0; }
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6704519
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果