用栈来是实现队列

要用栈模拟队列,首先要清楚栈和队列有什么不同的特点

相同点:栈和队列都是保存一组元素的容器

队列(Queue):线性表结构,遵循先进先出,后进出的(FIFO:First in last out)的基本原则;它只允许在队首进行出队(删除)的操作,在队尾进行入队(插入)的操作;

栈(Stack): 栈采用的是后进先出(LIFO:Last in  fist out)的基本原则,与队列的操作相反,栈只允许在栈顶进行插入和删出操作;

对栈和队列之间的特点有了大概了解,就能开始我们的的正式实现了首先在编写前要明确要实现队列的三种基本方法:

1.入队:offer()  2.出对:poll() 3. 遍历

首先由于栈的特点和队列截然相反。所以我可以定义两个不同的栈:分别是in 和 out,一个入队栈一个出队栈;当我们添加元素时,元素会先进入到入队栈里,当我们出队时,我们将入队栈的元素转移到出队栈,在将栈顶的元素出队,到继续添加元素时.再将出队栈的元素转移到入队栈,然后在栈顶进行操作.

比如我们要将"A"和"B"入队,首先会进入入队栈中

但由于栈后进后出的特点,所以直接出队栈中元素的顺序则变为了“B” “A”,所以我们要将入队栈的元素转到出队栈中,这时出对栈中元素的顺序就变成了"A" "B",此时出对就与入队时的顺序一致了

 遍历,我们可以直接使用出队的方法,当出对栈和入队栈为空的时候则停止出队.

具体代码如下:

import java.util.Stack;

public class Damo05 {
	public static void main(String[] args) {
		myqueue<String> queue = new myqueue<String>();
		queue.offer("A");
		queue.offer("B");
		queue.offer("C");
		while (!queue.isEmpty()) {
			System.out.println(queue.poll());
		}
	}
}
//栈实现队列
class myqueue<E>{
	private Stack<E> in = new Stack<E>();//入队栈
	private Stack<E> out = new Stack<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(); 
	}
	public boolean isEmpty () {
		return in.size()==0 && out.size()==0;
	}
}

 结果为:

A
B
C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值