赞
踩
链栈是一种基于链表结构实现的栈,栈是一种具有后进先出(LIFO)特性的数据结构,只允许在栈顶进行插入(入栈)和删除(出栈)操作。
链栈由节点构成,每个节点包含两部分:数据域和指针域。数据域存储实际的数据,指针域指向下一个节点。链栈没有固定的容量限制,可以动态地增加或减少节点,因此在内存利用上比顺序栈更加灵活。
- struct StackNode {
- DataType data; // 数据域,存储数据元素
- StackNode* next; // 指针域,指向下一个节点
- };
- struct LinkStack {
- StackNode* top; // 栈顶指针
- };
创建一个空链栈,并将栈顶指针置空。
- bool InitStack(LiStack &Li){
- Li=(Linknode *)malloc(sizeof(Linknode));//分配头节点
- if(Li==NULL){
- return false;
- }
- Li->next=NULL;
- return true;
- }
- bool Empty(LiStack Li){
- if(Li->next==NULL){//头节点下一个为空
- return true;
- }
- return false;
- }
- bool InsertLiStack(LiStack &Li,int e){
- if(Li->next==NULL){//头节点下一个为空
- return false;
- }
- Linknode *s;
- s==(Linknode *)malloc(sizeof(Linknode));
- s->data=e;
- s->next=Li->next;
- Li->next=s;
- return true;
- }
- bool DeleteLiStack(LiStack &Li,int e){
- if(Li->next==NULL){//头节点下一个为空
- return false;
- }
- Linknode *s;
- s==(Linknode *)malloc(sizeof(Linknode));
- s->next=Li->next;
- e=s->next->data;
- Li->next=s->next;
- return true;
- }
- bool GetElem(LiStack Li,int &x){
- if(Li->next!=NULL){
- x=Li->next->data;
- return x;
- }
- return false;
- }
链栈的优点是可以动态地分配内存空间,不受固定容量的限制,但相应地会增加一定的内存开销。链栈适用于不确定栈大小的情况,或者在栈操作频繁、容量需求不断变化的场景下。
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct Linknode{
- int data;
- struct Linknode *next;
- } Linknode,*LiStack;
- //初始化一个链栈
- bool InitStack(LiStack &Li){
- Li=(Linknode *)malloc(sizeof(Linknode));//分配头节点
- if(Li==NULL){
- return false;
- }
- Li->next=NULL;
- return true;
- }
- //判空
- bool Empty(LiStack Li){
- if(Li->next==NULL){//头节点下一个为空
- return true;
- }
- return false;
- }
- //入栈
- bool InsertLiStack(LiStack &Li,int e){
- if(Li->next==NULL){//头节点下一个为空
- return false;
- }
- Linknode *s;
- s==(Linknode *)malloc(sizeof(Linknode));
- s->data=e;
- s->next=Li->next;
- Li->next=s;
- return true;
- }
- //出栈
- bool DeleteLiStack(LiStack &Li,int e){
- if(Li->next==NULL){//头节点下一个为空
- return false;
- }
- Linknode *s;
- s==(Linknode *)malloc(sizeof(Linknode));
- s->next=Li->next;
- e=s->next->data;
- Li->next=s->next;
- return true;
- }
- //获得栈顶元素
- bool GetElem(LiStack Li,int &x){
- if(Li->next!=NULL){
- x=Li->next->data;
- return x;
- }
- return false;
- }
- int main(){
- LiStack l;
- bool nool=InitStack(l);
- if(nool){
- printf("true");
- }
- else{
- printf("false");
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。