- 采用链式存储的栈称为链栈。
栈的链式存储类型可描述为:
typedef struct Linknode{
ElemType data;
struct Linknode *next;
} *LiStack;
创建/初始化:
void InitLiStack(LiStack &Lhead){
Lhead=NULL; //这里规定链栈没有头结点,Lhead指向栈顶元素。
}
进栈/增加元素:
bool Push(LiStack &Lhead,ElemType x){
Linknode *p=(Linknode *)malloc(sizeof(Linknode)); //创建一个结点
if(p==NULL)
return false;
p->data=x; //数据域设为x
p->next=Lhead->next; //把结点p链接到栈顶
Lhead=p;
return true;
}
出栈/删除元素:
bool Pop(LiStack &Lhead,ElemType &x){
if(Lhead==NULL)
return false; //如果栈空,报错
x=Lhead->data; //用x保存删除元素的数值
Linknode *p=Lhead; //用p记录已删除的结点,以便释放空间
Lhead=Lhead->next;
free(p);
return true;
}
判断栈空:
bool StackEmpty(LiStack &Lhead){
if(Lhead==NULL)
return true; //栈空
else
return false; //不空
}