两个栈形成一个队列的JAVA实现

来源:互联网 发布:2016年癌症数据 编辑:程序博客网 时间:2024/05/01 05:22
两个栈形成一个队列的JAVA实现

A和栈B  ,A\B容量为N,队列的大小为2N

  需要注意的是:入栈的元素插入A中(<N时),出栈时从B中。

  遵循原则:1:出队在B中,当B为空时,若A不空,则将A中的元素全部插入B中进行出队。

2  入队在A中,当A满后,B空,则将A中所有元素插入B中,之后再入队。(疑问,如果A满,而B非空,又不执行del,操作,那么就进行不下去了么,此时不能再入栈了)

只有B中为空时,才能将A中的元素插入B中,且必须全部插入B中。

 

 

import java.util.Stack;

public class MyQueue {

public static Stack<Integer> sa=new Stack<Integer>();

public static Stack<Integer> sb=new Stack<Integer>();

public static int atop=0;

public static int btop=0;

//考虑栈A、B的大小都为n=15;

public static int n=15;

public static boolean isEmpty()

{

if(sa.isEmpty()&&sb.isEmpty())

return true;

else

return false;

}

public static int getSize()

{

return atop+btop;

}

public static void EnQueue(int x)

{

int xp;

//入栈是在栈A中进行,需要注意的是,当A中元素满,若栈B为空时,需要将A中的元素都

if(atop<n)  //栈A未满,直接插入,移动栈顶

{

sa.add(x);

atop++;   //假设,栈空,atop指在0

System.out.println("此时入队元素为:"+x);

}

else //栈A满,若栈B空,则将A中所有元素pop,在push如B中,再进行插入操作

{

if(sb.isEmpty())

{

while(!sa.isEmpty())

{

   xp=sa.pop();

atop--; //出栈,指针移动

sb.add(xp);

btop++; //

}

sa.add(x);

atop++;

System.out.println("此时入队元素为:"+x);

}

else  //  若A满,B可能不满,但也不可以执行插入操作

{

System.out.println("此时不能执行插入操作");

}

}

}

public static void DeQueue()

{

int xp;

int xq;

if(sb.isEmpty())  //栈B空

{

if(sa.isEmpty())  //这样两个都空,则表示栈空,不能执行出栈操作

{

System.out.println("栈空,此时不能执行出栈操作");

}

else  // A栈不空,则将A栈元素全部插入B栈中,再出栈【不能执行插入操作时的队列最多含有n+1个元素】

{

while(!sa.isEmpty())

{

xp=sa.pop();

atop--;

sb.push(xp);

btop++;

}

xq=sb.pop();

btop--;

System.out.println("此时出队元素为:"+xq);

}

}

else

{

xq=sb.pop();

btop--;

System.out.println("此时出队元素为:"+xq);

}

}

public static void main(String args[])

{

EnQueue(1);

EnQueue(3);

EnQueue(6);

EnQueue(7);

EnQueue(12);

EnQueue(18);

EnQueue(14);

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

System.out.println(sa.isEmpty());

System.out.println(sa.size());

System.out.println(sb.isEmpty());

System.out.println(sb.size());

System.out.println(isEmpty());

EnQueue(1);

EnQueue(3);

EnQueue(6);

EnQueue(7);

EnQueue(12);

EnQueue(18);

EnQueue(14);

EnQueue(1);

EnQueue(3);

EnQueue(6);

EnQueue(7);

EnQueue(12);

EnQueue(18);

EnQueue(14);

EnQueue(1);//15

EnQueue(3);

EnQueue(6);

EnQueue(7);

EnQueue(111);

EnQueue(17);

EnQueue(16);

EnQueue(1);

EnQueue(3);

EnQueue(6);

EnQueue(7);

EnQueue(111);

EnQueue(17);

EnQueue(16);

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

DeQueue();

EnQueue(1);

EnQueue(3); // 这是最后一个元素,此时栈中已经满了

EnQueue(6);

EnQueue(7);  

EnQueue(111);

EnQueue(17);

EnQueue(16);

System.out.println(sa.isEmpty());

System.out.println(sa.size());

System.out.println(sb.isEmpty());

System.out.println(sb.size());

System.out.println(atop);

System.out.println(btop);

System.out.println(getSize());

}

 

}

原创粉丝点击