Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988917
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2012-10-10 23:07:12

题目:用递归颠倒一个栈。例如输入栈{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. }

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