剑指offer: 两个栈实现一个队列
题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )
思路:
根据栈的后进先出原则,所有元素正序入栈后出栈顺序为反序,然后反序进入另一个栈后出栈顺序是正序
import numpy as npclass Stack:def __init__(self):self.s = np.array([], dtype=int)self.length = 0def append(self, e):self.s = np.append(self.s, e)self.length += 1def delete(self):e = self.s[self.length - 1]self.s = np.delete(self.s, self.length - 1)self.length -= 1return edef is_empty(self):return self.length == 0class CQueue:def __init__(self):self.s1 = Stack() # 入队时元素进入栈s1self.s2 = Stack() # 出队时元素从栈s2出def appendTail(self, value: int) -> None:self.s1.append(value)def deleteHead(self) -> int:"""如果s2为空,那么将已有s1元素都转移到s2中,由于栈 后进先出 的原则,s1出栈的顺序和入栈的顺序相反,同样因为后进先出的原则,数据反序进入s2,那么出栈的时候就是正序的"""if self.s2.is_empty():while not self.s1.is_empty():self.s2.append(self.s1.delete())if self.s2.is_empty():return -1e = self.s2.delete()return int(e)
剑指offer: 两个栈实现一个队列相关推荐
- 剑指offer-用两个栈实现一个队列
注意使用一个栈存储从头到尾的数据,然后利用该栈输出数据,同时使用另外一个栈存储从尾到头的数据. void push(int node) {stack1.push(node);}int pop() {i ...
- 剑指offer两个栈来实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 一个水题,不过有一个坑:我们假设stack1是输入用的,stack2是输出用的,必须是stack2 ...
- 【剑指offer】用两个栈实现一个队列
题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...
- 剑指offer五:两个栈实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...
- 剑指offer 09. 用两个栈实现一个队列 (JavaScript)
用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...
- 剑指Offer09-用两个栈实现队列
问题描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,dele ...
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- java实现-两个栈实现一个队列和两个队列实现一个栈
1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...
- 算法图解:如何用两个栈实现一个队列?
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...
- java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?
本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...
最新文章
- Github火爆的项目,用聪明的方式学习Vim!
- CCNA-第一篇-基础入门概念
- vector 修改 java_java对vector动态数组中的对象排序,以下代码有何问题,如何修改?...
- C#框架提供的几种数据结构对单值查找的效率比较
- 项目中AOP的使用-读写分离
- mysql只显示前几行_常见数据库SELECT结果只显示前几条记录方法汇总
- 遗传算法初学-旅行商问题
- php基本语法(简略篇)
- 动易访问mysql_服务器如何设置动易系统数据库路径的方法
- 办公室计算机打印机共享,办公室共享连接打印机全攻略,办公人必会操作技能...
- K650C I7 D4 黑苹果折腾记录
- Docker镜像安装宋体
- 最全面的SpringMVC教程(二)——SpringMVC核心技术篇
- 【Autoware】之ndt_mapping理论公式及代码对比
- 内网监控群晖918+(docker telegraf influxdb grafana)
- Matlab龚珀兹曲线模型预测,第三章 趋势曲线模型预测法.ppt
- C语言中 sinx cosx 的用法
- 数据处理案例一之求同存异
- html图片定位坐标原点,利用CSS定位背景图片的常用方法总结
- MySQL查询优化小结
热门文章
- [Matlab科学计算] 有限元法求二阶常微分方程
- tp5时间戳转换日期格式
- adb命令刷机vivox20_刷机常用adb命令及刷recovery脚本
- Java---设计【高校教师信息管理系统】
- 原生js实现音乐播放器功能,可以实时显示歌词并且高亮当前句
- 量子计算机底层逻辑,高通AI研究院提出通过量子场论,可将深度神经网络映射到量子计算机...
- Illustrator CC从入门到精通 精装版-李发展-专题视频课程
- oppo preloader驱动_手机企业冲向IoT新赛道,HOMA格局下OPPO有何不同?
- SSIM PSNR db
- 哈夫曼树与哈夫曼编码