劍指offer 7 使用兩個棧實現乙個佇列

2021-07-31 13:09:44 字數 879 閱讀 5114

棧:先進後出

佇列:先進先出

首先構建棧q1,q2。

入佇列:入棧q1。

出佇列:首先將q1中的所有元素依次壓入q2中,此時q1為空,q2中存放所有資料,在依次將q2中資料pop,即實現佇列。

**實現如下:

#include #include #include #include using namespace std;

template class queue

~queue()

{} void push(const t& x) //入佇列

void pop() //出佇列

//此時,已經將資料全部壓入佇列q2中,q1為空,由q2實現佇列

size = q2.size();

if (size != 0)

--_size;

} void print() //列印

size = q2.size();

while (size)

cout << endl;

} size_t size() //佇列中的資料個數

bool empty() //判空

protected:

stackq1; //棧1

stackq2; //棧2

size_t _size; //佇列中的資料個數

劍指Offer7(兩個棧實現佇列)

棧的原理是先進後出,而佇列的原理是先進先出,因此我們很容易下想到將資料先放到棧1,然後將棧1的資料一次pop出到棧2,這樣到了棧2再pop時,資料就是和一開始進入棧1的順序一樣了。但是我們需要考慮乙個問題,那就是棧2是不是有值的情況,每次當棧1的資料pop到棧2時,我們都需要判斷棧2的資料是不是為空...

劍指offer 兩個棧實現佇列

使用兩個棧實現乙個佇列。棧是先進後出,佇列是後進先出。如果只有乙個棧那麼是無法實現佇列的,但是兩個棧完全可以。如下 templateclass cqueue templatet cqueue deletehead if stack2.size 0 throw queue is empty t ret...

劍指offer 兩個棧實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。棧的特點是先入後處,先出。而佇列的特點是先入先出,後出。所以我們整兩個棧,入棧的時候入第乙個。出棧的時候如果另外乙個非空,則優先處理另乙個。如果空的話,把所有的元素再 先出的放到另一棧裡,負負得正,得到了佇列的效果。c...