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

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: 嵌入式

2012-12-31 23:18:27

设计包含min 函数的栈。
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
 
使用一个栈处理push,pop,额外使用一个栈,用来记录最小值。
a.当向原栈中push数据后,与最小值栈中的栈顶元素比较,如果新值小于等于最小值栈顶,则在最小值栈中push新值;否则不动
b.pop的时候,考虑pop出的值是否等于最小值栈顶元素,如果等于最小栈也pop,否则不动
c.min函数返回最小值栈的栈顶元素
 
C#实现如下


点击(此处)折叠或打开

  1. public class myStack{
  2.     private Stack<int> stackMin;
  3.     private Stack<int> stack;
  4.     public myStack(){
  5.         stackMin = new Stack<int>();
  6.         stack = new Stack<int>();
  7.     }
  8.     public void Push(int tar){
  9.         stack.Push(tar);
  10.         if(stackMin.Count == 0){
  11.             stackMin.Push(tar);
  12.         }
  13.         else{
  14.             int cur = stackMin.Peak();
  15.             if(tar<=cur)
  16.                 stackMin.Push(tar);
  17.         }
  18.     }
  19.     public int Pop(){
  20.         if(stack.Count == 0)
  21.             throw new Exception("the stack is empty!");
  22.         int cur = stack.Pop();
  23.         if(cur==stack.Peak()){
  24.             stackMin.Pop();
  25.         }
  26.         return cur;
  27.     }
  28.     public int Min(){
  29.         if(stackMin.Count == 0)
  30.             throw new Exception("the stack is empty!");
  31.         return stackMin.Peak();
  32.     }
  33. }



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