雙棧
利用棧底位置相對不變的特性,可以讓兩個順序棧共享一個空間。
具體實現方法大概有兩種:
一種是奇偶棧,就是所有下標為奇數的是一個棧,偶數是另一個棧。但是這樣一個棧的最大存儲就確定了,并沒有起到互補空缺的作用,我們實現了也就沒有太大意義。
還有一種就是,棧底分別設在數組的頭和尾。進棧往中間進就可以了。這樣,整個數組存滿了才會真的棧滿。
那我們直接開始代碼實現
首先定義結構體:
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]++;
}
}
數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。