剑指offer(5)-----两栈实现队列

xiaoxiao2021-02-28  24

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

题目分析:首先了解两者数据结构特性,栈:先进后出,队列:先进先出。我们有stack1和stack2两个栈 入队:直接入stack1即可 出队:当stack2为空,我们直接把stack1中所有元素放到stack2,然后出队就是出stack2的元素,如果stack2有元素,直接出。这样我们就能达到先进先出的效果。

C++代码: class Solution { public: void push(int node) { stack1.push(node); } int pop() { int tmp=0; if(stack2.empty()) { while(!stack1.empty()) { int a=stack1.top(); stack2.push(a); stack1.pop(); } } tmp=stack2.top(); stack2.pop(); return tmp; } private: stack<int> stack1; stack<int> stack2; };

该题的拓展就是两队实现一栈:我们有queue1和queue2 入栈:直接入queue1 出队: 1.看queue1中的元素是不是只有一个,如果只有一个直接出. 2.不是的话就把queue1的元素出队到queue2,但是留下一个元素。然后出queue1留下的元素 3.把queue2的元素再出队到queue1

C++代码: class Stack { public: void push(int val) { queue1.push(val); } int pop() { while (queue1.size() != 1) { queue2.push(queue1.front()); queue1.pop(); } int sum = queue1.front(); queue1.pop(); while (!queue2.empty()) { queue1.push(queue2.front()); queue2.pop(); } return sum; } bool empty() { return queue1.empty(); } private: queue<int> queue1; queue<int> queue2; };
转载请注明原文地址: https://www.6miu.com/read-2629848.html

最新回复(0)