包含min函数的栈

题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

思路:若是只要返回最小一个元素,只要每次加入时,和栈顶元素对比就行,小于栈顶元素就先删除栈顶元素,然后加入。但若是想所有元素的出栈顺序是从小到大呢?

这时我们需要一个辅助栈,辅助栈中从大到小(栈底到栈顶)依次存放当前数据栈中的最小值。当有新元素来时,若小于辅助栈中的元素,则加入辅助栈,同时也加入数据栈,若大于辅助栈中的元素,则只加入数据栈,并将辅助栈栈顶元素再次加入辅助栈。出栈时,数据栈和辅助栈同时出栈,要最小值则返回辅助栈栈顶。代码如下:

 1 class Solution {
 2 public:
 3     stack<int> stackData,stackMin;
 4     void push(int value)        //题目给
 5     {
 6          stackData.push(value);
 7          if(stackMin.empty()||value<stackMin.top())
 8             stackMin.push(value);
 9         else
10             stackMin.push(stackMin.top());   
11     }
12     void pop()          //题目给
13     {
14         //assert(stackData.size()>0&&stackMin.size()>0);
15         stackData.pop();
16         stackMin.pop();    
17     }
18     int top()           //题目给
19     {
20         return stackData.top();    
21     }
22     int min()           //题目给  
23     {
24         return stackMin.top();    
25     }
26 };

过程可以画图理解。

posted @ 2017-08-16 11:22  王大咩的图书馆  阅读(152)  评论(0编辑  收藏  举报