兩個棧實現乙個佇列

2021-10-01 09:12:18 字數 787 閱讀 3562

本題先前在複習王道時碰到過,當時因為寫偽**,只是想讓兩個棧來回倒,沒有考慮其他問題;這次在做題時直接寫系統提示我棧呼叫次數太多,段錯誤了。錯誤**如下:

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...