190422打卡:队列实现栈

问题描述:
如何仅用队列实现栈结构?
在这里插入图片描述
思路:用两个队列实现栈,当入栈时,元素只进入data队列,当出栈时,将data队列的最后一个元素保留,然后将剩下的元素倒入到help队列中,然后将data队列中唯一一个元素出队,这样就达到了出栈的效果,然后将data栈和help栈交换,这样就可以保证下一次如果用户要求再次出栈就可以重复上述过程

package code001_code010;

import java.util.LinkedList;
import java.util.Queue;

public class Code_003_QueueToStack {
	
	public static class QueueToStack {
		private Queue<Integer> data;
		private Queue<Integer> help;
		
		public QueueToStack() {
			data = new LinkedList<>();
			help = new LinkedList<>();
		}
		
		public void push(int obj) {
			data.add(obj);
		}
		
		public int pop() {
			if (data.isEmpty()) {
				throw new RuntimeException("Pop failed, Stack is empty");
			} 
			while(data.size() > 1) {
				help.add(data.poll());					
			}
			int res = data.poll();
			swap();
			return res;
		}
		
		public int peek() {
			if (data.isEmpty()) {
				throw new RuntimeException("Pop failed, Stack is empty");
			}
			while(data.size() > 1) {
				help.add(data.poll());					
			}
			int res = data.peek();
			help.add(res);
			swap();
			return res;
		}
		
		public void swap() {
			Queue<Integer> temp = data;
			data = help;
			help = temp;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值