| 用一个数组实现三个栈

三合一。描述如何只用一个数组来实现三个栈。你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。构造函数会传入一个stackSize参数,代表每个栈的大小。示例1:输入:
["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"]
[[1], [0, 1], [0, 2], [0], [0], [0], [0]]输出:
[null, null, null, 1, -1, -1, true]
说明:当栈为空时`pop, peek`返回-1,当栈满时`push`不压入元素。
示例2:输入:
["TripleInOne", "push", "push", "push", "pop", "pop", "pop", "peek"]
[[2], [0, 1], [0, 2], [0, 3], [0], [0], [0], [0]]输出:
[null, null, null, null, 2, 1, -1, -1]

| 题解

class TripleInOne:def __init__(self, stackSize: int):     # stackSize是栈的大小self.stack = [0 for i in range(stackSize * 3)]  # 初始化三倍stackSize的列表存放3个栈self.ptr1 = 0   # 第一个栈的指针,起始位置是列表的0位置self.ptr2 = 0 + stackSize    # 第二个栈的指针,起始位置是列表的stackSize位置self.ptr3 = 0 + 2 * stackSize  # 第三个栈的指针,起始位置是列表的2*stackSize位置self.stackSize = stackSize  # 每一个栈的大小def push(self, stackNum: int, value: int) -> None:if stackNum == 0 and 0 <= self.ptr1 < self.stackSize:   # 往第一个栈加入元素self.stack[self.ptr1] = value  self.ptr1 += 1elif stackNum == 1 and self.stackSize <= self.ptr2 < 2 * self.stackSize:  # 往第二个栈加入元素self.stack[self.ptr2] = valueself.ptr2 += 1elif stackNum == 2 and 2 * self.stackSize <= self.ptr3 < 3 * self.stackSize:  # 往第三个栈加入元素self.stack[self.ptr3] = valueself.ptr3 += 1def pop(self, stackNum: int) -> int:  # pop() 返回栈顶元素,并在进程中删除它if stackNum == 0 and 0 < self.ptr1 <= self.stackSize: # 从第一个栈删除一个元素self.ptr1 -= 1return self.stack[self.ptr1]elif stackNum == 1 and self.stackSize < self.ptr2 <= 2 * self.stackSize: # 从第二个栈删除一个元素self.ptr2 -= 1return self.stack[self.ptr2]elif stackNum == 2 and 2 * self.stackSize < self.ptr3 <= 3 * self.stackSize:  # 从第三个栈删除一个元素self.ptr3 -= 1return self.stack[self.ptr3]return -1def peek(self, stackNum: int) -> int:  # peek() 返回栈顶元素,但不在堆栈中删除它if stackNum == 0 and 0 < self.ptr1 <= self.stackSize:  # 返回第一个栈的栈顶元素return self.stack[self.ptr1-1]elif stackNum == 1 and self.stackSize < self.ptr2 <= 2 * self.stackSize: # 返回第二个栈的栈顶元素return self.stack[self.ptr2-1]elif stackNum == 2 and 2 * self.stackSize < self.ptr3 <= 3 * self.stackSize: # 返回第三个栈的栈顶元素return self.stack[self.ptr3-1]return -1def isEmpty(self, stackNum: int) -> bool: if stackNum == 0 and self.ptr1 == 0:return Trueelif stackNum == 1 and self.ptr2 == 0 + self.stackSize:return Trueelif stackNum == 2 and self.ptr3 == 0 + 2 * self.stackSize:return Truereturn False# Your TripleInOne object will be instantiated and called as such:
# obj = TripleInOne(stackSize)
# obj.push(stackNum,value)
# param_2 = obj.pop(stackNum)
# param_3 = obj.peek(stackNum)
# param_4 = obj.isEmpty(stackNum)

python 用一个数组实现三个栈相关推荐

  1. python声明一个数组_python 声明数组

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如何在python? 我无法在文档中找到对数组的任何引用... 我正在制作一个小 ...

  2. 一个数组实现两个栈(共享栈)

    题目:   一个数组实现两个栈. 方法1:   下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上.   如上图所示的数组:若 ...

  3. python 把一个数组arr按照指定的数组大小size分割成若干个数组块

    python 把一个数组arr按照指定的数组大小size分割成若干个数组块 这里的运行结果,我是以分割2个数组块的. def arr_size(arr,size):s=[]for i in range ...

  4. Python:把一个数组按指定数组大小size分割为多个数组

    python 把一个数组arr按照指定的数组大小size分割成若干个数组块 这里的运行结果,我是以分割2个数组块的. def arr_size(arr,size):s=[]for i in range ...

  5. python求数组平均值_用python求一个数组的和与平均值的实现方法

    用python求一个数组的和与平均值的实现方法 如下所示: # coding = GBK a =[1,2,3,4,5] sum=0 b = len(a) print("这个数组的长度为:&q ...

  6. python输入一个数组输出24进制式的时间_【翻译】《利用Python进行数据分析·第2版》第4章(下)NumPy基础:数组和矢量计算...

    前文传送门: 4.3 利用数组进行数据处理 NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环).用数组表达式代替循环的做法,通常被称为矢量化.一般来说,矢量化数组运算 ...

  7. 【从0开始入门python】一个半月的三万字学习笔记汇总!!!

    python学习 DAY01-DAY04基础操作 DAY05-DAY09基本模块 常用pip源 (1)阿里云 http://mirrors.aliyun.com/pypi/simple/ (2)豆瓣 ...

  8. python输入一个数组输出24进制式的时间_4.4 用于数组的文件输入输出 线性代数...

    Numpy能够读写磁盘上的文本数据或二进制数据.这一小节只讨论Numpy的内置二进制格式,因为更多的用户会使用pandas或其它工具加载文本或表格数据(见第6章). np.save和np.load是读 ...

  9. python生成一个数组_在for循环中创建多个数组(Python)

    我目前遇到Numpy阵列的问题.如果在其他地方已经提出这个问题,我道歉,但我觉得我到处都是. 我最初的问题是我试图创建一个数组并用多组不同大小的站数据填充它.由于我无法使用大小不同的数据集填充相同的数 ...

最新文章

  1. HDU 1517 A Multiplication Game
  2. pytorch autograd整理
  3. 服务器中anaconda如何修改环境变量,手动添加anaconda3到环境变量中的方法
  4. Android 数据库加密
  5. 32. Magento log()方法
  6. c语言答辩ppt案例,c语言ppt例子课题了答辩ppt成品中南民族大学.ppt
  7. 几何实体图形保存成stl格式的ascII和二进制文。用Vc++语言读入文件,给三角网格坐标值乘以2,并保存到另一stl文件。输出完成工作所用的执行时间
  8. 点击复制按钮进行复制文本
  9. eclipse配置折叠/展开代码设置
  10. 阿里云首席安全科学家吴翰清的思考:弹性安全网络,构建下一代安全的互联网...
  11. Java:javax.mail通过163服务器发送邮件
  12. 2021年展望Android原生开发的现状,真香!
  13. 华为最新5G手机供应商名单来了。。。
  14. Python第三方库turtle的应用
  15. Ubuntu18.04/16.04调整屏幕分辨率至1920*1080
  16. Identity, Positive, 和Similarity的区别
  17. 图像处理基础——空间域处理之灰度变换
  18. 王爽老师汇编语言第四版第十章CALL和RET指令——小白笔记
  19. 【字源大挪移—读书笔记】 第一部分:字首
  20. 蓝桥杯单片机——中断系统(7)

热门文章

  1. 21. Leetcode 203. 移除链表元素 (链表-基础操作类-删除链表的节点)
  2. 设计RandomPool结构
  3. 文巾解题 10. 正则表达式匹配
  4. tableau实战系列(六)-小面积图表如何完整显示标签
  5. tableau必知必会之如何将 Tableau Server 从 Windows 迁移到 Linux 的方法
  6. LeetCode题组:第9题-回文数
  7. HJ29 字符串加解密
  8. QListWidget读取本地文件夹中文件并显示名字,双击读取xml数据
  9. Python编程基础:第五节 用户输入User Input
  10. 【LeetCode从零单排】No.169 Majority Element(hashmap用法)