第三章第四小节(链表实现栈)

本文介绍了如何使用C++链表实现栈,包括栈的概念、基本操作如push、pop、isEmpty、createStack、makeEmpty、top和disposeStack,以及它们的详细实现和使用示例。
摘要由CSDN通过智能技术生成

栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶。对栈的基本操作有push和pop。栈有时又叫做后进先出表。
栈的实现可以用指针,也可以用数组。

//链表实现栈
typedef int element;
typedef struct Node* PtrNode;
typedef PtrNode stack;

//函数声明
int IsEmpty(stack S); //判断栈是否为空
stack createStack(); //创建空栈
void makeEmpty(stack S); // 删除栈
stack disposeStack(stack S);	//销毁栈
void push(element x,stack S); //入栈
void pop(stack S); //出栈
element top(stack S); //返回栈顶的元素值
struct Node {
	element data;
	PtrNode next;
};
int IsEmpty(stack S) {	//判断栈是否为空
	return S->next == NULL;
}
stack createStack() {	//创建栈
	stack S;
	S = (stack)malloc(sizeof(struct Node));
	S->next = NULL;
	return S;
}
void push(element x,stack S) {	//入栈
	if (S == NULL) {
		cout << "栈未创建" << endl;
		return;
	}
	PtrNode tmp = (PtrNode)malloc(sizeof(struct Node));
	tmp->data = x;
	tmp->next = S->next;
	S->next = tmp;
}	

void pop(stack S) {	//出栈
	if (S==NULL || IsEmpty(S)){
		cout << "栈为空" << endl;
		return;
	}
	else {
		PtrNode tmp;
		tmp = S->next;
		S->next = tmp->next;
		free(tmp);
	}
}
void makeEmpty(stack S) {	//清空栈内容
	if (S == NULL)
		return;
	while (!IsEmpty(S)) {
		pop(S);
	}
}
element top(stack S) {	//取出栈顶元素的值
	if (!IsEmpty(S)) {
		return S->next->data;
	}
	return 0;	//栈为空返回0
}
stack disposeStack(stack S) {	//销毁栈
	makeEmpty(S);
	if (IsEmpty(S)) {
		free(S);
		S = NULL;
		cout << "销毁成功" << endl;
		return S;
	}
	cout << "销毁失败" << endl;
	return S;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值