乙個陣列實現兩個棧

2021-08-08 17:51:14 字數 1640 閱讀 6329

乙個陣列實現兩個棧,共有三個思路

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...

乙個陣列實現兩個棧

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

乙個陣列實現兩個棧

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