LeetCode解析------面试题09.用两个栈实现队列-设计

题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例1:

输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]]
输出:
[null,null,3,-1]

示例2:

输入:
[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”] [[],[],[5],[2],[],[]]
输出:
[null,-1,null,null,5,2]

简单介绍:
题目:用两个栈实现队列
题目难度:简单
使用语言:JAVA。
这道题来自leetcode题库的设计标签。

解题思路:
首先看题、分析题意,我们可以明确1个关键点:
1.栈是先入后出,队列是先入先出。如何使用两个栈模拟队列
既然,我们已经分析出来题目的关键任务了,下面我们就可以开始思考实现了。
我们采用算法与数据结构的思路来剖析一下这题,

数据结构:
要实现对数据的操作,我们要先明确存储数据的数据结构。
该题的数据结构的作用:
1.stack s1:保存队尾入队元素。
2.stack s2:调整栈元素,用来实现队头出队

算法:
既然明确了stack作为解决该题的数据结构,我们就可以开始我们的算法分析了。
1.队尾元素入队,保存到栈1
2.队列头部删除整数,利用栈2调整栈1的元素,实现队头元素出队。
分三种情况:
a.栈2非空,有上次留下的元素
b.栈2空,栈1空
c.栈2空,栈1不空

代码部分:

import java.util.Stack;

//栈是先入后出,队列是先入先出。利用一个辅助栈调整,即可实现队列
class CQueue {
    Stack<Integer> s1;//用于保存栈元素
    Stack<Integer> s2;//调整栈元素
    public CQueue() {
      s1=new Stack<Integer>();
      s2=new Stack<Integer>();
    }

    public void appendTail(int value) {
        s1.push(value);//入1栈
    }

    public int deleteHead() {
        if(!s2.empty()) return s2.pop();//2栈还有上次留下的元素
        if(s1.empty()) return -1;//1栈和2栈空
        while(!s1.empty()){
            s2.push(s1.pop());//调整1栈元素的顺序
        }
        return s2.pop();
    }
}


在这里插入图片描述

结语:
晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值