日常算法练习题【用两个栈实现队列】(每天进步一点点系列)

简介: 日常算法练习题【用两个栈实现队列】(每天进步一点点系列)

题目描述


剑指 Offer 09. 用两个栈实现队列

难度:简单


用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )


示例 1:

输入:

[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]

[[],[3],[],[]]

输出:[null,null,3,-1]


示例 2:

输入:

[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]

[[],[],[5],[2],[],[]]

输出:[null,-1,null,null,5,2]


提示:

1 <= values <= 10000

最多会对 appendTail、deleteHead 进行 10000 次调用


解题思路


题目大意: 本题的的目的就如题目名字一样,用两个栈实现队列。


解题思路:

首先我们要明白栈和队列的区别:

栈:先进后出

队列:先进先出

这样就可以了,我们需要用两个栈来模拟进队列,出队列,进队列和进栈没有什么区别,但是出队列和出栈就是相反的了,这是我们就可以利用这两个队列A(模拟进队列)和B(模拟出队列),进队列的时候就直接往A中push即可,但是出队列的时候我们需要把A从上往下弹出来,并且放到B中,这样操作后顺序就是反的了,我们就可以模拟出队列的情况了。


代码


/**
 * Keafmd
 *
 * @ClassName: ImplementTheQueueWithTwoStacks
 * @Description: 用两个栈实现队列
 * @author: 牛哄哄的柯南
 * @date: 2021-07-20 11:06
 */
class CQueue {
    Deque<Integer> stacckA; //入队栈
    Deque<Integer> stacckB; //出队栈
    public CQueue() {
        stacckA = new LinkedList<Integer>();
        stacckB = new LinkedList<Integer>();
    }
    public void appendTail(int value) {
       stacckA.push(value);
    }
    public int deleteHead() {
        //判断出队栈是否为空
        if(stacckB.isEmpty()){
            while(!stacckA.isEmpty()){
                //把A(入队栈)倒出来放到B中,然后让B弹出来,就相当于出队列,就是先进先出了
                stacckB.push(stacckA.pop());
            }
        }
        if(stacckB.isEmpty()){
            return -1;
        }else {
            //弹出B的栈顶,也就是相当于第一个出队列的
            int deleteItem = stacckB.pop();
            return deleteItem;
        }
    }
}

每天进步一点点!

不进则退!

相关文章
|
8月前
|
缓存 监控 算法
内网监控管理软件:PHP 语言队列算法揭秘
在数字化办公环境中,内网监控管理软件对企业的稳定运行和信息安全至关重要。本文深入介绍PHP中的队列算法及其在内网监控软件中的应用,包括监控数据收集、任务调度和日志记录等场景,通过代码示例展示其实现方法。队列算法可提高性能、保证数据顺序并实现异步处理,为企业提供高效的安全保障。
105 1
|
10月前
|
算法
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
591 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
190 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
11月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
278 3
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
140 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
算法 数据挖掘
【栈和队列】算法题 ---- 力扣(二)
【栈和队列】算法题 ---- 力扣
|
存储 算法
【栈和队列】算法题 ---- 力扣(一)
【栈和队列】算法题 ---- 力扣
|
19天前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
132 3

热门文章

最新文章