双栈
利用棧底位置相對不變的特性,可以讓兩個順序棧共享一個空間。
具體實現方法大概有兩種:
一種是奇偶棧,就是所有下標為奇數的是一個棧,偶數是另一個棧。但是這樣一個棧的最大存儲就確定了,并沒有起到互補空缺的作用,我們實現了也就沒有太大意義。
還有一種就是,棧底分別設在數組的頭和尾。進棧往中間進就可以了。這樣,整個數組存滿了才會真的棧滿。
?
那我們直接開始代碼實現
?
首先定義結構體:
typedef struct {int top[2], bot[2]; //棧頂和棧底指針int *V; //棧數組int m; //棧最大可容納元素個數 }DblStack;?
初始化雙棧s,長度為n:
void Init(DblStack &S,int n) {S.m = n;S.V = new int [n+10];S.bot[0] = S.top[0] = -1;S.bot[1] = S.top[1] = S.m; }判空:
int EmptyStack0(DblStack S) {if(S.top[0]==-1)return 0;else return 1; } int EmptyStack1(DblStack S) {if(S.top[1]==S.m)return 0;else return 1; }判滿:(沒有單獨判斷一個棧的,是判斷整個儲存空間還有沒有地方)
int FullStack(DblStack S) {if(S.top[1]-S.top[0]==1)return 1;else return 0; }進棧:
void Push0(DblStack &S,int e) {if(S.top[1]-S.top[0]!=1){S.top[0]++;S.V[S.top[0]] = e;} } void Push1(DblStack &S,int e) {if(S.top[1]-S.top[0] != 1){S.top[1]--;S.V[S.top[1]] = e;} }出棧:
void Pop0(DblStack &S,int &e) {if(S.top[0]!=-1){e = S.V[S.top[0]];S.top[0]--;} } void Pop1(DblStack &S,int &e) {if(S.top[1]!=S.m){e = S.V[S.top[1]];S.top[1]++;} }?
總結
- 上一篇: 【我的书】Unity Shader的书
- 下一篇: 《过程控制系统》习题整理