1.题目详情:

2.实例:

3.分析:
实例花里胡哨的 说白了就是用两个栈一个用入栈实现队列中的入队,一个用弹栈实现队列中的出队,实例输入写的花里胡哨 很多人可能都看不动 写出来也不懂怎么测试
看这里:(提交代码那 下面)

解释::"你的CQueue对象将被实例化并像这样调用:"
就是创建一个对象 用这个对象调用这两个方法 这里的value的意思是你要入队的值
要是还听不懂下面我拿实例1给做测试
4.具体操作:
- package com.ffyc.algorithm;
-
- import java.util.Stack;
-
- public class offer09 {
- //剑指offer9 栈和队列
- //题目:剑指 Offer 09. 用两个栈实现队列
- /*题目描述:
- 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,
- 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )
- */
-
- private Stack
enStack;//实现入队功能的入栈 - private Stack
outStack;//实现出队功能的弹栈 -
- public offer09() {//构造方法初始化
- enStack=new Stack<>();
- outStack=new Stack<>();
- }
-
- public void appendTail(int value) {//在enStack中入栈
- enStack.push(value);
- }
-
- public int deleteHead() {//在outStack中弹栈(弹栈的前提是栈里面有元素)
- //如果outStack为空
- if (outStack.isEmpty()){
- //就有判断enStack栈里面有没有元素 有元素拿到outStack栈中弹 没有直接返回-1
- if (enStack.isEmpty()){
- return -1;
- }else {
- while (!enStack.isEmpty()){
- outStack.push(enStack.pop());//把enStack的一个个拿出来放进outStack
- }
- }
-
- }else {//如果outStack不为空 (这一步可以不写 但是为了思路清晰 我这里就写上)
- //TODO 直接弹嘛
- return outStack.pop();//弹栈了就要返回回去 不然这里不返回那里返回 最后返回的数组里对不上
- }
- return outStack.pop();//弹栈把弹的元素返回
- }
-
-
- public static void main(String[] args) {
- offer09 offer09=new offer09();//构造为空 没有返回值null
- offer09.appendTail(3);//入队一个3 没有返回值null
- System.out.println(offer09.deleteHead());//出队 (会把3返回回来)
- System.out.println(offer09.deleteHead());//出队 没了 返回-1
- System.out.println(offer09.deleteHead());//出队 没了 返回-1
-
-
-
-
- }
-
- }
5.测试结果:

6.力扣提交:
