乙個陣列實現兩個棧

2021-07-31 22:16:49 字數 1764 閱讀 7204

用乙個陣列實現兩個棧

方案一:奇偶下標依次儲存

將陣列下標為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...

乙個陣列實現兩個棧

乙個陣列實現兩個棧,和 共享棧其實是很類似的。有兩種方式實現 看圖就知道 一種是兩個棧增長方向一樣的 另一種起始位置分別在棧的兩端,往中間增長。方法一 增長方向一樣 方法 把陣列下標分為奇數和偶數 分別給兩個棧使用 如下 我在程式中注釋的 部分,可以放開 看看是什麼效果,注釋掉的那部分是我剛開始的想...

乙個陣列實現兩個棧

乙個陣列實現兩個棧 用乙個陣列實現兩個棧,有多種方法,但基本思路就下面三種方法,幾種演算法的實現區別不大,主要在與擴容時的條件,第一種 以中間向兩邊壓棧 可以採用兩個棧底分別在陣列中間,棧頂向兩邊移動,當兩個棧頂任意乙個到達陣列的兩邊時,陣列擴容。此種演算法有兩個擴容條件,二者滿足其一便擴容 即只要...