两个栈实现一个队列
原理:
先将数据存到第一个栈里,再将第一个栈里的元素全部出栈到第二个栈,第二个栈出栈,即可达到先进先出.
代码段:
import java.util.Stack;
/**
* @Author magic-Jing
* @Date 2020/7/27 15:06
*/
public class StacksToQueue {
Stack<Integer>stake1=new Stack<Integer>();
Stack<Integer>stake2=new Stack<Integer>();
public void add(int x){
//进队
stake1.push(x);
}
public int delete(){
//出队
if(pSize()!=0){//队列不为空
if(stake2.isEmpty()){
//如果stack2为空,则把stack1的数据全部加入到stack2中
stake2.push(stake1.pop());
}
return stake2.pop();
}
else {
System.out.println("队列已经为空");
return -1;
}
}
private int pSize() {
return stake1.size()+stake2.size();
}
}
两个队列实现一个栈
原理:
先将数据存到第一个队列里面,然后数据出队一直出队到地二个队列里面,直到第一个队列里面剩余一个数据,这个时候出队 即可达到先进后出的特性
代码段:
import java.util.LinkedList;
/**
* @Author magic-Jing
* @Date 2020/7/27 22:04
*/
public class QueueToStack {
LinkedList<Integer> queue1=new LinkedList<Integer>();
LinkedList<Integer>queue2=new LinkedList<Integer>();
public void push(int value)//入栈
{
queue1.addLast(value);
}
public int pop()//出栈 必须是非空的栈才能出栈啊
{
if(sSize()!=0)//栈不为空
{//移动一个队的n-1个到另一个中
if(!queue1.isEmpty())//q1 空
{
putN_1ToAnthor();
return queue1.removeFirst();
}
else//q2 空
{
putN_1ToAnthor();
return queue2.removeFirst();
}
}
else
{
System.out.println("栈已经为空啦,不能出栈");
return -1;
}
public int sSize()
{
return queue1.size()+queue2.size();
}
public void putN_1ToAnthor()//从非空中出队n-1个到另一个队列 因为队列总是一空一非空
{
if(!queue1.isEmpty())
{
while(queue1.size()>1)
{
queue2.addLast(queue1.removeFirst());
}
}
else if(!queue2.isEmpty())
{
while(queue2.size()>1)
{
queue1.addLast(queue2.removeFirst());
}
}
}
}