链式栈相比共享栈有更自由的空间大小,除非计算机中内存不足,否则不会出现空间不够的情况
链式栈基于链表,也属于顺序栈
#include<iostream>
typedef int Elemtype;
/*
1.链栈一般不存在栈满的情况
2.空战的判定条件通常定为top==NULL
*/
//链式栈
typedef struct SNode {
Elemtype data; //存放栈中元素
SNode *next; //栈顶指针
}SNode,*SLink; //链栈的结点
typedef struct LinkStack {
SLink top; //栈顶指针
int count; //链栈结点数
}LinkStack; //链栈
//进栈
bool Push(LinkStack *s,Elemtype e) {
SLink p = (SNode*)malloc(sizeof(SNode));
p->data = e;
p->next = s->top; //将原先的栈顶元素位置放在新结点的后面
s->top = p; //将栈顶指针指向新结点
s->count++; //栈元素数量+1
return true;
}
//出栈
bool Pop(LinkStack *s, Elemtype &e) {
if (s->top == NULL)
return false;
SNode *p = s->top; //辅助指针
e = p->data; //栈顶元素值
s->top = s->top->next; //栈顶指针后移
free(p);
s->count--; //栈中的元素个数减一
return true;
}
int main() {
}