如何仅用栈结构实现队列结构

一、题目

如何仅用栈结构实现队列结构?

二、解题思路

栈:先进后出。

队列:先进先出。

定义两个栈:push 和 pop。

进队列:

  1. 只要出现新的数据,就压入 push 栈中。

出队列:

  1. 如果 push 栈和 pop 栈都为空,报错。
  2. 如果 pop 栈为空并且 push 栈中有数据,就将 push 中的所有数据都倒入 pop 栈中,然后弹出 pop 栈的栈顶并作为返回值返回。
  3. 如果 pop 栈不为空,弹出 pop 栈的栈顶并作为返回值返回。

返回队首:

  1. 返回 pop 栈的栈顶值(不弹出),其余与出队列操作相同。

三、代码实现(Java)

import java.util.Stack;

	public class StackToQueue {
		private Stack<Integer> stackPush;
		private Stack<Integer> stackPop;

		// 初始化队列
		public StackToQueue() {
			stackPush = new Stack<>();
			stackPop = new Stack<>();
		}

		// 入队
		public void EnQueue(int obj) {
			stackPush.push(obj);
		}

		// 出队
		public int DeQueue() {
			if (stackPush.empty() && stackPop.empty())
				throw new Error("The Queue is empty!");
			if (!stackPop.empty())
				return stackPop.pop();
			while (!stackPush.empty()) {
				stackPop.push(stackPush.pop());
			}
			return stackPop.pop();
		}

		// 查看队首
		public int peek() {
			if (stackPush.empty() && stackPop.empty())
				throw new Error("The Queue is empty!");
			if (!stackPop.empty())
				return stackPop.peek();
			while (!stackPush.empty()) {
				stackPop.push(stackPush.pop());
			}
			return stackPop.peek();
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值