用两个栈实现队列
用两个栈实现队列,队列的声明如下,请实现他的两个函数appenTail和deleteHead
分别完成在队列尾部插入节点和在队列头部删除节点的功能
package com.cloud.algorithm.demo;
import org.junit.Test;
import java.util.Stack;
/**
* DATE: 2021/3/31
* Author: xiaoqu
* Version: 1.0.0
* 队列和栈
*/
public class Topic9 {
/**
* 面试题9:用两个栈实现队列
* 用两个栈实现队列,队列的声明如下,请实现他的两个函数appenTail和deleteHead
* 分别完成在队列尾部插入节点和在队列头部删除节点的功能
*/
@Test
public void topic9_1(){
CustomizeQueue queue = new CustomizeQueue();
int[] arrs={1,2,3,4,5,6};
queue.insertTailData1(arrs);
for(int i=0;1<(queue.stack2.size()-1+queue.stack1.size()-1);i++){
Object o = queue.deleteHeaderData();
System.out.println("弹出1:"+o);
}
queue.insertTailData(22);
queue.insertTailData(33);
queue.insertTailData(44);
for(int i=0;1<(queue.stack2.size()+queue.stack1.size());i++){
Object o = queue.deleteHeaderData();
System.out.println("弹出2:"+o);
}
System.out.println("stack1剩余:"+queue.stack1);
System.out.println("stack2剩余:"+queue.stack2);
}
public class CustomizeQueue{
Stack<Object> stack1 = new Stack<>();
Stack<Object> stack2 = new Stack<>();
/**
* 删除队列头部节点
* @return
*/
public Object deleteHeaderData(){
if(stack1.empty() && stack2.empty()){
return null;
}
if(!stack2.empty()){
Object pop = stack2.pop();
return pop;
}else{
while (!stack1.empty()){
stack2.add(stack1.pop());
}
Object pop = stack2.pop();
return pop;
}
}
/**
* 尾部插入节点
* @param data
*/
public void insertTailData(Object data){
stack1.add(data);
System.out.println("插入1:"+data);
}
/**
* 尾部插入节点
* @param datas
*/
public void insertTailData1(int[] datas){
for(Object data:datas){
stack1.add(data);
System.out.println("插入2:"+data);
}
}
}
}