栈和队列(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、栈是什么?

二、队列是什么?

三、用栈来实现队列

思路:

总结



前言

我们都知道栈和队列都是非常基础的数据结构,但对其底层原理实现却很少关注。通过用栈来实现队列,来体现其底层的原理。 

一、栈是什么?

栈是一个先入后出的有序列表;

特点是可以限制线性表中元素的插入和删除 只能在线性表的同一端 进行

允许插入和删除的一端,为变化的一端,称为栈顶( Top),另一端为固定的一端,称为栈底( Bottom);

二、队列是什么?

队列是一个先入先出的有序列表;

其队头随着输出的改变而改变,队尾则随着输入的改变而改变;

三、用栈来实现队列

思路:

用栈来实现队列需要两个栈:一个输入栈,一个输出栈;

在进栈的时候直接输入即可,但出栈的时候需要先把输入栈的数据全部输入到输出栈中,此时输出栈的栈顶即输入栈的栈底;

代码如下:

class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }

    public void push(int x) {
        stackIn.push(x);
    }

    public int pop() {
        zhuan();
        return stackOut.pop();
    }
    private void zhuan(){
        if (!stackOut.isEmpty()){
            return;
        }
        while (!stackIn.isEmpty()){
            stackOut.push(stackIn.pop());
        }
    }
    public int peek() {
        zhuan();
        return stackOut.peek();
    }

    public boolean empty() {
        return stackIn.isEmpty()&&stackOut.isEmpty();
    }

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值