棧 兩棧共享空間

2021-09-26 14:23:37 字數 910 閱讀 8982

對於乙個棧,我們只能盡量考慮周全,設計出合適大小的陣列處理。

但是,對於兩個相同型別的棧,我們卻可以做到最大限度地利用其事先開闢的儲存空間進行操作。

我們可以用乙個陣列來儲存兩個棧,只不過需要一點小技巧。

陣列有兩個端點,兩個棧有兩個棧底,讓乙個棧的棧底為陣列的始端,即下標為0處。另乙個棧的棧底為陣列的末端,即下標為陣列長度n-1處。

這樣,兩個棧如果增加元素,就是兩端點向中間延申。

它們是在陣列的兩端,向中間靠攏。

top1 和 top2 是棧1 和棧2 的棧頂指標,只要它倆不見面,兩個棧就可以一直使用。

棧1為空時,top1等於 -1

棧2為空時,top2等於 n

兩個棧見面時,也就是兩個指標相差 1 時,即top1 + 1 == top2為棧滿。

/* 兩棧共享空間結構 */

typedef

struct

sqdoublestack;

對於兩棧共享空間的push方法,除了要插入元素值引數外,還需要有乙個判斷是棧1還是棧2的棧號引數stacknumber。

/* 插入元素e為新的棧頂元素 */

status push

(sqdoublestack *s,selemtype e,

int stacknumber)

引數就只是判斷棧1棧2的引數stacknumber:

status pop

(sqdoublestack *s,selemtype *e,

int stacknumber)

else

if(stacknumber==2)

return ok;

}

以上是學習《 大話資料結構》的筆記!

兩棧共享空間

include include include define ok 1 define error 0 define maxsize 20 typedef int selemtype typedef int status typedef struct sqdoublestack 雙頭棧的初始化 sta...

兩棧共享空間

1.共有棧的實現 package edu.tcu.soft 兩棧共享空間 public class mybothstack 入棧操作 public void push int i,e e else 如果i 2,入右棧 if i 2 出棧操作 suppresswarnings unchecked pu...

兩棧共享空間

兩棧共享空間 儲存結構定義 const int stacksize 10 typedef int datatype typedef struct bothstack 入棧操作 void push bothstack s,int i,datatype x if i 1 s.data s.top1 x ...