3.2實現鏈棧的各種基本運算
阿新 • • 發佈:2019-02-10
程式結構:與exp3-1.cpp相同
程式程式碼:
listack.cpp //鏈棧基本運算演算法 #include <stdio.h> #include <malloc.h> typedef char ElemType; typedef struct linknode { ElemType data; //資料域 struct linknode *next; //指標域 } LinkStNode; //鏈棧型別 void InitStack(LinkStNode *&s) { s=(LinkStNode *)malloc(sizeof(LinkStNode)); s->next=NULL; } void DestroyStack(LinkStNode *&s) { LinkStNode *p=s->next; while (p!=NULL) { free(s); s=p; p=p->next; } free(s); //s指向尾結點,釋放其空間 } bool StackEmpty(LinkStNode *s) { return(s->next==NULL); } bool Push(LinkStNode *&s,ElemType e) { LinkStNode *p; p=(LinkStNode *)malloc(sizeof(LinkStNode)); p->data=e; //新建元素e對應的結點p p->next=s->next; //插入p結點作為開始結點 s->next=p; return true; } bool Pop(LinkStNode *&s,ElemType &e) { LinkStNode *p; if (s->next==NULL) //棧空的情況 return false; p=s->next; //p指向開始結點 e=p->data; s->next=p->next; //刪除p結點 free(p); //釋放p結點 return true; } bool GetTop(LinkStNode *s,ElemType &e) { if (s->next==NULL) //棧空的情況 return false; e=s->next->data; return true; } exp3-2.cpp #include"listack.cpp" int main() { ElemType e; LinkStNode *s; char ch[5]={'a','b', 'c','d','e'}; int i=0; int length =5; printf("\n"); printf(" (1)初始化棧\n"); InitStack(s); printf(" (2)棧為%s\n",(StackEmpty(s)?"空":"非空")); printf(" (3)依次進棧元素a,b,c,d,e\n"); while(i<length) { Push(s,ch[i]); i++; } printf(" (4)棧為%s\n",(StackEmpty(s)?"空":"非空")); printf(" (5)出棧序列:"); while(!(StackEmpty(s))) { Pop(s,e); printf(" %c ",e); } printf("\n"); printf(" (6)棧為%s\n",(StackEmpty(s)?"空":"非空")); printf(" (7)銷燬棧\n"); DestroyStack(s); }
區別: