设计包含min函数的栈

来源:互联网 发布:淘宝交易指数查询 编辑:程序博客网 时间:2024/04/30 00:54

//入栈的同时.将最小值入辅助栈,出栈时,将辅助栈当前最小值也出栈

#include <stack>

#include <iostream>
using namespace std;


struct Node
{
int data;
Node *next;
};


class Cstack
{
public:


Cstack()
{
mphead = new Node;
mphead->data = -1;
mphead->next = NULL;
}
Node *Buy_Node(int val)
{
Node *p = new Node;
p->data = val;
p->next = NULL;
return p;
}


void Push_val(int val)
{
Node *p = Buy_Node(val);
p->next = mphead->next;
mphead->next = p;
if(m_stack.empty())
{
m_stack.push(val);
}
else
{
int mval = m_stack.top();
if(val < mval)
{
m_stack.push(val);
}
else
m_stack.push(mval);
}
}


void Pop_val()
{
Node *p = mphead->next;
mphead->next = p->next;
delete p;
m_stack.pop();
}


int Get_top()
{
Node *p = mphead->next;
return p->data;
}


int Get_min()
{
return m_stack.top();
}


void Show()
{
Node *p = mphead->next;
for(; p!=NULL; p=p->next)
{
cout<<p->data<<" ";
}
cout<<endl;
}


~Cstack()
{
delete mphead;
mphead = NULL;
}


private:
Node *mphead;
stack<int> m_stack;//定义了一个辅助栈
};


int main()
{
Cstack stack1;
stack1.Push_val(3);
stack1.Push_val(5);
stack1.Push_val(6);
stack1.Push_val(2);
stack1.Push_val(1);
stack1.Push_val(8);


stack1.Show();//可得目前栈内的结果是8 1 2 6 5 3
int val = stack1.Get_min();
cout<<val<<endl;//目前最小值是1


stack1.Pop_val();
stack1.Pop_val();
int rval = stack1.Get_min();//将栈内的8 1 出栈 此时辅助栈最小值为2
cout<<rval<<endl;


stack1.Pop_val();
int tval = stack1.Get_min();//将栈内的2出栈 此时辅助栈最小值为3
cout<<tval<<endl;


return 0;
}
1 0