使用不带头结点的单链表实现链栈。
这是一份与2025年王道数据结构代码风格一致的链栈基本操作实现代码。尽可能的做到优雅简洁了。
定义
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}*LiStack;
初始化
void InitLiStack(LiStack &S){
S=NULL; //不带头结点的链栈
}
判断栈是否为空
bool StackEmpty(LiStack S){
if(S==NULL)
return true;
return false;
}
进栈
bool Push(LiStack &S,ElemType x){
LinkNode *p;
p=(LinkNode *)malloc(sizeof(LinkNode));
if(p==NULL) //内存分配失败
return false;
p.data=x;
p->next=S; //S是否为空栈并不影响。因为在初始化时,空栈已经设为S=NULL
S=p;
return true;
}
出栈
bool Pop(LiStack &S,ElemType &x){
if(S==NULL) //如果栈为空
return false;
LinkNode *p=S;
x=S.data;
S=S->next;
free(p);
return true;
}
获取栈顶元素
bool GetTop(LiStack S,ElemType &x){
if(S==NULL) //如果栈为空
return false;
x=S.data;
return true;
}