两个栈实现一个队列(栈实现先进先出)

首先,你必须知道栈和队列是什么。它们是一种不同的数据结构。从形态来说栈好像一个桶,所以它的规律是先进后出。队列好似我们现实中排队,规律是先进先出。

理解题目:

为什么要用两个栈实现一个队列?从以上叙述看,栈是先进后出,但我想先进先出,可我不想用队列,也就是说,请你用栈实现先进先出。问法不同而已。
在这里插入图片描述

问题解析:

知道了目标,实现起来就比较简单了。重点分三步:
1、利用栈的特点(先进后出)
2、创建两个栈
3、两个栈相互“倒腾”
语言不直观,看下图:
在这里插入图片描述

接着把栈2的首位依次取出,对于栈1就实现先进先出了!

代码实现:

class Queue {
            constructor() {
                this.inputStack = []; // 输入栈
                this.outputStack = []; // 输出栈
            }

            // 入队操作
            enqueue(item) {
                this.inputStack.push(item);
            }

            // 出队操作
            dequeue() {
                if (this.outputStack.length === 0) {
                    while (this.inputStack.length > 0) {
                        this.outputStack.push(this.inputStack.pop());
                    }
                }
                return this.outputStack.pop();
            }

            // 获取队首元素
            front() {
                if (this.outputStack.length === 0) {
                    while (this.inputStack.length > 0) {
                        this.outputStack.push(this.inputStack.pop());
                    }
                }
                return this.outputStack[this.outputStack.length - 1];
            }

            // 判断队列是否为空
            isEmpty() {
                return this.inputStack.length === 0 && this.outputStack.length === 0;
            }

            // 获取队列长度
            size() {
                return this.inputStack.length + this.outputStack.length;
            }

            // 清空队列
            clear() {
                this.inputStack = [];
                this.outputStack = [];
            }
        }

        let queue  = new Queue()
       	queue.enqueue(100)
        queue.enqueue(200)
        queue.enqueue(300)
        queue.dequeue()
        queue.dequeue()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值