乙個陣列實現兩個棧

2021-07-12 02:19:53 字數 3140 閱讀 1516

題目:

乙個陣列a[1..n]來實現兩個棧,使得兩個棧中的元素總和不到n時,兩個都不會發生上溯。

思路(1):

建立乙個陣列,分別從兩邊開始,依次往中間走。

思路(2):

建立乙個陣列,乙個走奇數字,乙個走偶數字。

//奇偶方式

#define  _crt_secure_no_warnings

#includeusing namespace std;

templateclass twostack

~twostack()

}void push(int index, int data);

t pop(int index);

bool isempty(int index);

void disp();

t top(int index);

private:

int _top1;

int _top2;

int _len;

t* _arr;

};templatevoid twostack::push(int index, int data)

//}//else

////}

int flag = _len % 2;

if (index == 0)

}if (flag == 1)

}if (_top1 == -1)

else}/

else

}if (flag == 1)

}///

if (_top2 == -1)

else}}

templatet twostack::pop(int index)

else

}else

else

}return ret;

}templatebool twostack::isempty(int index)

templatevoid twostack::disp()}}

templatet twostack::top(int index)

if (1 == index && _top2 >=1)

cout <

exit(0);

}void test1()

~twostack()

}void push(int index, int data);

t pop(int index);

bool isempty(int index);

void disp();

t top(int index);

private:

int _top1;

int _top2;

int _len;

t* _arr;

};templatevoid twostack::push(int index, int data)

if (index == 0)

else

}templatet twostack::pop(int index)

else

}return ret;

}   

templatebool twostack::isempty(int index)

templatevoid twostack::disp()}}

templatet twostack::top(int index)

if (1 == index && _top2 

cout <

exit(0);

}void test1()

void test2()

~twostack() }

void push(int index, int data);

t pop(int index);

bool isempty(int index);

void disp();

t top(int index);

void increasecapcity();

private:

int _top1;

int _top2;

int _len;

t* _arr;

int _capacity;

};templatevoid twostack::increasecapcity()

for (int j = top1 + 1; j 

}if (_arr != null)

_arr = tmp;

_len = newlen;

_top2 = _len;

}templatevoid twostack::push(int index, int data)

if (index == 0)

else }

templatet twostack::pop(int index)

else

}return ret;

}    

templatebool twostack::isempty(int index)

templatevoid twostack::disp() }}

templatet twostack::top(int index)

if (1 == index && _top2 

cout <

exit(0);

}void test1()

void test2()

{ twostacks;

s.push(0, 1);

s.push(0, 2);

s.push(0, 3);

s.push(0, 4);

s.push(0, 5);

s.push(1, 6);

s.push(1, 7);

s.push(1, 8);

s.push(1, 9);

s.push(1, 10);

//cout<

本文出自 「fun」 部落格,請務必保留此出處

乙個陣列實現兩個棧

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

乙個陣列實現兩個棧

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

乙個陣列實現兩個棧

用乙個陣列實現兩個棧 方案一 奇偶下標依次儲存 將陣列下標為0的位置作為第乙個棧的棧底,下標為1的位置作為第二個棧的棧底,將整個陣列中偶數下標部分依次儲存在第乙個棧中,將陣列中奇數下標部分依次儲存在第二個棧中。方案二 從中間分別向兩邊壓棧 將陣列的中間位置看做兩個棧的棧底,壓棧時棧頂分別向兩邊移動,...