1. 程式人生 > >資料結構第三章實驗2.實現鏈棧的各種基本運算

資料結構第三章實驗2.實現鏈棧的各種基本運算

(1)初始化棧s。
(2)判斷棧s是否為空。
(3)依次進棧元素a,b,c,d,e。
(4)判斷棧s是否為空。
(5)輸出出棧序列。
(6)判斷棧s是否為空。
(7)釋放棧。

#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct linknode
{
    ElemType data;              //資料域
    struct linknode *next;      //指標域
} LiStack;
void InitStack(LiStack *&s)     //初始化棧s
{ s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL; } void DestroyStack(LiStack *&s) //銷燬棧 { LiStack *p=s,*q=s->next; while (q!=NULL) { free(p); p=q; q=p->next; } free(p); //此時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; //新建元素e對應的節點*p p->next=s->next; //插入*p節點作為開始節點 s->next=p; } bool Pop(LiStack *&s,ElemType &e) //出棧 { LiStack *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(LiStack *s,ElemType &e) //取棧頂元素 { if (s->next==NULL) //棧空的情況 return false; e=s->next->data; return true; } extern void InitStack(LiStack *&s); extern void DestroyStack(LiStack *&s); extern bool StackEmpty(LiStack *s); extern void Push(LiStack *&s,ElemType e); extern bool Pop(LiStack *&s,ElemType &e); extern bool GetTop(LiStack *s,ElemType &e); int main() { ElemType e; LiStack *s; printf("棧s的基本運算如下:\n"); printf(" (1)初始化棧s\n"); InitStack(s); printf(" (2)棧為%s\n",(StackEmpty(s)?"空":"非空")); printf(" (3)依次進棧元素a,b,c,d,e\n"); Push(s,'a'); Push(s,'b'); Push(s,'c'); Push(s,'d'); Push(s,'e'); 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); }