#include "stdio.h" #include "stdlib.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存儲空間初始分配量 */ typedef int Status; typedef int SElemType; /* SElemType類型根據實際狀況而定,這裏假設爲int */ /* 順序棧結構 */ typedef struct { SElemType data[MAXSIZE]; int top; /* 用於棧頂指針 */ }SqStack; Status visit(SElemType c) { printf("%d ",c); return OK; } /* 構造一個空棧S */ Status InitStack(SqStack *S) { /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */ S->top=-1; return OK; } /* 把S置爲空棧 */ Status ClearStack(SqStack *S) { S->top=-1; return OK; } /* 若棧S爲空棧,則返回TRUE,不然返回FALSE */ Status StackEmpty(SqStack S) { if (S.top==-1) return TRUE; else return FALSE; } /* 返回S的元素個數,即棧的長度 */ int StackLength(SqStack S) { return S.top+1; } /* 若棧不空,則用e返回S的棧頂元素,並返回OK;不然返回ERROR */ Status GetTop(SqStack S,SElemType *e) { if (S.top==-1) return ERROR; else *e=S.data[S.top]; return OK; } /* 插入元素e爲新的棧頂元素 */ Status Push(SqStack *S,SElemType e) { if(S->top == MAXSIZE -1) /* 棧滿 */ { return ERROR; } S->top++; /* 棧頂指針增長一 */ S->data[S->top]=e; /* 將新插入元素賦值給棧頂空間 */ return OK; } /* 若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;不然返回ERROR */ Status Pop(SqStack *S,SElemType *e) { if(S->top==-1) return ERROR; *e=S->data[S->top]; /* 將要刪除的棧頂元素賦值給e */ S->top--; /* 棧頂指針減一 */ return OK; } /* 從棧底到棧頂依次對棧中每一個元素顯示 */ Status StackTraverse(SqStack S) { int i; i=0; while(i<=S.top) { visit(S.data[i++]); } printf("\n"); return OK; } int main() { int j; SqStack s; int e; if(InitStack(&s)==OK) for(j=1;j<=10;j++) Push(&s,j); printf("棧中元素依次爲:"); StackTraverse(s); Pop(&s,&e); printf("彈出的棧頂元素 e=%d\n",e); printf("棧空否:%d(1:空 0:否)\n",StackEmpty(s)); GetTop(s,&e); printf("棧頂元素 e=%d 棧的長度爲%d\n",e,StackLength(s)); ClearStack(&s); printf("清空棧後,棧空否:%d(1:空 0:否)\n",StackEmpty(s)); return 0; }