您的位置:首页 > 其它

链表实现的堆栈程序(仅供自己学习使用)

2014-07-31 11:39 323 查看
//堆栈的出入栈操作都是从栈顶开始,<span style="color:#ff0000;">先入后出模式</span>
#include <iostream>
using namespace std;
typedef struct Node
{
int val;
Node * pNext;
} Node;

typedef struct Stack  //定义堆栈
{
Node  *pTop;      //栈顶
Node  *pButtom;   //栈底
}Stack;
//初始化堆栈
void init_stack(Stack &st)
{
st.pButtom = st.pTop = NULL;
}
//压栈
void push_stack(Stack &st,int val)
{
Node *pNew = new Node;
if (NULL == pNew)
{
cout<<"内存分配失败!"<<endl;
exit(EXIT_FAILURE);
}
pNew->val = val;
pNew->pNext = st.pTop;
st.pTop = pNew;
}
//判断堆栈是否为空
bool is_empty_stack(Stack &st)
{
if (st.pTop == st.pButtom)
{
return true;
}
else
return false;
}
//出栈
int pop_stack(Stack &st)
{
if (is_empty_stack(st))
{
cout<<"堆栈已空,无法出栈!"<<endl;
exit(EXIT_FAILURE);
}
Node *p = st.pTop;
int val = p->val;
st.pTop = p->pNext;
delete p;
return val;
}
//清空堆栈
void clear_stack(Stack &st)
{
if (is_empty_stack(st))
{
return ;
}
Node *p ;
while(st.pTop != st.pButtom)
{
p = st.pTop ;
st.pTop = st.pTop->pNext;
delete p;
}
}
//遍历堆栈元素
void traverse_stack(Stack &st)
{
Node *p = st.pTop;
while (p != st.pButtom)
{
cout<<p->val<<" ";
p = p->pNext;
}
cout<<endl;
}
void main()
{
Stack st;
init_stack(st);
push_stack(st,2);
push_stack(st,3);
push_stack(st,4);
traverse_stack(st);
cout<<pop_stack(st);
clear_stack(st);
traverse_stack(st);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐