代码编织梦想

题目描述

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾

  • int pop() 从队列的开头移除并返回元素

  • int peek() 返回队列开头的元素

  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。

你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例

输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/implement-queue-using-stacks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目提示

  • 1 <= x <= 9

  • 最多调用 100 次 push、pop、peek 和 empty(这个提示元素最多为100个

  • 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)

代码

typedef struct
{
    int puttop,outtop;
    int put[100],out[100];//一个用来存放进入队列的元素 一个存放出队列
} MyQueue;


MyQueue* myQueueCreate()
{
    MyQueue *list=(MyQueue*)malloc(sizeof (MyQueue));//申请队列空间

    list->puttop=0;
    list->outtop=0;

    return list;//返回创建好的队列
}

void myQueuePush(MyQueue* obj, int x)
{
    obj->put[obj->puttop]=x;//将元素存入队列
    obj->puttop++;//下标向后移一位
}

int myQueuePop(MyQueue* obj)
{
   int putindex,outindex,tmp;
   putindex=obj->puttop;
   //下面if(outindex==0)中 使用--putindex是因为
   //输入元素后 puttop会向后移动一位 下标puttop此时无对应元素

   outindex=obj->outtop;

   if(outindex==0)//out[]为空 队列开头元素在put[]中 将队列开头元素放入out[]
   {
       while(putindex>0)
       {
            obj->out[outindex++]=obj->put[--putindex];//将put[]中元素转移
       }
   }

    tmp=obj->out[--outindex];//储存队列开头元素

    while(outindex>0)//除队列开头元素外 其他元素都放回put[]
    {
        obj->put[putindex++]=obj->out[--outindex];
    }
    //更新下标
    obj->puttop=putindex;
    obj->outtop=0;

    return tmp;
}

int myQueuePeek(MyQueue* obj)
{
    return obj->put[0];//返回队列中的第一个元素
}

bool myQueueEmpty(MyQueue* obj)
{
    if(obj->puttop==0&&obj->outtop==0)
        return true;
    else
        return false;
}

void myQueueFree(MyQueue* obj)
{
    free(obj);
}

/**
 * Your MyQueue struct will be instantiated and called as such:
 * MyQueue* obj = myQueueCreate();
 * myQueuePush(obj, x);
 
 * int param_2 = myQueuePop(obj);
 
 * int param_3 = myQueuePeek(obj);
 
 * bool param_4 = myQueueEmpty(obj);
 
 * myQueueFree(obj);
*/

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/implement-queue-using-stacks

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_73696731/article/details/128841512

leetcode232. 用栈实现队列_jaster_wisdom的博客-爱代码爱编程

使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(

如何用栈实现队列功能以及如何用队列实现栈功能_jocker_coding的博客-爱代码爱编程

如何用栈实现队列功能以及如何用队列实现栈功能 首先,我们要明确什么是栈和队列。 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。栈的特性:后进先出。 队列是一种先进先出的线性表。它只允许在表的前

c++ 用栈实现队列_giturtle的博客-爱代码爱编程

目录 例题描述解题思路图文出队 代码实现 例题描述 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 top() – 返回队列首部的元

用栈实现队列 用队列实现栈_oifengo的博客-爱代码爱编程_如何用队列实现栈

前言:你说栈和队列全部都用数组实现多好 非得找麻烦 到头来底层还是数组 上课弄了两节课 终于弄懂了这个栈和队列的相互实现 烦死了 还不如给学妹做图标开心 19.04.17更新:自闭ing…开心有个什么用?图标被直接弃用!!

用栈实现队列(面试常考)-爱代码爱编程

一、题目描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回

C语言-用栈实现队列-爱代码爱编程

用栈实现队列 栈是先进后出的数据结构,队列是先进先出的数据结构,所以当往队列中插入数据时,可以直接入栈。只是队列中先插入的在队首,队列中先插入的在栈底。弹出队首的数据,实际就是删掉栈底的数据,直接删除不了,可以利用另一个辅助栈,将当前栈中数据全部依次弹出,并push到辅助栈中,这时当前栈的栈底元素就变成了辅助栈的栈顶元素,直接pop掉辅助栈的栈顶元素就行

C语言用栈实现队列(数据结构)-爱代码爱编程

1.首先需要两个栈来模拟队列的出队和入队 2.假设入队1 2 3 4 ,如果要出队则不能直接出栈.需要进行数据的搬移: 先把s1的数据全部放入s2中,然后再在s2出栈->整个队列出队: 3.如果再要入队则将入队元素放入s1,若要出队则出栈s2元素,若s2为空则继续搬移s1的元素到s2即可. 4.总结:入队:s1    出队:s2 5

力扣:232.用栈实现队列-爱代码爱编程

力扣:232.用栈实现队列代码随想录解析题目: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean

《数据结构初阶》用队列实现栈&&用栈实现队列的细致解析-爱代码爱编程

纵有千古、横有八方 目录 一、⏱️本章重点 二、⏱️队列实现栈 三、⏱️栈实现队列 四、⏱️解题思路总结 一、⏱️本章重点 用两个队列实现栈用两个栈实现队列解题思路总结 二、⏱️队列实现栈  我们有两个队列:  入栈数据1、 2、 3 可以将数据入队列至队列一或者队列二。

JAVA——用栈实现队列-爱代码爱编程

问题:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列为空,返回 tr

如何用栈实现队列-爱代码爱编程

队列遵循先进先出(FIFO)原则,栈遵循后进先出(LIFO)原则。如果用栈来实现队列则需要用俩个栈来模拟队列进而实现队列的先进先出(FIFO)原则。步骤如下: (1)创建俩个栈一个进行入栈操作Stack<E> in,一个进行出栈操作Stack<E> out (2)队列的特点为先进先出所以要求栈in进,栈out出 (

用栈实现队列(c++)_海螺蜜的博客-爱代码爱编程

题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)。 leetcode链接 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty()

leetcode力扣秋招刷题路-0114-爱代码爱编程

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 114. 二叉树展开为链表(Mid) 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 r

栈和队列相互实现 (用队列实现栈/用栈实现队列) 超详细~_java 栈的使用 in2out()-爱代码爱编程

1.栈和队列的简单介绍 1.1 栈的简单介绍         栈,一种数据结构,只能从一端进出,先进后出,操作方式主要有出栈和入栈。在Java中,一般使用Stack(已不推荐)和Deque(双端队列)实现。 Java中的实现类: Stack: Stack<Integer> stack1 = new Stack<>();