本題先前在複習王道時碰到過,當時因為寫偽**,只是想讓兩個棧來回倒,沒有考慮其他問題;這次在做題時直接寫系統提示我棧呼叫次數太多,段錯誤了。錯誤**如下:
class solution
int pop()
head = stack2.top;
stack2.pop();
while(stack2.empty())
return head;}}
private:
stackstack1;
stackstack2;
};
1.stack2如果非空則其pop出的數字序列仍為相應佇列pop操作應有的部分序列,無需每pop一次就重置一次stack2
2.在stack2空,stack1往stack2輸送數字時,無需再將數值儲存回stack1,stack2就是佇列序列的儲存體,stack1只是中轉站。
下面為正確**:
class solution
int pop()
//s2非空則從s2中pop
else
head = stack2.top();
stack2.pop();
}//s2空,s1非空則說明上一段佇列序列已清空,需要重新往s2輸送佇列序列
//注意,伴隨著s2數字的裝填,中轉站s1也要逐步清空
return head;
}private:
stackstack1;
stackstack2;
};
兩個棧實現乙個佇列 兩個佇列實現乙個棧
這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將top元素push到stack 2中,然後將stack 1 pop一次直到stack 1剩下最後乙個元素,這個就是最先push進去的,我們把它pop掉就可以了,同理,我們求queue的fro...
兩個棧實現乙個佇列,兩個佇列實現乙個棧
1 兩個棧實現乙個佇列 入隊時,直接壓入stack1中。出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。入隊操作 void enqueue stack s1,stack s2,int m 出隊操作 void deq...
兩個棧實現乙個佇列 兩個佇列實現乙個棧
方法一 public class main 出棧操作 public int deletehead while stack1.isempty return stack2.pop 方法二 public class main public int deletehead throws exception i...