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<Integer> enStack;//实现入队功能的入栈
private Stack<Integer> 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.力扣提交: