java使用堆栈来模拟队列(fifo)功能_使用堆栈(Stack)来模拟队列(FIFO)功能,要求数据必...

本文介绍如何使用两个Java Stack实例模拟队列的First In First Out(FIFO)行为。通过将栈1作为输入栈进行入队操作,而栈2用于出队。在需要出队时,将栈1的元素转移到栈2,然后从栈2顶部出队,确保先进先出。详细代码展示了如何实现这一过程。
摘要由CSDN通过智能技术生成

用两个栈stack1和stack2模拟一个队列时,stack1作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将栈stack1退栈并逐个压入栈stack2中,stack1中最先入栈的元素,在stack2中处于栈顶。stack2退栈,相当于队列的出队,实现了先进先出。显然,只有栈stack2为空且stack1也为空,才算是队列空。

入栈时,若stack1未满则直接入栈,否则若stack2为空,则先将stack1的元素转移到stack2中再入栈;出栈时,若stack2不为空则直接出栈,否则若stack1不为空则将stack1中的元素倒入stack2再出栈。

这里用java的Stack类来实现,由于Stack使用Vector实现的,可动态增长,则入栈时无需考虑栈是否已满。

/**

* @author wjh

*

*/

public class StackToQueue {

private static Stack stack1 = new Stack();

private static Stack stack2 = new Stack();

//入队

private void enqueue(Stack stack1, int x){

stack1.push(x);

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

}

//出队

private void dequeue(Stack stack2){

int t;

if(!stack2.empty()){   //stack2不为空直接出队

t = stack2.pop();

System.out.println("出队元素:"+t);

}

else if(stack2.empty()&&!stack1.empty()){//stack2为空但stack1不为空时,

while(!stack1.empty()){               //stack1的元素全部出栈进入stack2,

t = stack1.pop();

stack2.push(t);

}

t = stack2.pop();                     //stack2出队

System.out.println("出队元素:"+t);

}

else

System.out.println("队列已经为空,请先入队!");

}

//判断队列是否为空

private boolean isEmpty(){

if(stack1.isEmpty()&&stack2.isEmpty()){

return true;

}

return false;

}

public static void main(String[] args) {

StackToQueue queue = new StackToQueue();

int flag,x;

Scanner scan = new Scanner(System.in);

System.out.println("请输入数字:0-入队;1-出队;2-判断队列是否为空;3-退出");

flag = scan.nextInt();

while(flag!=3){

switch(flag){

case 0:

System.out.println("请输入入栈的数字:");

x = scan.nextInt();

queue.enqueue(stack1, x);

break;

case 1:

queue.dequeue(stack2);

break;

case 2:

if(queue.isEmpty()){

System.out.println("队列为空!");

}

else

System.out.println("队列不为空!");

break;

case 3:

System.exit(0);

break;

default:

System.out.println("输入数字的数字有误!");

break;

}

System.out.println("请输入数字:0-入队;1-出队;2-判断队列是否为空;3-退出");

flag = scan.nextInt();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值