两个堆栈实现列队

如何用两个堆栈模拟实现一个队列?

如何用两个堆栈模拟实现一个队列?  如果这两个堆栈的容量分别是m和n(m>n),你的方法能保证的队列容量是多少?

class Solution
{   

    //主要思路:建立两个栈S1,S2,当执行PUSH操作时将数据压到S1中;当执行POP操作时分两种情况:
    //1、如果S2不为空,则从S2中弹出一个数并输出;2、如果S2为空S1不为空则将S1中的数据全部导入S2中,
    //如果两个都为空则表示队列中没有数字,输出-1。

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

    int pop() {
        if(stack2.empty())
            {
            while(!stack1.empty())
                {
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        int p=stack2.top();
        stack2.pop();
        return p;

    }

private:
    stack<int> stack1;
    stack<int> stack2;
};
时间: 2024-12-07 20:17:04

两个堆栈实现列队的相关文章

包含MIN函数的栈+一个数组实现两个堆栈+两个数组实现MIN栈

1.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路:利用一个辅助栈来存放最小值 栈  3,4,2,5,1 辅助栈 3,2,1 每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就不入栈当前的辅助栈:当出栈时,辅助栈元素相等时也要出栈. class Solution { public: stack<int> mystack1;//辅助栈 stack<int> minstack;//最小栈 void push(int value) { if(

一个数组构造两个堆栈

***用一个数组表示两个堆栈,最大限度的利用空间 0 1 2 3 若果像右图中从中间分成两部分,则可能存在其中一个堆栈满了,而另一个堆栈还有空的,为你最大限度的利用空间,需要两边像中间长,知道指针碰头表示堆栈已满 #include<iostream>using namespace std;#define Maxsize 100class stack{public: int a[Maxsize]; int top1; int top2;};void push(stack&A, int x

4-7 在一个数组中实现两个堆栈

本题要求在一个数组中实现两个堆栈. 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag ); 其中Tag是堆栈编号,取1或2:MaxSize堆栈数组的规模:Stack结构定义如下: typedef int Position; struct SNode { ElementType *Data; Positio

013实现使用两个堆栈队列(keep it up)

实现使用两个堆栈队列 FIFO队列是一种数据结构(FIFO),后堆叠前进出的数据结构的(FILO). 两个栈实现的最简单的方法就是排队:队列中的第一个推栈, 队列将数据顺序的第一个堆栈推入第二堆叠,然后叠加. 两个规则: 1)进队列,则直接压入第一个栈 2)出队列,若果第二个栈不为空.直接pop(),如过第二个栈为空, 则把第一个栈中的数据所有压入第二个栈(第一个栈此时为空). 实际写代码时注意栈为空的情况. 代码: #include <iostream> #include <stack

6-7 在一个数组中实现两个堆栈

6-7 在一个数组中实现两个堆栈(20 分) 本题要求在一个数组中实现两个堆栈. 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag ); 其中Tag是堆栈编号,取1或2:MaxSize堆栈数组的规模:Stack结构定义如下: typedef int Position; struct SNode { Ele

两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】

两个栈实现队列两个队列实现堆栈问题,网上有很多资料.这里仅仅是叙述操作方法的介绍觉得至少. 两个栈实现一个队列 思想:假设两个栈分别为s1,s2.对s1进行入队,出队时,先推断s2是否为空,假设是则将s1中元素压入s2并弹出最上面元素,假设不是,则直接弹出s2最上面的元素. <span style="font-size:18px;">EnQueue(s1,s2,k){ push(s1,k)</span><span style="font-fami

两个堆栈共用一块新的存储空间溶液

就业数据结构前一段时间,有一个问题,与大家分享: 用顺序存储方式存储,现两栈共享空间V[1..m], top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是( ). A. |top[2]-top[1]|=0      B. top[1]+1=top[2] C. top[1]+top[2]=m      D. top[1]=top[2] 本来这是一个非常easy的问题,想必大家一眼就能得出答案是B,但我当时不知道是那根筋抽搐,自己跟自己较劲,牛角尖钻

用一个数组实现两个堆栈

#include <stdio.h> #include <stdlib.h> #define ElementType int const int MAXSIZE = 10; typedef struct Node *DStack; typedef struct Node{ ElementType Data[MAXSIZE]; int last0; int last1; }; bool Push(int flag,DStack &S, ElementType X){//0代表

6-7 在一个数组中实现两个堆栈 (20 分)

题目地址:https://pintia.cn/problem-sets/15/problems/730 Pop函数成功弹出后应该返回弹出的值,否则就是错的,应该是和PrintStack函数有关 Stack CreateStack(int Maxsize) { Stack S = (Stack)malloc(sizeof(struct SNode)); S->Data = (int *)malloc(sizeof(ElementType)* Maxsize); S->MaxSize = Maxs