1.順序棧結構
typedef struct { SElemType data[MAXSIZE]; int top; /* 用於棧頂指針 */ }SqStack;
2.構造一個空棧S
Status InitStack(SqStack *S) { /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */ S->top=-1; return OK; }
3.把S置為空棧
Status ClearStack(SqStack *S) { S->top=-1; return OK; }
4.若棧S為空棧,則返回TRUE,否則返回FALSE
Status StackEmpty(SqStack S) { if (S.top==-1) return TRUE; else return FALSE; }
5.返回S的元素個數,即棧的長度
int StackLength(SqStack S) { return S.top+1; }
6.若棧不空,則用e返回S的棧頂元素,並返回OK;否則返回ERROR
Status GetTop(SqStack S,SElemType *e) { if (S.top==-1) return ERROR; else *e=S.data[S.top]; return OK; }
7. 插入元素e為新的棧頂元素
Status Push(SqStack *S,SElemType e) { if(S->top == MAXSIZE -1) /* 棧滿 */ { return ERROR; } S->top++; /* 棧頂指針增加一 */ S->data[S->top]=e; /* 將新插入元素賦值給棧頂空間 */ return OK; }
8.若棧不空,則刪除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; }
9.從棧底到棧頂依次對棧中每個元素顯示
Status StackTraverse(SqStack S) { int i; i=0; while(i<=S.top) { visit(S.data[i++]); } printf("\n"); return OK; }
Status visit(SElemType c) { printf("%d ",c); return OK; }
參考<<大話數據結構>>