一则有趣的算法题:两个栈实现一个队列

简介: 题目:如题,就是用两个栈实现队列的特性

image.png

1 基本架构

首先我们声明两个栈和自定义队列的基本结构、功能

static class MyQueue<E> {
    /**
     * 首先声明两个栈
     */
    public Stack stack1 = new Stack<E>();

    public Stack stack2 = new Stack<E>();

    /**
     * 添加操作
     * @param e
     */
    public void push(E e) {
    }

    /**
     * 弹出操作
     * @return
     */
    public E pop() {
        return (E) stack2.pop();
    }

}

2 实现思路

image.png

3 具体实现

接下来我们按步骤进行编码

static class MyQueue<E> {
    /**
     * 首先声明两个栈
     */
    public Stack stack1 = new Stack<E>();

    public Stack stack2 = new Stack<E>();

    /**
     * 添加操作
     *
     * @param e
     */
    public void push(E e) {
        //将元素压入stack1
        stack1.push(e);
    }

    /**
     * 弹出操作
     *
     * @return
     */
    public E pop() {
        //如果stack2为空,将stack1元素全部放入stack2
        if (stack2.isEmpty()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
            //如果不为空,直接弹出
        } else {
            return (E) stack2.pop();
        }
        //全部为空时抛出异常
        if (stack1.isEmpty() && stack2.isEmpty()) {
            throw new NoSuchElementException();
        }
        return (E) stack2.pop();
    }
}

4 测试

public static void main(String[] args) {
    MyQueue<Integer> queue = new MyQueue<>();
    queue.push(1);
    queue.push(2);
    queue.push(3);
    System.out.println(queue.pop());
    System.out.println(queue.pop());
    queue.push(4);
    queue.push(5);
    System.out.println(queue.pop());
}

运行结果:
image.png

测试结果是严格按照先进先出来执行

相关文章
|
4天前
|
算法
【优选算法专栏】专题十三:队列+宽搜(一)
【优选算法专栏】专题十三:队列+宽搜(一)
30 0
|
4天前
|
存储 算法
数据结构与算法:队列
在上篇文章讲解了栈之后,本篇也对这一章进行收尾,来到队列!
数据结构与算法:队列
|
4天前
|
存储 算法 索引
【算法与数据结构】队列的实现详解
【算法与数据结构】队列的实现详解
160 0
|
4天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
12 0
数据结构与算法 栈与队列
|
4天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
4天前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解
|
4天前
|
存储 缓存 算法
【算法与数据结构】栈的实现详解
【算法与数据结构】栈的实现详解
|
4天前
|
存储 算法 编译器
【数据结构】栈算法(算法原理+源码)
【数据结构】栈算法(算法原理+源码)
【数据结构】栈算法(算法原理+源码)
|
4天前
|
存储 算法 C语言
数据结构与算法:栈
朋友们大家好啊,在链表的讲解过后,我们本节内容来介绍一个特殊的线性表:栈,在讲解后也会以例题来加深对本节内容的理解
|
4天前
|
消息中间件 算法 调度
数据结构与算法——单向循环列表、栈和队列(附代码)
数据结构与算法——单向循环列表、栈和队列(附代码)
15 2