兩個棧共享連續儲存空間:它主要利用了棧底位置不變,棧頂位置動態變化的特性。
所以在定義棧頂指標時,需要定義兩個棧頂指標。
雙棧型別定義如下:
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...