1. 程式人生 > >資料結構C/C++程式碼實現 棧連結串列基本操作

資料結構C/C++程式碼實現 棧連結串列基本操作

實現棧連結串列基本操作:

#include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct linknode {     ElemType data;     struct linknode *next; }LiStack; /****************初始化鏈棧********************/ void InitStack(LiStack* &s) {     s=(LiStack*)malloc(sizeof(LiStack));     s->next=NULL; } /****************銷燬鏈棧********************/ void DestroyStack(LiStack* &s) {     LiStack *p=s->next,*q=s;     while(p!=NULL)     {         free(q);         q=p;         p=p->next;     }     free(p); } /****************判斷鏈棧是否為空********************/ bool StackEmpty(LiStack* &s) {     return (s->next==NULL); } /****************進棧********************/ void Push(LiStack* &s,ElemType e) {     LiStack *p;     p=(LiStack*)malloc(sizeof(LiStack));     p->data=e;     p->next=s->next;     s->next=p; } /****************出棧********************/ bool Pop(LiStack* &s,ElemType &e) {     LiStack *p=s->next;     if(s->next!=NULL)         return false;     else     {         e=p->data;         s->next=p->next;         free(p);         return true;     } } /****************得到棧頂元素********************/ bool GetTop(LiStack* &s,ElemType &e) {     LiStack *p=s->next;     if(s->next==NULL)         return false;     e=p->data;     return true; } /****************輸出鏈棧元素********************/ void PrintStack(LiStack* &s) {     LiStack *p=s->next;     while(p!=NULL)     {         printf("%d ",p->data);         p=p->next;     } }

int main()  {     LiStack a;   LiStack *s = &a;   ElemType e;   InitStack(s);   StackEmpty(s);   int n;   puts("請輸入要進棧的個數:");   scanf("%d", &n);   while(n--)   {     int m;     scanf("%d", &m);     Push(s, m);   }   printf("輸出棧鏈元素:");   PrintStack(s) ;   GetTop(s,e);   Pop(s, e);   printf("出棧的元素是:%d\n", e);   DestroyStack(s);   return 0; }