C Language 栈和队列 - 链栈
Posted Adorable_Rocy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C Language 栈和队列 - 链栈相关的知识,希望对你有一定的参考价值。
链栈和单链表区别是,栈的弹出元素是在头顶弹出,所以后一个元素的next域是前一个元素的地址,所以在入栈的时候格外的注意一下就行
- 创建单链栈:
typedef char ElemType;
typedef struct linknode {
ElemType data;
struct linknode *next;
} LinkNode;
- 初始化单链栈算法:
void initLStack(LinkNode *&s) {
s = new LinkNode;
s->next==NULL;
}
- 销毁链栈算法:
void destroyLStack(LinkNode *&s) {
LinkNode *pre=s,*p=s->next;
while(p!=NULL) {
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
- 进栈算法:
void pushLStack(LinkNode *&s,ElemType e) {
LinkNode *p; //链栈没有栈满的情况
p=new LinkNode;
p->data = e;
p->next=s->next;
s->next=p;
}
- 出栈算法:
bool popLStack(LinkNode *&s,ElemType &e) {
LinkNode *p;
if(s->next==NULL)
return false;
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return true;
}
就是从最后一个逆序出栈,直到栈空为止。
- 取栈顶元素算法:
bool getLStackTop(LinkNode *&s,ElemType &e) {
if(s->next==NULL)
return false;
e=s->next->data;
return true;
}
- 初始化进栈以及出栈操作结果如下:
以上是关于C Language 栈和队列 - 链栈的主要内容,如果未能解决你的问题,请参考以下文章