数据结构/栈实现队列

简介: 数据结构/栈实现队列

前言

在学习数据结构的过程当中,我们会学到栈和队列,在本篇文章中,重点讲解的是栈实现队列,故关于栈和队列的讲解只是简单带过。



一、栈

栈是一种后进先出的线性表,即只能在固定的一端进行插入和删除。

栈 方法

Stack() 构造一个空的栈
E push(E e) 将e入栈,并返回e
E pop() 将栈顶元素出栈并返回
E peek() 获取栈顶元素
int size() 获取栈中有效元素个数
boolean empty() 检测栈是否为空

二、队列

队列是一种先进先出的线性表,即只能在一端进行插入,另一端进行删除。

队列 方法

boolean offer(E e) 入队列
E poll() 出队列
E peek() 获取队头元素
int size() 获取队列中有效元素个数
boolean isEmpty() 检测队列是否为空

三、栈实现队列

结合栈和队列的简单示意图

不难发现一个栈难以实现队列,故使用两个栈演示尝试。


我们可以发现,使用一个栈进行入队列,另一个栈进行出队列,正好可以实现我们的想法。


故代码如下:

class MyQueue {
    Stack<Integer> queue1;//入
    Stack<Integer> queue2;//出
    public MyQueue() {
        queue1 = new Stack<>();
        queue2 = new Stack<>();
    }
    public void push(int x) {
        queue1.push(x);
    }
    public int pop() {
        int x = 0;
        if(queue2.isEmpty()){
            while(!queue1.isEmpty()){
                queue2.push(queue1.pop());
            }
        }
        x = queue2.pop();
        return x;
    }
    public int peek() {
        int x = 0;
        if(queue2.isEmpty()){
            while(!queue1.isEmpty()){
                queue2.push(queue1.pop());
            }
        }
        x = queue2.peek();
        return x;
    }
    public boolean empty() {
        return queue1.isEmpty()&&queue2.isEmpty();
    }
}
}

结语

关于栈实现队列,以上就是今天的内容,本文仅仅简单介绍了一下。
这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐,谢谢!!!

如果有什么疑问或不同的见解,欢迎评论区留言哦。

相关文章
|
2天前
栈的基本应用
栈的基本应用
10 3
|
2天前
栈与队列理解
栈与队列理解
9 1
|
2天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
8 0
数据结构与算法 栈与队列
|
3天前
|
C++
数据结构(顺序队列 循环队列
数据结构(顺序队列 循环队列
8 0
|
3天前
|
C++
数据结构(共享栈
数据结构(共享栈
6 0
|
3天前
|
C++
数据结构(顺序栈
数据结构(顺序栈
9 2
|
3天前
|
容器
【栈与队列】栈与队列的相互转换OJ题
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
10 0
|
3天前
|
存储
【栈】基于顺序表的栈功能实现
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
12 0
|
3天前
|
存储 程序员
什么是堆,什么是栈
什么是堆,什么是栈
6 0
|
4天前
|
机器学习/深度学习 算法 测试技术
【单调栈】3113. 边界元素是最大值的子数组数目
【单调栈】3113. 边界元素是最大值的子数组数目