(1)用兩個棧實現佇列和(2)用兩個佇列實現棧

2021-09-17 18:59:26 字數 2525 閱讀 8483

很經典的乙個演算法題,既考察了棧的性質,又考察了佇列的性質。我們可以定乙個stack1,stack2.。入棧的時候直接入到stack1,當出棧的時候,先判斷stack2是否為空,為空的話,把stack1順序出棧壓入stack2.然後把stack2棧頂元素彈出。同理取front元素的時候也一樣。empty判斷直接判斷連個棧是否為空,size是兩個對戰的size相加。**實現如下:

#include

#include

#include

#include

#include

using namespace std;

template

class myqueue//先進先出

;template

bool myqueue::empty()

template

int myqueue::size()

template

void myqueue::push(t val)

template

void myqueue::pop()

else

this->m_stack2.pop();}}

template

t myqueue::front()

else

return this->m_stack2.top();}}

int main()

cout << endl;

cout <

cout << endl;

cout << "herq: ";

while (!herq.empty())

cout << endl;

system(「pause」);

return 0;

}我們用了模板類的設計方法,使**更具有普適性。執行結果如下:

(2)用兩個佇列實現棧。棧的特點是先進後出。那麼我們定義兩個q1,q2兩個佇列,出棧的時候,我們需要知道最後乙個元素,那麼我們可以把q1一直出隊(q2為空),直到它的size為1,那麼這個元素就是我們需要的出棧的元素。通過出棧我們可以判斷出q1、q2始終有乙個隊列為空(佇列不為空,沒法判斷那個先那個後)。入棧的操作,q1、q2都為空的時候,我們入隊q1,不都為空的時候,我們哪個不為空,入隊哪個。實現的**如下:

#include

#include

#include

#include

#include

using namespace std;

template

class mystack //先進後出

;template

bool mystack::empty()

template

int mystack::size()

template

void mystack::push(t val)

else if (!this->m_queue2.empty())

else if(!this->m_queue1.empty()) }

template

void mystack::pop()

this->m_queue1.pop();

}if(this->m_queue1.empty())//直到size為1,然後這個出隊,q2為空

this->m_queue2.pop();}}

template

t mystack::top()

t val = this->m_queue1.front();

this->m_queue2.push(val);

this->m_queue1.pop();//保留需要展示的隊首元素並返回,同時該元素要入隊q2,出隊q1,保證始終有乙個隊列為空。下同。

return val;

}if (this->m_queue1.empty())

t val = this->m_queue2.front();

this->m_queue1.push(val);

this->m_queue2.pop();

return val;}}

int main()

cout << endl;

cout << "herstack " << herstack.size() << endl;

cout << "mystack: " << mystack->size() << endl;

cout << "herstack: ";

while (!herstack.empty())

cout << endl;

cout << "mystack: ";

while (!mystack->empty())

cout << endl;

system(「pause」);

return 0;

}執行的結果如下圖所示:

用兩個棧實現佇列和用兩個佇列實現棧

template class cqueue 14 template 1516 19 template 20 t cqueue deletehead 2132 33 stack2不為空則直接輸出 34 t r value stack2.top 35stack2.pop 36return r value...

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

劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...

用兩個棧實現佇列與用兩個佇列實現棧

pragma once要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次 pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。用兩個棧實現佇列 每個模板函式的實現都需要加template模板列表...