1.3 链栈
//链栈的实现(带头结点) C++编译 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef struct LiNode{ int data; struct LiNode *next; }LiNode,*LiStack; //初始化栈 void InitStack(LiStack &L){ L=(LiNode*)malloc(sizeof(LiNode)); L->next=NULL; } //判断栈是否为空 bool StackEmpty(LiStack L){ return L->next==NULL; } //入栈 void Push(LiStack &L,int e){ LiNode *s=(LiNode*)malloc(sizeof(LiNode)); s->data=e; s->next=L->next; L->next=s; } //出栈 void Pop(LiStack &L, int &e){ if(StackEmpty(L)) return; LiNode *s=L->next; e=s->data; L->next=s->next; free(s); } //读栈顶 int GetTop(LiStack L){ if(!StackEmpty(L)) return L->next->data; } int main(){ LiStack L; //声明链栈 InitStack(L); //初始化 int n=3; int a[]={0,2,5}; for(int i=0;i<n;i++){ Push(L,a[i]); } for(int i=0,e;i<n;i++){ Pop(L,e); printf("%d ",e); } return 0; }
//链栈的实现(不带头结点) C++编译 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef struct LiNode{ int data; struct LiNode *next; }LiNode,*LiStack; //初始化栈 void InitStack(LiStack &L){ L=NULL; } //判断栈是否为空 bool StackEmpty(LiStack L){ return L==NULL; } //入栈 void Push(LiStack &L, int e){ LiNode *s=(LiNode*)malloc(sizeof(LiNode)); s->data=e; s->next=L; L=s; } //出栈 void Pop(LiStack &L, int &e){ if(StackEmpty(L)) return; LiNode *s=L; e=s->data; L=s->next; free(s); } //读栈顶 int GetTop(LiStack L){ if(!StackEmpty(L)) return L->data; } int main(){ LiStack L; //声明链栈 InitStack(L); //初始化 int n=3; int a[]={0,2,5}; for(int i=0;i<n;i++){ Push(L,a[i]); } for(int i=0,e;i<n;i++){ Pop(L,e); printf("%d ",e); } return 0; }
.
浙公网安备 33010602011771号