用两个栈来实现一个队列

1.

class Solution
{
public:
    void push(int node) {
    stack1.push(node);
    }

    int pop() {//删除队列前面元素
       int result;
        if(stack2.empty())//栈可以这样看空不    size不好
        {
         while(!stack1.empty())
         {
           int cc= stack1.top();
           stack2.push(cc);
           stack1.pop();
         }
        } 

       result = stack2.top();
       stack2.pop();
       return result;

    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

讲解:

原文地址:https://www.cnblogs.com/cgy1012/p/11369991.html

时间: 2024-08-04 00:25:28

用两个栈来实现一个队列的相关文章

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

import java.util.Stack; /**  * 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.  * @author user  *  *思路:队列是先入先出,栈是先入后出,可以将数据压入第一个栈后,在弹出来压入第二个栈,弹得时候直接从第二个栈弹出,弹出后又将  *第二个栈中的所有数据弹出重新压入的一个栈  */ public class Solution {     Stack<Integer> stack1 = new Stack<

用两个栈模拟实现一个队列

题目:如何用两个栈模拟实现一个队列?  如果这两个堆栈的容量分别是m和n(m>n),你的方法能保证的队列容量是多少?(这里讨论的是顺序栈,如果是链式栈的话完全没有必要考虑空间) 分析:栈的特点是“后进先出(LIFO)”,而队列的特点是“先进先出(FIFO)”.用两个栈模拟实现一个队列的基本思路是:用一个栈作为存储空间,另一个栈作为输出缓冲区,把元素按顺序压入两栈(模拟的队列),并按此顺序出队并输出即可. 如下图,用容量为m的栈作为存储空间,容量为n的栈作为输出缓冲区,一开始先将n个元素压入(pu

9.3栈和队列(七)——用两个栈来实现一个队列

/** * 功能:用两个栈来实现一个队列. */ import java.util.*; /** * 思路:需要修改peek()和pop(),以相反顺序执行操作.可以利用第二个栈来反转元素的次序. * stackNewest顶端为最新元素,stackOldest顶端为最旧元素,利用两个栈的元素的转移来实现. * */ public class MyQuene1 { Stack stackNewest ,stackOldest ; public MyQuene1(){ stackNewest= n

面试题9-用两个栈来实现一个队列,完成队列的Push和Pop操作

题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 一个栈压入元素,而另一个栈作为缓冲,将栈1的元素出栈后压入栈2中 代码 import java.util.Stack; /** *两个栈实现一个队列 * @author MSI */ public class Requeue{ Stack<Integer> sk1=new Stack<Integer>(); Stack<Integer> sk2=new Stack<

N5-用两个栈来实现一个队列

题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; /** * 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. * @author Sonya * *进队列时,直接进入栈一中,出栈时先将栈一中的所有按照出栈次序依序压入栈2中,弹出栈2首个元素 *即为第一个入队列的元素,然后再将2所有的元素依次压入栈一中 */ public class N5_Two_stack_to_

一张图展示:用两个栈来实现一个队列,完成队列的Push和Pop操作

一  基本思路 将s1作为存储空间,以s2作为临时缓冲区. 入队时,将元素压入s1. 出队时,将s1的元素逐个"倒入"(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个"倒回"s1. 二 图示 三 代码实现(Java) import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack

【算法】用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } public int pop() { if(stack1.empty()&&stack2.empty()){ th

两个栈实现双端队列

一个笔试题,当时竟然没想出来,现在实现下 1 /* 2 用两个栈实现双端队列 3 栈s1,s2. 4 pushback()和popback(),必须在s2为空的情况,把s2的都放s1中 5 pushfront()和popfront(),必须是在s1为空,把s1的都给放到s2中 6 */ 7 #include <iostream> 8 #include <stack> 9 using namespace std; 10 template <typename T> 11 c

用两个栈模拟无限长队列

思路:设置两个栈,栈1起入队的作用.栈2起出队的作用.入队时,所有元素进栈1,栈满时会通过realloc函数追加存储空间并且保存原来栈1的元素.出队时,先判断栈2是否为空,若为空,则会判断栈1是否为空,栈1为空,则说明队列为空,栈1不为空则将栈1的元素全部出栈并入栈2,栈2满时依然通过realloc追加存储空间,然后栈2元素出栈;若栈2不为空,栈2元素直接出栈 extern void *realloc(void *mem_address, unsigned int newsize);功能:先释放