下压栈(或简称栈)是一种基于后进后出的(LIFO)策咯的集合类型.

其中添加移除新项总发生在同一端。这一端通常称为“顶部”。与顶部对应的端称为“底部”。栈的例子很常见,想象桌上有一堆书., 只有顶部的那本书封面可见,要看到其他书的封面,只有先移除他们上面的书.

image

下图反应了栈中数据加入和移走的顺序:

image

栈的抽象数据类型

一个栈一般会实现以下方法:

Stack() 构造方法,创建一个空栈,无参数,返回值是空栈

push(value) 向栈顶压入一个新数据项,需要一个数据项参数,无返回值

pop() 抛出栈顶数据项,无参数,返回被抛出的数据项,栈本身发生变化

is_empty() 测试栈是否空栈。不需要参数,返回布尔值

size() 返回栈内数据项的数目,不需要参数,返回值是整数

peak() 返回栈顶数据项,但不删除。不需要参数,栈不变

栈的python实现(一)

利用.append与.pop方法,我们可以把python内置的列表当作栈来使用(栈是一种特殊的列表),这是一种较为方便的实现方式

class Stack:

def __init__(self):

self.values = []

def push(self, value):

self.values.append(value)

def pop(self):

return self.values.pop()

def is_empty(self):

return self.size() == 0

def size(self):

return len(self.values)

def peak(self):

return self.values[self.size()-1]

栈的python实现(二)

或者自由定义类似列表的Stack类

class Node: ➊

def __init__(self, value):

self.value = value

self.next = None

class Stack: ➋

def __init__(self):

self.top = None

def push(self, value):

node = Node(value)

node.next = self.top

self.top = node

def pop(self):

node = self.top

if node is None:

raise Exception('This is an empty stack')

self.top = node.next

return node.value

def peek(self):

node = self.top

if node is None:

raise Exception('This is an empty stack')

return node.value

def is_empty(self):

return not self.top

def size(self):

node = self.top

count = 0

if node is None:

raise Exception('This is an empty stack')

while node is not None:

count += 1

node = node.next

return count

if __name__ == '__main__':

stack = Stack()

stack.push(2)

stack.push(3)

# print(stack.pop())

# print(stack.top.value)

print(stack.peek())

print(stack.is_empty())

print(stack.size())

➊ 定义一个结点

image

➋ 定义一个栈

image

top指向栈顶的Node,next之想下一个Node,若没有下一个Node,则指向一个None

栈的应用

十进制转二进制 是一个应用堆栈的典型案例。十进制转二进制 采用“除2取余,逆序排列”的方法,如图所示:

image

借助Stack类,可以很方便地实现上述转换算法:

def divideBy2(decNumber):

remstack = Stack()

while decNumber > 0:

rem = decNumber % 2

# 将余数逐个加入

remstack.push(rem)

decNumber = decNumber // 2

binString = ""

while not remstack.is_empty():

binString = binString + str(remstack.pop())

return binString

if __name__ == '__main__':

print(divideBy2(42))

运行结果:

$ python dec2bin.py

101010

相关链接

python有栈吗_Python栈实现相关推荐

  1. python 栈实现_Python 栈(后进先出)

    Python 栈,栈是含有一组对象的容器,支持快速后进先出(LIFO)的插入和删除操作.与列表或数组不同,栈通常不允许随机访问所包含的对象.插入和删除操作通常称为入栈(push)和出栈(pop). 现 ...

  2. python 栈实现_Python实现栈

    原博文 2017-07-17 17:28 − 栈的操作 Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek() 返回栈顶元素 i ...

  3. python释放变量内存_Python尚学堂高淇|1113引用的本质栈内存,堆内存,内存的示意图,标识符,变量的声明初始化,垃圾回收机制...

    011-引用的本质-栈内存和堆内存-内存的示意图在Python当中,变量也成为:对象的引用,因为,变量的存储就是对象的地址变量通过地址引用了对象变量位于堆内存(压栈,出栈等细节,后续再介绍)对象位于: ...

  4. python堆栈与队列_python:用deque实现栈,队列和保存最后的N个元素

    栈其实就是一个后进先出的队列,而一般意义的队列指的是FIFO队列(先进先出). 标准库的collections.deque是个双端队列,可以轻松实现这两个数据结构. ps:虽然直接用python的li ...

  5. python中的栈结构_Python可以实现栈的结构吗

    栈(stack)又名堆栈,它是一种运算受限的线性表.在Python中可使用列表进行实现. 什么是栈? 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这 ...

  6. python 栈和队列_python 栈和队列的基本实现

    python中的列表结构可以用来实现栈和队列. [栈]: 栈是一种数据结构,具有先入后出的特点,并且栈的所有操作只能在某一端进行,能进行操作的一端的第一个元素称为栈顶,另一端的第一个元素称为栈底 栈的 ...

  7. python定义栈_Python栈实现

    栈 下压栈(或简称栈)是一种基于后进后出的(LIFO)策咯的集合类型. 其中添加移除新项总发生在同一端.这一端通常称为"顶部".与顶部对应的端称为"底部".栈的 ...

  8. stack在python中是什么意思_python栈是什么意思

    python栈是什么意思? 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构. 由于栈具有后入先出的 ...

  9. python中栈是什么意思_python栈是什么意思,

    详细内容 python栈是什么意思? 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构. 由于栈具有 ...

最新文章

  1. 素数定理π(n)~n/lnn弱化版证明
  2. Redis持久化实践及数据恢复
  3. 我的2020电视机选购
  4. java中List、Map、Set、Collection、Stack、Queue等的使用
  5. mysql 分表_MySQL如何分库分表
  6. 后端同同不肯给我算好的时间差给我,只好自己写了:
  7. python中dict对象和字符串string对象互相转换
  8. 历史上的第一位程序员(一)
  9. C++ 遍历 iterator has no member named
  10. svn服务器调整显示图标修改,svn图标不显示可以通过调整Tortoise图标名称的字母顺序来解决...
  11. vue3 + crypto-js加密解密(普通版本/TS版本)
  12. 如何让品牌进入元宇宙
  13. 跪求大神定制类似苹果助手管理软件
  14. 计算机农业应用答案,东北农业大学计算机应用技术网上作业及答案.doc
  15. 带你了解一下蛋白质化学修饰技术!(PEG-β-1,3-GAβ葡聚糖酶/ RNaseA/SAK葡激酶)
  16. 云队友丨王兴:九败一胜,百炼成钢
  17. 零基础学习python人工智能考试_零基础自学Python人工智能,看这些资料就够了
  18. 【游戏开发引擎】实验4:Gauntlet Runner 3D 赛跑游戏
  19. IEEE1394接口
  20. STM32F1与STM32CubeIDE编程实例-热敏传感器驱动

热门文章

  1. python解析格式文件
  2. gitter 卸载_最佳Gitter渠道:PHP
  3. dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存
  4. Node版本管理nvm的用法
  5. 羞羞的Python模块包
  6. (实战项目一)手机App抓包爬虫
  7. Django环境安装和创建工程
  8. 高能预警!Apache Flink Meetup · 上海站返场啦
  9. .NET下数据访问层+webform前台 技术大比拼
  10. 数学与算法《TF-IDF》