单链表实现堆栈
环境
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
版权:本人个人所有