棧是一種先進後出的結構化表,棧只容許在棧頂操做元素。生活中其實有不少的例子,好比一堆盤子摞在一塊兒等等。棧的實現有兩種方式,一種是順序實現,另外一種是鏈式實現。主要是利用棧頂指針來進行操做。下面請看詳細代碼:ios
#include <iostream> #include <stdio.h> #include <stdlib.h> #define MaxSize 10 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ //靜態方式定義棧 typedef struct { int data[MaxSize];//靜態數組存放棧元素 int top;//棧頂指針 }SqStack; //靜態方式初始化棧 void InitStack(SqStack &S){ S.top = -1; } //靜態方式判斷是否棧空 bool StackEmpty(SqStack S){ if(S.top==-1){ return true; }else{ return false; } } //靜態方式進棧 bool PushStack(SqStack &S,int x){ if(S.top==MaxSize-1){//棧滿報錯 return false; } S.top = S.top+1;//指針加一,即指向下一個位置 S.data[S.top] = x;//元素進棧 } //靜態方式出棧 bool PopStack(SqStack &S,int &x){ if(S.top==-1){//棧空報錯 return false; } x = S.data[S.top];//棧頂元素出棧 S.top = S.top-1;//棧頂指針下移(邏輯上的刪除,其實元素依然存在於數組中) return true; } //靜態方式讀棧頂元素 bool PopStack(SqStack &S,int &x){ if(S.top==-1){//棧空報錯 return false; } x = S.data[S.top];//棧頂元素 return true; } /* //共享棧(避免浪費) typedef struct { int data[MaxSize];//靜態數組存放棧元素 int top0;//a棧頂指針 int top1;//b棧頂指針 }ShStack; //共享方式初始化棧 void InitStack(ShStack &S){ S.top0 = -1; S.top0 = MaxSize; } //判斷棧滿(top0+1==top1) */ //鏈式定義棧 (單鏈表只容許在頭結點位置進行操做的一種方式) typedef struct LinkNode{ int data;//數據域 struct LinkNode *next;//指針域 }LinkNode,*LStack; //鏈式初始化棧 bool InitLStack(LStack &S1){ S1 = (LinkNode *)malloc(sizeof(LinkNode)); if(S1==NULL){ return false; } S1->next = NULL; return true; } //鏈式進棧和出棧和單鏈表的頭插法和只在頭結點刪除元素同樣(見單鏈表插入和刪除) int main(int argc, char** argv) { SqStack S;//靜態方式聲明棧 LStack S1;//鏈式聲明棧 return 0; }