在上一篇关于顺序栈的介绍中我说过下一篇文章介绍链栈,接下来我就来详细介绍一下链栈吧,链栈其实和单链表几乎相同,相同的是相邻元素的地址不一定连续,不同的是向单链表插入元素时可以从任意位置进行插入,但从链栈插入元素时只能从尾部进行插入,还有一点不同的就是单链表和链栈的指针的方向相反。
在我看来,只要单链表学的好,链栈可以来说是非常容易的,如果对单链表不太理解,可以看我前面有关单链表的文章。
废话不多说了,下来就开始进行代码阶段了。
链栈的存储结构
typedef struct stack{
elemtype data;
struct stack next;
}StackNode;
接下来的代码是有关链栈的一些操作
Status initstack(StackNode* S){
S=NULL;
return OK;
}
2、入栈
Status pushstack(StackNode* &S,elemtype &e){
StackNode* p;
p=new StackNode; //分配一个空间,把地址赋值给p
p->data=e;
p->next=S;
S=p;
return Ok;
}
3、出栈
Status popstack(StackNode* &S,elemtype e){
if(S==NULL)
return ERROR;
StackNode* p;
p=S;
e=S->data; //把栈顶元素赋值给e
S=S->next; //把S后移一位
delete p; //释放掉栈顶元素
return OK;
}
4、取栈顶元素
Status getelem(StackNode* &S,elemtype &e){
if(S==NULL)
return ERROR;
e=S->data; //把栈顶元素赋值给e
return OK;
}
有关链栈的介绍就完了,希望你们能理解,谢谢大家的支持。