將陣列的起始位置看作是乙個棧的棧底,將陣列的尾部看作是另乙個棧的棧底,壓棧時,棧頂指標分別向中間移動,只要兩棧頂指標不相遇,兩個棧就可以一直使用,當兩個指標相遇時,陣列除指標所指位置外,其餘地方都已經被裝滿資料。當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就...