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

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

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

网络异常,图片无法展示
|


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 实现思路

网络异常,图片无法展示
|


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());
}
复制代码


运行结果:

网络异常,图片无法展示
|


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



相关文章
|
12天前
|
存储 算法 索引
【算法与数据结构】队列的实现详解
【算法与数据结构】队列的实现详解
|
15天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
15天前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解
|
1月前
|
存储 缓存 算法
【数据结构与算法-初学者指南】【附带力扣原题】队列
【数据结构与算法-初学者指南】【附带力扣原题】队列
|
1月前
|
存储 算法 Java
数据结构与算法:栈:如何实现浏览器的前进和后退功能??
数据结构与算法:栈:如何实现浏览器的前进和后退功能??
19 0
|
1月前
|
存储 算法 Java
【数据结构与算法】7、队列(Queue)的实现【用栈实现队列】
【数据结构与算法】7、队列(Queue)的实现【用栈实现队列】
36 0
|
1月前
|
算法 安全 Java
【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号
【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号
21 0
|
2月前
|
算法
【数据结构与算法】7.详解队列的基本操作
【数据结构与算法】7.详解队列的基本操作
|
2月前
|
算法
【数据结构与算法】6.栈
【数据结构与算法】6.栈
|
3月前
|
存储 算法 编译器
数据结构与算法:队列
数据结构与算法:队列
26 0