栈化栈为队(实现pushpoppeakempty等操作)

Posted AI 菌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈化栈为队(实现pushpoppeakempty等操作)相关的知识,希望对你有一定的参考价值。

一、题目

实现一个MyQueue类,该类用两个栈来实现一个队列。

在这里插入图片描述

二、分析

本题是 两栈实现队列 的加强版,在原来只实现push和pop的基础上,新增了实现peak()和empty()的要求。思路还是一样,可以先参考之前的题解,在来看这一题就简单多了。

需要注意的是:本题没有说明当队列中没有元素时,如果执行pop(),应该返回什么。考虑到代码的完整性,这里我默认返回的是-1。

三、题解

C++实现如下:

class MyQueue {
public:
    /** Initialize your data structure here. */
    stack<int> stack1;
    stack<int> stack2;

    MyQueue() {

    }
    
    /** Push element x to the back of queue. */
    void push(int x) {
        stack1.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    int pop() {
        if(!stack2.empty()){
            int ans = stack2.top();
            stack2.pop();
            return ans;
        }
        else{
            if(!stack1.empty()){
                while(!stack1.empty()){
                    stack2.push(stack1.top());
                    stack1.pop();;
                }
                int ans = stack2.top();
                stack2.pop();
                return ans;
            }
            else{
                return -1;  //当队列是空的时候,返回-1
            }
        }
    }
    
    /** Get the front element. */
    int peek() {
        if(!stack2.empty()){
            return stack2.top();
        }
        else{
            if(!stack1.empty()){
                while(!stack1.empty()){
                    stack2.push(stack1.top());
                    stack1.pop();
                }
                return stack2.top();
            }
            else{
                return -1; //当队列是空的时候,返回-1
            }
        }
    }
    
    /** Returns whether the queue is empty. */
    bool empty() {
            return stack1.empty() && stack2.empty();
        }
};

提交结果如下:
在这里插入图片描述

以上是关于栈化栈为队(实现pushpoppeakempty等操作)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—面试题 03.04. 化栈为队(队列)—day13

「测试开发全栈化-Go」(1) Go语言基本了解

2. 队列的实现

数据结构 - 循环队列

JVM学习

用顺序表实现一个循环队列