乙個陣列實現兩個棧,共有三個思路
1.奇偶法
2.從中間分別向兩邊壓棧
3.從兩邊向中間壓棧
將陣列的起始位置看做第乙個棧的棧底,將陣列的尾部看做第二個棧的棧底,壓棧時,棧頂分別向中間位置移動,直到兩個棧頂相遇,則擴容。
第三種 最節省空間,不會造成空間浪費,所以**實現只實現這一種
#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()
size_t size2()
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...
乙個陣列實現兩個棧
乙個陣列實現兩個棧,和 共享棧其實是很類似的。有兩種方式實現 看圖就知道 一種是兩個棧增長方向一樣的 另一種起始位置分別在棧的兩端,往中間增長。方法一 增長方向一樣 方法 把陣列下標分為奇數和偶數 分別給兩個棧使用 如下 我在程式中注釋的 部分,可以放開 看看是什麼效果,注釋掉的那部分是我剛開始的想...
乙個陣列實現兩個棧
乙個陣列實現兩個棧 用乙個陣列實現兩個棧,有多種方法,但基本思路就下面三種方法,幾種演算法的實現區別不大,主要在與擴容時的條件,第一種 以中間向兩邊壓棧 可以採用兩個棧底分別在陣列中間,棧頂向兩邊移動,當兩個棧頂任意乙個到達陣列的兩邊時,陣列擴容。此種演算法有兩個擴容條件,二者滿足其一便擴容 即只要...