Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python实现堆栈

Python实现堆栈

作者头像
一墨编程学习
发布于 2018-11-21 10:02:35
发布于 2018-11-21 10:02:35
92000
代码可运行
举报
运行总次数:0
代码可运行

堆栈是一个后进先出的数据结构,其工作方式就像一堆汽车排队进去一个死胡同里面,最先进去的一定是最后出来。

我们可以设置一个类,用列表来存放栈中元素的信息,利用列表的append()pop()方法可以实现栈的出栈pop和入栈push的操作,list.append(obj)意思是向列表添加一个对象obj,list.pop(index=-1)意思是删除指定位置的对象,默认是最后一个对象,也就是说list.pop(),是删除列表中下标最大的元素。可先将Stack类写入文件stack.py,在其它程序文件中使用from stack import Stack,然后就可以使用堆栈了。

stack.py的程序:

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Stack():  
    def __init__(self,size):  
        self.size=size
        self.stack=[] 
        self.top=-1
    def push(self,ele):  #入栈之前检查栈是否已满  
        if self.isfull():  
            raise exception("out of range")
        else:  
            self.stack.append(ele) 
            self.top=self.top+1
    def pop(self):             # 出栈之前检查栈是否为空  
        if self.isempty():  
            raise exception("stack is empty") 
        else:  
            self.top=self.top-1 
            return self.stack.pop()
       
    def isfull(self):  
        return self.top+1==self.size
    def isempty(self):  
        return self.top==-1

再写一个程序文件,stacktest.py 使用栈,内容如下:

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
from stack import Stack
s=Stack(20)
for i in range(3):  
    s.push(i)
s.pop()
print s.isempty()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[快学Python3]数据结构-堆栈
概述 什么是堆栈,简单而言:后进先出。 算法原理 进栈(PUSH)算法 若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作2) 置TOP=TOP+1(栈指针加1,指向进栈地址) S(TOP)=X,结束(X为新进栈的元素) 退栈(POP)算法 若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作2) X=S(TOP),(退栈后的元素赋给X) TOP=TOP-1,结束(栈指针减1,指向栈顶) 算法实现 # -*- coding:utf-8
苦叶子
2018/04/09
1.1K0
数据结构小记【Python/C++版】——栈篇
元素在栈中的移动顺序依照后进先出(LIFO)原则,较早入栈的元素,更接近栈底,更晚被弹出。
Coder-ZZ
2023/02/23
2730
数据结构小记【Python/C++版】——栈篇
Python用list实现堆栈和队列
利用数组 Q[1..n] 来实现含有 n-1 个元素队列(保留一位元素用来判断队列空或满)。该列有一个属性 Q.head 指向队头元素,属性 Q.tail 指向下一个新元素将要插入的位置,列中的元素存放在位置 Q.head, Q.head+1, …, Q.tail-1 上。
马修
2021/01/21
9210
Python 之“栈为何物”
栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行。 栈是一种特殊的列表,栈内的元素只能通过一端进行访问,这一端为栈顶。
Wu_Candy
2022/07/04
1800
算法:栈
简单来说,栈是一种 「后进先出(Last In First Out)」 的线性表,简称为 「LIFO 结构」。可以从两个方面来解释一下栈的定义:
用户3578099
2022/03/15
6790
算法:栈
聊一聊Python数据结构--栈
刚开始学写代码的时候,我们都是想到什么就写什么,反正一个代码文件总归也不会太长。但等进一步深入编程之后,就不能没有章法地随便写了,也要讲究一些“套路”。“数据结构和算法”就是编程的重要套路之一。有了这些套路,我们可以更容易实现功能、让bug更少、代码运行效率更高、程序更容易维护和扩展。
Crossin先生
2019/11/10
5930
列车调度 堆栈 python
大家好,又见面了,我是你们的朋友全栈君。 列车调度 描述 题目分解 1.全排列 2.判断合法输出序列 3.S容量小于A的情况,输出合法出栈序列 4.输出操作 5.输出操作 完整可运行代码 注 描述 描述 某列车调度站的铁道联接结构如Figure 1所示 其中,A为入口,B为出口,S为中转盲端。所有铁道均为单轨单向式:列车行驶的方向只能是从A到S,再从S到B;另外,不允许超车。因为车厢可在S中驻留,所以它们从B端驶出的次序,可能与从A端驶入的次序不同。不过S的容量有限,同时驻留的车厢不得超过m节。
全栈程序员站长
2022/09/17
4440
列车调度 堆栈 python
Python之设计一个pop、push、top并能在常数时间内检测最小元素的栈
设计一个pop、push、top、getmin操作,并能在常数时间内检测最小元素的栈 class Minstack(object): def init(self): self.stack = [] self.Minstack = [] def isEmpty(self): return len(self.stack)<1 def push(self,item): self.stack.append(item) if self.Minstack == [] or item self.Minstack.append(item) def top(self): if not self.isEmpty(): return self.stack[-1] def getMin(self): if not self.isEmpty(): return self.Minstack[-1] def pop(self): if not self.isEmpty(): if self.Minstack[-1]==self.top(): self.Minstack.pop() self.stack.pop() stack = Minstack() stack.push(-2) stack.push(0) stack.push(-3) stack.push(5) stack.push(-4) print(stack.getMin()) stack.pop() print(stack.top()) print(stack.getMin())
李玺
2021/11/22
3580
【leetcode 简单】 第六十三题
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。 你可以假设所有操作都是有效的(例如, 对一个
py3study
2020/01/19
2450
Python数据结构与算法
pop操作默认为删除表尾元素并将其返回O(1),指定非尾端位置为O(n)时间复杂度。
Spaceack
2020/11/04
3640
图解算法系列(五): 堆栈
下压栈(或简称栈)是一种基于后进后出的(LIFO)策咯的集合类型. 其中添加移除新项总发生在同一端。这一端通常称为“顶部”。与顶部对应的端称为“底部”。栈的例子很常见,想象桌上有一堆书., 只有顶部的那本书封面可见,要看到其他书的封面,只有先移除他们上面的书.
公众号---人生代码
2019/07/24
6660
LeetCode 225:用队列实现栈 Implement Stack using Queues
Implement the following operations of a stack using queues.
爱写bug
2019/08/15
5980
Q155 Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Get the top element. getMin() -- Retrieve the minimum element
echobingo
2018/04/25
4620
【算法题解】 Day17 栈与队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
sidiot
2023/08/31
1520
【算法题解】 Day17 栈与队列
使用Java和Python解题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
bboy枫亭
2020/09/22
8920
对Python列表进行封装和二次开发实现自定义栈结构
设计自定义栈类,模拟入栈、出栈、判断栈是否为空、是否已满以及改变栈大小等操作。 class Stack: #构造方法 def __init__(self, maxlen = 10): self._content = [] self._size = maxlen self._current = 0 #析构方法,释放列表控件 def __del__(self): del self._content #清空栈中的元素 def clear(self):
Python小屋屋主
2018/04/16
7960
pickle源码大宝典-ForMe
在美团初赛一个pickle反序列化中R i o c的过滤直接把我搞头大了,去翻了一便源码学了一下才把题目解出, 比赛结束之后我就直接熬了一夜直接把全部操作的源码看了一遍并且后面部分操作我自己测试了一遍, 然后将每个操作的实现过程以及操作demo都写了注释,在这里挂我作为笔记本的博客分享一下吧(主要看操作注释部分就行,后面的内容就是我把整个pickle.py文件按照作用和行号分段列了一下)
h0cksr
2023/05/17
9210
算法刷题笔记03:Stack、Queue
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
Hsinyan
2022/08/30
2840
算法刷题笔记03:Stack、Queue
超级简单的虚拟机(Python 实现)
我们这次实现的简单虚拟机,和计算机的 cpu 有点类似。无非就是取指令,执行指令之类的操作。
用户2870857
2019/12/23
1.3K0
超级简单的虚拟机(Python 实现)
10-28LeetCode刷题(四)
用户11029137
2024/10/31
820
10-28LeetCode刷题(四)
相关推荐
[快学Python3]数据结构-堆栈
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验