日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双栈

發布時間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用棧底位置相對不變的特性,可以讓兩個順序棧共享一個空間。

具體實現方法大概有兩種:

一種是奇偶棧,就是所有下標為奇數的是一個棧,偶數是另一個棧。但是這樣一個棧的最大存儲就確定了,并沒有起到互補空缺的作用,我們實現了也就沒有太大意義。

還有一種就是,棧底分別設在數組的頭和尾。進棧往中間進就可以了。這樣,整個數組存滿了才會真的棧滿。

?

那我們直接開始代碼實現

?

首先定義結構體:

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]++;} }

?

總結

以上是生活随笔為你收集整理的双栈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。