兩個棧共享連續儲存單元

2021-10-02 12:45:09 字數 999 閱讀 9716

兩個棧共享連續儲存空間:它主要利用了棧底位置不變,棧頂位置動態變化的特性。

所以在定義棧頂指標時,需要定義兩個棧頂指標。

雙棧型別定義如下:

typedef

struct

dqstack;

兩個共享棧的壓棧演算法:

int

push

(stack *s,elemtype x,

int k)

if(k==0)

else

return1;

}

兩個共享棧的出棧演算法:

int

pop(stack *s,

int k,elemtype *x)

//將以s為棧空間的第k個棧頂元素取出if(

(k==1)

&&(s->top[1]

==max))if

(k==0)

else

return1;

}

取棧頂元素:

int

stacktop

(stack *s,

int k)

//取棧頂元素

printf

("棧頂資料為:%d\n"

,s->data[s->top[0]

]);return1;

}else

//x=s->data[s->top[1]];

printf

("棧頂資料為:%d\n"

,s->data[s->top[1]

]);return1;

}}

兩棧共享連續儲存空間,兩個棧的棧底分別設在這個儲存空間的兩端的儲存結構中,為了使兩棧的空間能夠做到互補餘缺,減少溢位的可能性,兩個棧的棧滿溢位都不能按位置判別,僅當兩棧的棧頂相遇時,才可能棧滿溢位。**最核心問題是在入棧,出棧時候判斷棧滿,棧空條件。

兩棧共享儲存空間(用乙個陣列儲存兩個棧)

思想 先開闢一段連續的儲存空間 乙個陣列 兩個棧棧頂分別指向陣列的兩端,隨著push操作兩棧的棧頂向陣列內側移動 隨著pop操作兩棧的棧頂向陣列外側移動。include include 棧的順序儲存結構,用一維陣列實現 define ok 1 define error 1 define true 1...

乙個陣列實現兩個棧 共享棧

問題分析 在順序棧的實現中,元素入棧是從下標為0的位置向上增長的,出棧是通過size 實現的。要想用乙個陣列實現2個棧,可以除了下標從0開始增長,還同時讓另乙個棧下標從size 1處開始減少。問題解決 定義top1,top2分別代表2個棧棧頂的下乙個位置的下標。棧1入棧時,元素放入top1位置,再使...

兩個棧實現佇列 兩個佇列實現棧

1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...