两个栈形成一个队列的JAVA实现
来源:互联网 发布:2016年癌症数据 编辑:程序博客网 时间:2024/05/01 05:22
栈A和栈B ,A\B容量为N,队列的大小为2N。
需要注意的是:入栈的元素插入A中(<N时),出栈时从B中。
遵循原则:1:出队在B中,当B为空时,若A不空,则将A中的元素全部插入B中进行出队。
2 入队在A中,当A满后,若B空,则将A中所有元素插入B中,之后再入队。(疑问,如果A满,而B非空,又不执行del,操作,那么就进行不下去了么,此时不能再入栈了)
3 只有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());
}
}
- 两个栈形成一个队列的JAVA实现
- Java数据结构---两个栈形成一个队列
- 如何用两个栈形成一个队列
- java 实现 两个栈实现一个队列的功能
- Java用两个队列实现一个栈的功能
- 两个栈实现一个队列(java)
- Java两个栈来实现一个队列
- java两个栈实现一个队列
- java-用两个栈实现一个队列
- 两个队列实现一个栈的功能
- 两个栈实现一个队列的功能
- 两个栈实现的一个队列
- 两个栈实现一个队列的功能
- 两个栈实现一个队列的算法
- 两个栈实现一个队列的功能
- 两个栈实现一个队列的思路
- 两个栈实现一个队列以及两个队列实现一个栈(Java)
- 两个队列实现一个栈 + 两个栈实现一个队列 Java
- MySQL技术内幕:InnoDB存储引擎读书笔记(下)
- path和classPath的区别
- 查找链表中倒数第k个元素的方法--c++
- Java Bean属性命名规范问题分析
- 浅析互联网场景的身份认证方法(全本)
- 两个栈形成一个队列的JAVA实现
- 快速排序的java实现
- vs2005直接编译WinCE6.0下的Media Player
- 【学习笔记】mysql索引原理之InnoDB
- java 读写文件参考2
- 如何通过GPS获取我当前所在的城市或街道
- Java 读写文件参考
- 指针问题
- 图像锐化