您的位置:首页 > 职场人生

[微软面试100题] 设计包含min函数的栈

2012-12-04 14:54 316 查看

题目

定义栈的数据结构,要求添加一个 min函数,能够得到栈的最小元素。

要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。

分析

栈是LIFO的队列,当一个新元素入栈时,栈的最小值状态是已经确定的,这时只需比较新元素与最小值的大小,并将新的最小值记录在该元素上。
显然,只用在标准的栈实现上,为每个元素加入一个伴随值min。

代码

class StackWithMin
{
public:
StackWithMin()
{
m_nTop = 0;
}

void Push(int dat)
{
if (m_nTop == 100) error("out of stack space");
m_aElements[m_nTop].value = dat;
m_aElements[m_nTop].min = dat;
if (m_nTop > 0 && m_aElements[m_nTop-1].min < dat)
m_aElements[m_nTop].min = dat;
m_nTop ++;
}
int Pop()
{
if (m_nTop == 0) error("empty stack");
int dat = m_aElements[m_nTop-1].value;
m_nTop --;
return dat;
}
int min()
{
if (m_nTop == 0) error("empty stack");
return m_aElements[m_nTop-1];
}
private:
struct Element
{
int value;
int min;
};
Element m_aElements[100]; // 简单实现, 使用了定长数组
int     m_nTop;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: