Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65032
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-08 19:09
文章分类
文章存档

2015年(115)

我的朋友

分类: C/C++

2015-08-06 16:49:22

题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。

假设除了栈顶的元素没有正确外,其下面的元素都已经排列正确了,那么有:
1.pop出栈顶元素,存储在变量top中。
2.将剩余元素依次全部pop到一个临时栈tmp中.
3.将top压入栈中.
4.将tmp中的元素依次压回栈中。

根据分析,有伪代码如下:

点击(此处)折叠或打开

  1. void revstack(Stack<obj> src){
  2.     if(src.Count == 1) return;
  3.     obj top = src.Pop();
  4.     revstack(src);
  5.     Stack<obj> tmp = new Stack<obj>();
  6.     while(src.count!=0){
  7.         tmp.Push(src.Pop());
  8.     }
  9.     src.Push(top);
  10.     while(tmp.count!=0){
  11.         src.Push(tmp.Pop());
  12.     }
  13. }

阅读(159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~