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

栈模拟队列

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

栈模拟队列

首先清楚栈和队列各自的特点

1.

队列(queue):①集合 ②遵循先进先出(FIFO:first in first out ),后进后出的原则。 ③只能队头出队,队尾入队

栈(stack):①类②是一种后进先出(LIFO:last in first out)的数据结构。③只能不断往栈(stack)里压入(push)元素,最后进去的最早弹出(pop)

2.思路

栈要实现队列的功能,就要实现元素先进先出的功能,而栈为后进先出,所以需要借助两个栈完成:"入队栈(in)"让最后进去的元素在栈顶先弹出之后在"出队栈(out)"中被最先压入栈,这样最先进去的元素就会在"出队栈"的栈顶,从而实现了先进去的元素也最先弹出的功能

3.实现

先定义MyQueue类,用这两个栈来模拟queue的offer()方法入队和poll()方法出队。

注意:在实现offer()方法入队时要保证出队栈为空,poll()方法出队时要保证入队栈为空。

代码实现:

package com.apesource.demo07;

import java.util.Stack;

public class Test01 {
	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");
		
		
	}

}
//“栈”模拟“队列”
//指的泛型确保集合类未知的集合类型(eg:上面的String)
class MyQueue{
	
	private Stack in = new Stack();//入队栈
	private Stack out = new Stack();//出队栈
	
	
	//入队
	//方法里还不能确定类型,所以参数是E e
	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();
	}
}

 

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

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

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