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

//堆栈的出入栈操作都是从栈顶开始,<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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值