您的位置:首页 > 理论基础 > 数据结构算法

面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)

2013-07-10 10:15 691 查看
思路:

在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。但是仅仅只添加一个成员变量存放最小元素(或最小元素的位置)是不够的,因为如果当前最小元素被pop出去,如何才能得到下一个最小元素?所以我们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到栈元素的类型可能是复杂的数据结构,用最小元素的位置将能减少空间消耗)push到辅助栈中;每次pop一个元素出栈的时候,同时pop辅助栈。

参考代码:

#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <iostream>
#include <stack>
using namespace std;
class sTack
{
private:
stack<int>datestack;
stack<int>minstack;
public:
void push(int k)
{
datestack.push(k);
if(!minstack.size())
minstack.push(k);
else if(k<=minstack.top())
minstack.push(k);
}
void pop()
{
assert(datestack.size()>0);
assert(minstack.size()>0);
if(datestack.top()==minstack.top())
minstack.pop();
datestack.pop();
}
int min()
{
return minstack.top();
}
int top()
{
return datestack.top();
}
};
int main()
{
sTack T;
T.push(2);
T.push(6);
T.push(3);
T.push(1);
T.push(3);
T.push(5);
T.push(4);
T.push(2);
for(int i=0;i<8;i++)
{
cout<<T.min()<<endl;
T.pop();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐