博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础算法面试题---如何用栈实现队列
阅读量:2508 次
发布时间:2019-05-11

本文共 1394 字,大约阅读时间需要 4 分钟。

题目描述

如何用栈结构实现队列的push和pop操作。

队列和栈的概念

队列:先进先出,从头进,从尾出。

栈:先进后出,从头进,从头出。

解题思路

一个栈是无法完成队列的,本题我们可以通过两个栈来实现,一个栈专门用来添加元素,另一个栈专门用来取出元素。

假设分别设添加元素的栈为:A,取元素的栈为:B。

每次数据都push到A栈中,当需要pop时,如果B栈为空,则一次性把用来A栈数据全部弹出并添加到B栈,否则直接从B栈弹出,这样即实现了队列的操作。

图解分析

1、假设现在要添加了3个元素,分别为:1,2,3

在这里插入图片描述
2、现在需要弹出一个元素,首先判断B栈是否为空,此时B栈是为空的,那么则一次性把A栈数据全部弹出到B栈。

在这里插入图片描述

3、然后从B栈弹出一个元素,就是1(1是先进的,现在也先出了,符合队列结构)。

在这里插入图片描述

4、此时如果又需要添加一个元素4,则继续向A栈添加。

在这里插入图片描述

5、当再又元素要弹出时,因为B栈不为空,所以直接从B栈弹出。

在这里插入图片描述

代码实现

import java.util.Stack;public class Code_StackImplQueue
{
Stack
stack_a = new Stack<>(); Stack
stack_b = new Stack<>(); public static void main(String[] args) {
Code_StackImplQueue c = new Code_StackImplQueue(); c.push(1); c.push(2); c.push(3); System.out.println("push: 1,2,3"); System.out.println("pop:" + c.pop() + "," + c.pop() + "," + c.pop()); } /** * 每次push元素时都push到stack_a栈中 * * @param e */ public void push(E e) {
stack_a.push(e); } public E pop() {
/** * 如果stack_b为空,则需要把stack_a的元素全部弹出并push到stack_b中 */ if (stack_b.empty()) {
while (!stack_a.empty()) {
stack_b.push(stack_a.pop()); } } //如果stack_b还为空,则表示stack_a也为空,则直接返回null if (stack_b.empty()) {
return null; } //从stack_b取出元素 return stack_b.pop(); }}

在这里插入图片描述

转载地址:http://yqlrb.baihongyu.com/

你可能感兴趣的文章
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>
PCB布线技巧
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
PCB反推理念
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>
php 解决json_encode中文UNICODE转码问题
查看>>
LNMP 安装 thinkcmf提示404not found
查看>>
PHP empty、isset、innull的区别
查看>>
apache+nginx 实现动静分离
查看>>
通过Navicat远程连接MySQL配置
查看>>
phpstorm开发工具的设置用法
查看>>
Linux 系统挂载数据盘
查看>>
Git基础(三)--常见错误及解决方案
查看>>
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>