3 1雙棧結構及其基本操作

2021-10-09 06:36:28 字數 1371 閱讀 9237

題目:將編號0和1的兩個棧存放於乙個空間v[m]的陣列空間中,棧底分別處於陣列的兩端。當第0號棧的棧頂指標top[0]=-1時該棧為空;當第1號棧的棧頂指標top[1]=m時,該棧為空。兩個棧均從兩端向中間增長(如下圖)。試編寫雙棧初始化,判斷棧空,棧滿,進棧,出棧等演算法的函式。

雙棧結構的定義如下:

1.雙棧初始化

思路:為雙棧空間分配乙個大小為m的陣列空間。0號棧的棧頂指標和棧底指標的初始值都是-1;1號棧的棧頂指標和棧底指標的初始值都是m。表示棧空。

演算法:

status initstack(dblstack &s, int m)

s.top[0]=-1;

s.bot[0]=-1;

s.top[1]=m;

s.bot[1]=m;

return ok;

}

演算法:

status dblstackempty(dblstack &s)else

}

3.判斷雙棧是否滿

思路:當s.top[0]和s.top[1]相鄰即s.top[1]-s.top[0]==1時,表示棧滿。

演算法:

status dblstackfull(dblstack &s)
4.進棧

思路:首先判斷雙棧是否滿,若滿返回error;若不滿,將e1存到0號棧的棧頂,e2存到1號棧的棧頂,0號棧的棧頂指標向右移,1號棧的棧頂指標向左移。 (左右移是針對上圖)

演算法:

status push(dblstack &s,int e1,int e2)

s.v[++s.top[0]]=e1; //e1存到0號棧棧頂,棧頂元素右移

s.v[--s.top[1]]=e2; //e2存到1號棧棧頂,棧頂元素左移

return ok;

}

5.出棧

思路:首先判斷雙棧是否為空,若為空,則返回error;若不為空,則將0號棧的棧頂元素的值賦給e1,1號棧的棧頂元素的值賦給e2,0號棧的棧頂指標向左移,1號棧的棧頂元素向右移。(左右移是針對上圖)

演算法:

status pop(dblstack &s,int e1,int e2)

e1=s.v[s.top[0]--]; //將0號棧棧頂元素的值賦值給e1,棧頂元素左移

e2=s.v[s.top[1]++]; //將1號棧棧頂元素的值賦值給e2,棧頂元素右移

return ok;

}

雙鏈表及其基本操作

單鏈表無法逆向檢索,而雙鏈表可進可退,相比較而言儲存密度更低一些 typedef struct dnodednode,dlinklist bool initdlinklist dlinklist l 判斷雙鏈表是否為空 bool isempty dlinklist l void testdlinkl...

雙棧的基本操作

雙棧 兩棧共享向量空間,將兩棧棧底設在向量兩端,初始時,左棧頂指標為 1,右棧頂為n。棧頂指標相鄰時為棧滿,兩棧頂相向增長。includeusing namespace std typedef struct node node void init node s,int n void push1 no...

資料結構之棧及其基本操作

棧的順序儲存表示 include include include using namespace std define stack int size 100 define stackincrement 10 typedef struct sqstack 構造乙個空棧 在定義了棧的基本結構後,按照設定...