充分利用順序棧單向延伸的特性 使用乙個陣列來儲存兩個棧 乙個棧底為陣列頭 乙個棧底為陣列尾 兩棧向中間延伸
#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...