C語言基礎入棧,出棧操作
阿新 • • 發佈:2018-12-10
C語言入棧,出棧基礎操作,裡面非常詳細了,我就不囉嗦了
#include <iostream> #include <stdio.h> #include <stdlib.h> #include<cstring> #define ERROR -1 typedef int ElementType; typedef enum { push, pop, end } Operation; /*typedef enum { false, true } bool;*/ typedef int Position; typedef struct SNode *PtrToSNode; struct SNode { ElementType *Data; /* 儲存元素的陣列 */ Position Top; /* 棧頂指標 */ int MaxSize; /* 堆疊最大容量 */ }; typedef PtrToSNode Stack; //初始化棧 Stack CreateStack(int MaxSize) { //準備存放結構體型的變數資料 Stack S = (Stack)malloc(sizeof(struct SNode)); //動態申請陣列空間 S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType)); //把棧頂指標指向0 S->Top = 0; //給MaxSize賦值 S->MaxSize = MaxSize; return S; } //入棧 bool Push(Stack S, ElementType X) { //判斷棧頂是否與棧容量相等 if (S->MaxSize == S->Top) { //輸出Stack Full puts("Stack Full"); return 0; } //不相等則棧頂指標+1 S->Data[S->Top++]=X; return 1; } //出棧 ElementType Pop(Stack S) { //判斷棧頂是否為空 if (!S->Top) { //輸出Stack Empty puts("Stack Empty"); //返回ERROR return ERROR; } //返回棧頂元素 return S->Data[--S->Top]; } Operation GetOp() { //定義字元陣列a char a[11]; //把接收的字串寫入字元陣列 scanf("%s", a); //判斷push, pop, end是哪一個,並返回push, pop, end其中一個 if (!strcmp("Push", a)) return push; if (!strcmp("Pop", a)) return pop; if (!strcmp("End", a)) return end; } //列印棧內元素 void PrintStack(Stack S) { while (S->Top) { printf("%d ", S->Data[--S->Top]); } puts(""); } int main() { ElementType X; Stack S; int N, done = 0; //接收棧容量 scanf("%d", &N); //把棧初始化 S = CreateStack(N); //迴圈操作棧,直到done=1; while (!done) { //根據輸入操作進行選擇對應操作 switch (GetOp()) { //入棧 case push: scanf("%d", &X); Push(S, X); break; //出棧 case pop: X = Pop(S); //出棧元素列印 if (X != ERROR) printf("%d is out\n", X); break; //結束程式,列印棧內元素 case end: //列印棧內元素 PrintStack(S); done = 1; break; } } return 0; }