方法一:
在金安等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都做網(wǎng)站、網(wǎng)站制作 網(wǎng)站設計制作按需定制網(wǎng)站,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站制作,金安網(wǎng)站建設費用合理。
入隊時,將元素壓入s1。
出隊時,將s1的元素逐個“倒入”(彈出并壓入)s2,將s2的頂元素彈出作為出隊元素,之后再將s2剩下的元素逐個“倒回”s1。
方法二:
入隊時,先判斷s1是否為空,如不為空,說明所有元素都在s1,此時將入隊元素直接壓入s1;如為空,要將s2的元素逐個“倒回”s1,再壓入入隊元素。
出隊時,先判斷s2是否為空,如不為空,直接彈出s2的頂元素并出隊;如為空,將s1的元素逐個“倒入”s2,把最后一個元素彈出并出隊。
最優(yōu)解:
入隊時,將元素壓入s1。
出隊時,判斷s2是否為空,如不為空,則直接彈出頂元素;如為空,則將s1的元素逐個“倒入”s2,把最后一個元素彈出并出隊。
注意:考慮沒有元素可供出隊時的處理(2個棧都為空的時候,出隊操作一定會引起異常)
代碼實現(xiàn)
//test1.h #include#include using namespace std; template class queueWithTwoStack { public: queueWithTwoStack(); ~queueWithTwoStack(); void addTail(const T& data); T deleteHead(); private: stack s1; stack s2; }; //test1.cpp #include "test1.h" using namespace std; template queueWithTwoStack ::queueWithTwoStack() {} template queueWithTwoStack ::~queueWithTwoStack() {} //加只加在S1中 template void queueWithTwoStack ::addTail(const T& data) { s1.push(data); } //刪只刪S2中的 template T queueWithTwoStack ::deleteHead() { if((s2.empty())&&(s1.empty())) { printf("is empty!\n"); return -1; } //s2為空,把S1全倒在S2中后刪 if(s2.empty()) { while(!s1.empty()) { T top=s1.top(); s1.pop(); s2.push(top); } } //s2不為空直接刪 T head=s2.top(); s2.pop(); return head; } void test1() { queueWithTwoStack qw; qw.addTail(1); qw.addTail(2); qw.addTail(3); cout< qw; qw.addTail(1); qw.addTail(2); qw.addTail(3); cout< 參考:《劍指offer》面試題7
http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html
網(wǎng)站欄目:利用兩個棧實現(xiàn)隊列
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/ihciii.html