题目:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 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: 两个栈实现一个队列相关推荐

  1. 剑指offer-用两个栈实现一个队列

    注意使用一个栈存储从头到尾的数据,然后利用该栈输出数据,同时使用另外一个栈存储从尾到头的数据. void push(int node) {stack1.push(node);}int pop() {i ...

  2. 剑指offer两个栈来实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 一个水题,不过有一个坑:我们假设stack1是输入用的,stack2是输出用的,必须是stack2 ...

  3. 【剑指offer】用两个栈实现一个队列

    题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...

  4. 剑指offer五:两个栈实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...

  5. 剑指offer 09. 用两个栈实现一个队列 (JavaScript)

    用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...

  6. 剑指Offer09-用两个栈实现队列

    问题描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,dele ...

  7. 两个栈实现一个队列,两个队列实现一个栈

    题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...

  8. java实现-两个栈实现一个队列和两个队列实现一个栈

    1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...

  9. 算法图解:如何用两个栈实现一个队列?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...

  10. java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?

    本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...

最新文章

  1. Github火爆的项目,用聪明的方式学习Vim!
  2. CCNA-第一篇-基础入门概念
  3. vector 修改 java_java对vector动态数组中的对象排序,以下代码有何问题,如何修改?...
  4. C#框架提供的几种数据结构对单值查找的效率比较
  5. 项目中AOP的使用-读写分离
  6. mysql只显示前几行_常见数据库SELECT结果只显示前几条记录方法汇总
  7. 遗传算法初学-旅行商问题
  8. php基本语法(简略篇)
  9. 动易访问mysql_服务器如何设置动易系统数据库路径的方法
  10. 办公室计算机打印机共享,办公室共享连接打印机全攻略,办公人必会操作技能...
  11. K650C I7 D4 黑苹果折腾记录
  12. Docker镜像安装宋体
  13. 最全面的SpringMVC教程(二)——SpringMVC核心技术篇
  14. 【Autoware】之ndt_mapping理论公式及代码对比
  15. 内网监控群晖918+(docker telegraf influxdb grafana)
  16. Matlab龚珀兹曲线模型预测,第三章 趋势曲线模型预测法.ppt
  17. C语言中 sinx cosx 的用法
  18. 数据处理案例一之求同存异
  19. html图片定位坐标原点,利用CSS定位背景图片的常用方法总结
  20. MySQL查询优化小结

热门文章

  1. [Matlab科学计算] 有限元法求二阶常微分方程
  2. tp5时间戳转换日期格式
  3. adb命令刷机vivox20_刷机常用adb命令及刷recovery脚本
  4. Java---设计【高校教师信息管理系统】
  5. 原生js实现音乐播放器功能,可以实时显示歌词并且高亮当前句
  6. 量子计算机底层逻辑,高通AI研究院提出通过量子场论,可将深度神经网络映射到量子计算机...
  7. Illustrator CC从入门到精通 精装版-李发展-专题视频课程
  8. oppo preloader驱动_手机企业冲向IoT新赛道,HOMA格局下OPPO有何不同?
  9. SSIM PSNR db
  10. 哈夫曼树与哈夫曼编码