栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

栈模拟队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈模拟队列

众所周知,Queue队列是一个先进先出(First In First Out)的有序表,只能在队尾添加元素,在队首取出元素。

然而,Stack栈是一种后进先出(LIFO:Last In First Out)的数据结构。 只能不断地往Stack中压入(push)元素,最后进去的必须最早弹出(pop)。

因此,要想用栈来模拟队列,就必须用两个栈来进行入队和出队的操作,用一个栈做入队栈,用另一个栈作为出队栈。

 

当第一次入队操作的时候,将入队的元素放入入队栈,第一次出队操作的时候,将入队栈的元素出栈放入出队栈,然后遍历出队栈;当做第二次入队操作的时候,需要先检查出队栈中是否还有元素,如果有元素,需将出队栈的剩余元素先放入入队栈,然后将需要入队的元素放入入队栈,当做第二次出队操作的时候,需要先检查入队栈中是否还有元素,如果有元素,需将入队栈的剩余元素先放入出队栈,然后将需要出队的元素放入出队栈,后面的操作和第二次的操作一样,以此类推。

实现代码如下:

//栈模拟队列
class MyQueue{
	private Stack in=new Stack();
	private Stack out=new Stack();
	//入队
	public void offer(E e) {
		while(!out.isEmpty()) {
			in.push(out.pop());
		}
		in.push(e);
	}
	
	//出队
	public E poll() {
		while(!in.isEmpty()) {
			out.push(in.pop());
		}
		return out.pop();
	}
	//判断队列是否为空
	public boolean isEmpty() {
		return in.size()==0&&out.size()==0;
	}
}

测试类如下:

public class Stack05 {
	public static void main(String[] args) {
		MyQueue queue=new MyQueue();
		queue.offer("A1");
		queue.offer("A2");
		queue.offer("A3");
		queue.offer("A4");
		System.out.println(queue.poll()+"出队");
		queue.offer("A5");   //入队新元素
		System.out.println(queue.poll()+"出队");
		//遍历
		while(!queue.isEmpty()) {
			System.out.println(queue.poll());
			}
	    }
	}

运行结果如下:

A1出队
A2出队
A3
A4
A5

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号