重造轮子 用递归函数和栈操作逆序一个栈
2015-10-19 19:53
387 查看
目标:仅使用递归与栈操作将栈逆序。
方法:有点利用回溯法的味道。在递归操作中做两次取栈顶元素的操作后,并将第一次取得的栈顶元素再入栈。这个操作可以将原栈中最顶部的元素压入栈底。当递归函数返回时,再将另一个取栈顶操作获得的元素压入栈。然后在对从栈顶到次栈底这一段元素调用上诉操作。
代码:
class Solution{ public: void reverseStack(stack<int>& s){//逆序栈 if(s.empty()) return; int len = s.size(); while(len>1){//当栈内可逆序长度为1时,则栈已经完成逆序过程 reverse(s,len); len--; } while(!s.empty()){//打印逆序后的栈,这里栈也变空了 cout<<s.top()<<endl; s.pop(); } } void reverse(stack<int>& s,int len){ if(len == 1) return; int n,m; n = s.top();//第一次取栈顶元素 s.pop();//栈顶出栈 m = s.top();//第二次取栈顶元素 s.pop();//栈顶出栈 s.push(n);//将第一次取栈顶操作得到的数压入栈 reverse(s,len-1);//递归,长度减1 s.push(m);//将第二次取栈顶操作得到的数压入栈 } };
相关文章推荐
- 指针的理解
- 转-直系毕业师兄对于创新和大学学习的认识
- java异常概述
- Android布局-TableLayout表格布局
- Java的序列化ID的作用
- 如何在Linux下创建与解压.zip .tar , tar.gz和tar.bz2文件
- [Eclipse]快捷键
- 为什么要重写hashcode() 方法
- 如若有你,一生何求
- 通过json序列化方式在django下传递模型数据
- AsyncTask使用实例,异步加载图片
- ZigZag Conversion
- OC数组的四种的遍历方法
- 感悟篇
- buffer正确的拼接方式
- OpenCV之读取视频并显示
- 1.获取服务器IP、端口等
- 识别、检测、跟踪、分割、显著性、重识别
- [LeetCode] Convert Sorted List to Binary Search Tree
- java关键字之break与continue的区别(简单明了的小例子)