1.用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。
隊列中的元素為int類型。
實現思路:
利用棧last in first out 的特性,使用兩個棧可以實現隊列的pop和push操作。
push: 往stack1中push元素。
pop: 先判斷stack2是否為空,若為空,將stack1中的所有元素pop至stack2中,取出stack2的棧頂元素pop出去;
若不為空,直接取出stack2的棧頂元素pop出去;
class Solution { public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty()) { while(!stack1.empty()) { int t=stack1.top(); stack2.push(t); stack1.pop(); } } int s=stack2.top(); stack2.pop(); return s; } private: stack<int> stack1; stack<int> stack2; };
2.用兩個隊列來實現一個棧,完成棧的Push和Pop操作。
隊列中的元素為int類型。
思路:
定義一個隊列為存儲隊列(queue1),另一個為中轉隊列(queue2)。
入棧時直接壓入queue1中,出棧時先將除queue1最后一個元素外依次pop出隊列,並壓入queue2中,將留在queue1中的最后一個元素出隊列即為出隊元素,之后再次將queue2中的元素壓回queue1中。
void stackpush(queue<int> &q1,int m) { q1.push(m); } int stackpop(queue<int> &q1,queue<int> &q2) { int num=q1.size(); for(int i=0;i<num-1;i++) { q2.push(q1.front()); q1.pop(); } int res=q1.front(); q1.pop(); for(int i=0;i<q2.size();i++) { q1.push(q2.front()); q2.pop(); } return res; }