資料結構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; }