如果乙個程式需要使用多個棧,使用順序棧就會造成棧空間大小難以估計,從而造成有的棧溢位有的棧空閒,此時可以建立乙個共享棧,通俗地講就是將兩個棧的棧底設定在同乙個陣列的兩端,棧頂位置用top1、top2表示。如圖:
所以共享棧的資料結構型別為:
#include #define max 10
#define inf 0xfffffff
typedef int datatype;
struct dstack
;
基本操作實現:
void initdstack(dstack &s)
bool isfull(dstack &s)
void push(dstack &s, datatype e, int tag)
if(tag)
s.data[s.top1++] = e;
else
s.data[s.top2--] = e;
}bool isempty(dstack &s, int tag)
datatype pop(dstack &s, int tag)
if(tag)
return s.data[--s.top1];
else
return s.data[++s.top2];
}
測試**:
int main()
for(int i = 0; i < 10; i++)
printf("\n");
push(s, 100, 1);
push(s, 100, 0);
printf("\n\n");
//測試pop
for(int i = 0; i < 5; i++)
t1 = pop(s, 1);
t2 = pop(s, 0);
return 0 ;
}
兩棧共享儲存空間 線性結構棧
ifndef doublestack h define doublestack h 1 引入 1.如果需要兩個相同型別的棧 順序結構 分別為了兩個棧開闢儲存空間。極有可能出現的情況是棧1已經滿了,而棧2還有很多空閒區域。這樣就不合理。2.解決方法是使用乙個陣列來同時儲存兩個這兩個棧,這樣可以讓兩個順...
資料結構 線性結構 棧
棧 和佇列相反的作用,越是先存入的資料就得越到後才能取出,根據這個特性可以用陣列或鍊錶模擬出棧。陣列模擬棧 新增資料正常順序,每天加乙個數棧頂加一次,彈棧的時候將棧頂指標的數彈出即可,遍歷棧陣列時是從棧頂開始迴圈。1 class arraystack9 判斷棧是否已滿 10public boolea...
資料結構 共享棧和鏈式結構棧
共享棧其實就是兩個棧,合起來,共享乙個陣列存資料。這樣子的好處就是,兩個棧同乙個空間。當棧1的資料多,棧2資料比較少,就可以這樣子共享,對空間的浪費就會減少。當棧1為空,top1 1 棧2為空,top2 n 關鍵 有兩個棧底,和兩個棧頂top1,top2,從陣列兩端向中間靠攏。當 top1 1 to...