带头结点栈的链式存储实现

#include"iostream"
#include"stdlib.h"
using namespace std;
/*
	此方法为带头结点栈的链式存储实现
*/
typedef struct Linknode {
	int data;				//数据域
	struct Linknode* next;	//指针域

}*LiStack;
//初始化
bool InitStack(LiStack &L) {
	L = (LiStack)malloc(sizeof(Linknode));		//创建头结点
	L->next = NULL;
	if (L == NULL)		//内存分配失败
		return false;
	return true;
}
//入栈			将元素e入栈
bool Push(LiStack &L,int e) {
	Linknode* p = (Linknode*)malloc(sizeof(Linknode));		//创建新结点
	if (p == NULL)		//内存分配失败
		return false;
	p->data = e;
	p->next = L->next;
	L->next = p;
	return true;
}

//出栈			//用e将出栈的元素带回
bool Pop(LiStack &L, int &e) {
	if (L->next == NULL)		//空栈
		return false;
	Linknode* p = L->next;			//p指向第一个元素
	 e= p->data ;
	L->next = p->next;
	free(p);
	return true;
}
//销毁
bool Destory(LiStack &L) {
	Linknode* p = L->next;		//p始终指向第一个元素
	if (p == NULL)		//空栈
		return false;
	while (p!=NULL) {
		L->next = p->next;
		free(p);
		p = L->next;
	}
	return true;
}

//打印栈中元素
void print_Stack(LiStack L) {
	Linknode* p = L->next;
	cout << "当前栈的状态(顶->底):";
	while (p != NULL) {
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;
}

int main() {
	LiStack L;		//声明一个栈
	int e=-1;			//用于将出栈元素带回
	//初始化
	InitStack(L);
	print_Stack(L);
	//入栈
	for (int i = 1; i <= 10; i++)
		Push(L, i);
	print_Stack(L);
	//出栈
	for (int i = 1; i <= 5; i++)	//五次出栈
		Pop(L, e);
	cout << "最后一次出栈的元素为:" << e << endl;;
	print_Stack(L);
	//销毁栈
	Destory(L);
	print_Stack(L);
	cout << endl;
	system("pause");
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值