鏈棧的基本操作實現(c語言)
阿新 • • 發佈:2019-01-10
#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; } }