单链表实现堆栈

环境

C++
Visual Studio 2022
数据结构与算法、单链表堆栈实现
仅供学习参考

代码

#include<iostream>
#include<stdio.h>

typedef int ElemType;

//定义单链表堆栈
typedef struct Linknode {
	ElemType date;
	struct Linknode* next;
}*LiStack, Linknode;

//初始化堆栈,带有头结点,头结点指向栈顶
void InitStack(LiStack& L) {
	LiStack Lnode = (LiStack)malloc(sizeof(Linknode));
	Lnode->date = 0;
	Lnode->next = NULL;
	L = Lnode;
}

//入栈,即头插法插入元素
void push(LiStack& L, ElemType i) {
	LiStack p = (LiStack)malloc(sizeof(Linknode));
	p->date = i;
	p->next = L->next;
	L->next = p;
}

//判断栈是否为空
bool IsEmpty(LiStack L) {
	if (L->next == NULL)
		return true;
	return false;
}

//出栈,即删除头结点的后一个结点
bool pop(LiStack& L) {
	if (IsEmpty(L))
		return false;
	LiStack p = L->next;
	L->next = p->next;
	free(p);
}

//读栈顶元素,通过x返回值
bool GetTop(LiStack L, ElemType& x) {
	if (IsEmpty(L))
		return false;
	x = L->next->date;
}

//打印栈中现有的元素,为方便调试
bool PrintSatck(LiStack L) {
	if (IsEmpty(L))
		return false;
	while (L->next != NULL) {
		L = L->next;
		printf("%-3d", L->date);
	}
	printf("\n");
}

//销毁整个栈
void DestroyStack(LiStack& L) {
	LiStack p = L;
	if (p->next == NULL) {
		free(p);
		return;
	}
	LiStack q = p->next;
	while (q!=NULL) {
		free(p);
		p = q;
		q = p->next;
	}
	return;
}

int main() {
	LiStack S;
	InitStack(S);
	push(S, 1);
	push(S, 2);
	push(S, 3);
	DestroyStack(S);
	/*pop(S);
	ElemType x;
	GetTop(S, x);
	printf("x=%d\n", x);*/
	PrintSatck(S);
	return 0;
}

说明

1、代码为自己手敲代码;

2、有错误或更好的办法欢迎留言评论;

3、若有侵犯个人或团体的权益请及时联系我;

4、本文为原创,转载或引用请注明出处

本文作者:逍遥子

本文连接:https://www.cnblogs.com/femme/p/16414142.html

版权:本人个人所有

posted @ 2022-06-26 19:26  ~逍遥子~  阅读(57)  评论(0编辑  收藏  举报