在陣列的兩端存放兩個棧

2021-08-19 22:10:02 字數 1272 閱讀 6232

將陣列的起始位置看作是乙個棧的棧底,將陣列的尾部看作是另乙個棧的棧底,壓棧時,棧頂指標分別向中間移動,只要兩棧頂指標不相遇,兩個棧就可以一直使用,當兩個指標相遇時,陣列除指標所指位置外,其餘地方都已經被裝滿資料。當top1=投票+1時,陣列需要進行擴容處理。

#include

class astack

~astack()

void clear()

void pushastack1(const int& it) 

void pushastack2(const int& it)

int popastack1()

int popastack2()

const int& top1value()const

else

else}}

const int& top2value()const

else

else}}

int lengthtop1() const

int lengthtop2() const

void print()

else

for (int i = arrycapcity - 1; i > top2; --i)

}std::cout << "陣列的長度:" << arrycapcity << std::endl;

std::cout << "棧1的第乙個空閒值top1的值:" << top1 << std::endl;

std::cout << "棧2的第乙個空閒值top2的值:" << top2 << std::endl;}}

private:

void checkcapcity()

if (top1 == top2 + 1)//擴容

for (int i = arrycapcity - 1,j =newcapcity-1; i > top2; i--,j--)

delete listarray;

listarray = temparray;

top2 = newcapcity - 1 - ((arrycapcity - 1) - top2);//top2的新位置

arrycapcity = newcapcity;}}

private: 

int arrycapcity;

int top1, top2;

int* listarray;

};int main()

陣列兩端取數之和最大

乙個整數陣列,兩個人一次分別從左邊或者右邊拿走乙個數,兩個人足夠聰明,求第乙個人拿到數的最大和。可以提交 的題目鏈結 首先想到的是貪心法,每次都取兩端中的最大的數,但是很顯然這是錯的。例如以下的測試用例 2 6 8 3貪心法會得到結果9但是正確答案應該是10。而貪心法沒法解決全域性最優的時候,我們一...

兩個棧實現佇列 兩個佇列實現棧

1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...

兩個棧實現佇列,兩個佇列實現棧

include include include using namespace std 使用兩個棧實現佇列,實現了push,pop,front操作 其中棧s2是輔助棧,push直接在s1中插入 pop從s2中出棧,如果s2是空的,將s1倒進s2,然後再出棧,這樣減少了倒棧次數,比較高效。front就...