資料結構 兩棧共享乙個陣列的學習

2021-07-10 07:02:00 字數 1077 閱讀 3681

充分利用順序棧單向延伸的特性 使用乙個陣列來儲存兩個棧 乙個棧底為陣列頭 乙個棧底為陣列尾 兩棧向中間延伸

#include

using namespace std;

const int maxsize = 100;

template

class bothack

//對於兩棧共享的無參建構函式 將兩個棧的棧頂指標分別置於 陣列頭的前乙個位置 和 陣列尾的後乙個位置 這也決定了陣列的更改方向

~bothack(){};

void push(int i,datatype x);//i用來表明是操作棧1還是棧2 將x入棧

datatype pop(int i);//於棧i中彈出棧頂元素 注意判空 判空操作不同於 判滿 判空操作對於棧1和棧2需要分別判斷

datatype gettop(int i);//根據i來標明獲取哪個棧的棧頂元素值

int empty()//當陣列為空時 兩棧都空

private:

datatype data[maxsize];

int top1,top2;//棧頂指標 指明棧頂元素的下標 空棧為-1

};templatevoid bothack::push(int i,datatype x)

if(i==1)

if(i==2)//注意:棧2的插入元素後 棧頂標識應該是減1

}templatedatatype bothack::pop(int i)

return data[top1--;];//將棧頂元素彈出後棧頂標識減1

}if(i == 2)

return data[top2++;];//將棧頂元素彈出後棧頂標識加1}}

templatedatatype bothack::gettop(int i)

return data[top1;];//棧頂標誌位不用變化

}if(i == 2)

return data[top2;];//棧頂標誌位不用變化

}注意:

1.兩個棧於插入元素的過程中 棧頂標誌位的變化是相反的

2.對於棧滿判斷可以判斷 top1和top2是否緊挨著就行 而對棧空的判斷需要分別進行

資料結構 乙個陣列實現兩個棧

乙個陣列實現兩個棧有很多想法,我先寫一種比較簡單的,思路如下圖所示 如下 includeusing namespace std 乙個陣列實現兩個棧 template class arraystack void pusharray1 const t x else cout 該棧已滿 0 else co...

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

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

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

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