用乙個陣列實現兩個棧
方案一:奇偶下標依次儲存
將陣列下標為0的位置作為第乙個棧的棧底,下標為1的位置作為第二個棧的棧底,將整個陣列中偶數下標部分依次儲存在第乙個棧中,將陣列中奇數下標部分依次儲存在第二個棧中。
方案二:從中間分別向兩邊壓棧
將陣列的中間位置看做兩個棧的棧底,壓棧時棧頂分別向兩邊移動,當任何一邊到達陣列的起始位置或是陣列的最後位置,則擴容。
方案三:從兩邊向中間壓棧
將陣列的起始位置看做第乙個棧的棧底,將陣列的尾部看做第二個棧的棧底,壓棧時,棧頂分別向中間位置移動,直到兩個棧頂相遇,則擴容。
所以三種方案,第三種較好,無空間浪費,此處實現方案三。
**實現如下:
#include #include using namespace std;
//乙個陣列實現兩個棧
template class twostack
~twostack() //析構 }
void push1(const t& data) //入棧1
void push2(const t& data) //入棧2
void pop1() //棧1出棧 }
void pop2() //棧2出棧 }
t& top1() //棧1的棧頂
t& top2() //棧2的棧頂
bool empty1() //棧1判空
bool empty2() //棧2判空
size_t size1() //棧1的元素個數
size_t size2() //棧2的元素個數
void print() //列印
cout << endl;
while (size2() != 0)
cout << endl;
}protected:
void _checkcapacity() //檢查容量,並且增容
if (_top1 == _top2) //兩個棧頂相遇,需要增容
for (size_t j = oldcapacity - 1, i = _capacity - 1; j > _top2; --i, --j)
delete _arr; //釋放舊空間
_arr = temp;
_top2 = _capacity - 1;
} }protected:
t* _arr; //陣列
size_t _top1; //棧1的棧頂
size_t _top2; //棧2的棧頂
size_t _capacity; //容量
乙個陣列實現兩個棧
題目 乙個陣列a 1.n 來實現兩個棧,使得兩個棧中的元素總和不到n時,兩個都不會發生上溯。思路 1 建立乙個陣列,分別從兩邊開始,依次往中間走。思路 2 建立乙個陣列,乙個走奇數字,乙個走偶數字。奇偶方式 define crt secure no warnings includeusing nam...
乙個陣列實現兩個棧
乙個陣列實現兩個棧,和 共享棧其實是很類似的。有兩種方式實現 看圖就知道 一種是兩個棧增長方向一樣的 另一種起始位置分別在棧的兩端,往中間增長。方法一 增長方向一樣 方法 把陣列下標分為奇數和偶數 分別給兩個棧使用 如下 我在程式中注釋的 部分,可以放開 看看是什麼效果,注釋掉的那部分是我剛開始的想...
乙個陣列實現兩個棧
乙個陣列實現兩個棧 用乙個陣列實現兩個棧,有多種方法,但基本思路就下面三種方法,幾種演算法的實現區別不大,主要在與擴容時的條件,第一種 以中間向兩邊壓棧 可以採用兩個棧底分別在陣列中間,棧頂向兩邊移動,當兩個棧頂任意乙個到達陣列的兩邊時,陣列擴容。此種演算法有兩個擴容條件,二者滿足其一便擴容 即只要...