嚴蔚敏版資料結構——順序棧
阿新 • • 發佈:2018-12-11
其實也是順序表的一種特殊的操作,實際操作個人覺得要比順序表還簡單。上程式碼看看:
#include<stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 typedef struct { int *base; int *top; int stacksize; }SqStack; //---------順序表的初始化------------ int InitStack(SqStack &S) { S.base=new int[100]; if(S.base==NULL) return ERROR; S.top=S.base; S.stacksize=100; return OK; } //----------入棧--------------------- int Push (SqStack &S,int e) { if(S.top-S.base==S.stacksize) return ERROR; *S.top=e;//這裡要注意先賦值,top再往上移動 S.top++; return OK; } //_-----------打印出來看看------------- int Print(SqStack S) { int i; int *p;//用來遍歷的指標 p=S.base; for(i=0;i<(S.top-S.base);i++) { printf("第%d個數是:%d\n",i+1,*(p+i)); } return OK; } //------------出棧------------------- int Pop(SqStack &S) { int item; if(S.top==S.base) { return ERROR; } S.top--; //注意,top是空的,先下移才能得到棧頂元素 item = *S.top; return item; } //----------取棧頂元素--------------- int GetTop(SqStack S) { if(S.top!=S.base) return *(S.top-1); //下移一個才是棧頂 } int main() { int i; SqStack S; InitStack(S); //-----入棧五個數----- for(i=1;i<=5;i++) Push(S,i); Print(S); //-----出棧----------- printf("\n出棧元素為:%d",Pop(S)); printf("\n出棧後的棧表如下:\n"); Print(S); //------列印棧頂元素看看---- printf("\n列印棧頂元素是:%d\n",GetTop(S)); return 0; }