python 栈和队列_python实现栈和队列
栈(Stack),也叫做堆栈, 是一种容器, 可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。
由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
栈可以用顺序表或者链表来实现,先以顺序表来实现:
classStackSequence():def __init__(self):
self.__list=[]
@propertydefis_empyt(self):return self.__list ==[]
@propertydefadd(self, value):pass@add.setterdefadd(self, value):
self.__list.append(value)
@propertydefpop(self):returnself.__list.pop()def __len__(self):return len(self.__list)
a = StackSequence()
a.add = 5
a.add = 4
a.add = 3
a.pop
>>> 3
a.pop
>>> 4
len(a)
>>> 1
在来看链表实现栈:
#首先实现链表
classNode:def __init__(self, value):
self.value=value
self.prev=NoneclassChain:def __init__(self):
self.last=None
@propertydefadd(self):pass@add.setterdefadd(self, value):
node=Node(value)
node.prev=self.last
self.last=node
@propertydefpop(self):ifself.last:
temp=self.last
self.last=temp.prevreturntemp.value
# 用链表实现栈classStackChain:def __init__(self):
self.__list =Chain()defadd(self, value):
self.__list.add =valuedefpop(self):return self.__list.pop
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。
队列既可以使用顺序表也可以使用链表来实现
classQueue:def __init__(self):
self.__list =[]defenqueue(self, value):"""往队列尾部添加一个元素"""self.__list.append(value)
@propertydefdequeue(self):"""往队列头部删除一个元素"""
return self.__list.pop(0)def __len__(self):"""返回队列大小"""
returnlen(self.__list)
@propertydefis_empty():"""判断队列是否为空"""
return self.__list ==[]
q=Queue()
q.enqueue(1)
q.enqueue(2)print(q.__dict__)print(q.dequeue)print(q.dequeue)
classQueue:"""双端队列"""
def __init__(self):
self.__list =[]defadd_front(self, value):"""往队列头部添加一个元素"""self.__list.insert(0, value)defadd_end(self, value):"""往队列尾部添加一个元素"""self.__list.append(value)
@propertydefremove_front(self):"""往队列头部删除一个元素"""
return self.__list.pop(0)
@propertydefremove_end(self):"""往队列尾部删除一个元素"""
return self.__list.pop()def __len__(self):"""返回队列大小"""
return len(self.__list)
@propertydefis_empty():"""判断队列是否为空"""
return self.__list ==[]
q=Queue()
q.add_front(6)
q.add_end(5)
q.add_end(4)
q.add_front(3)
q.remove_front
q.remove_endprint(q.__dict__)
我们可以用两个栈来实现一个队列, 也可以用两个队列来实现一个栈:
# 这里用两个队列来实现一个栈
classQueue:def __init__(self):
self._list=[]defadd(self, value):
self._list.insert(0, value)defpop(self):returnself._list.pop()classStack:def __init__(self):
self.input=Queue()
self.output=Queue()defadd(self, value):
self.input.add(value)defpop(self):whileself.input._list:
self.output.add(self.input.pop())return self.output.pop()
python 栈和队列_python实现栈和队列相关推荐
- python环形队列_Python 实现数据结构-循环队列的操作方法
今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...
- python 栈和队列_Python实现栈和队列的简单操作方法示例
本文实例讲述了Python实现栈和队列的简单操作方法.分享给大家供大家参考,具体如下: 先简单的了解一下数据结构里面的栈和堆: 栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: sta ...
- python个人网站开发_python 全栈开发,Day81(博客系统个人主页,文章详情页)
一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...
- python全栈开发优势_Python全栈开发多少钱?学Python价格贵吗?
Python全栈开发培训多少钱?学习Python是大家进入编程世界的理想之选,而且Python也是一门非常受欢迎的编程,可以从事的领域有很多. 从目前市场上的行情来说,一般情况下Python培训的费用 ...
- python全栈开发下载_python全栈开发神器 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...
将安卓手机打造成你的python全栈开发利器 超神利器- 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极.Q ...
- 用python画路飞代码_python 全栈开发,Day105(路飞其他数据库表结构,立即结算需求)...
考试第三部分:Django 16. 列列举你熟悉的Http协议头以及作用.(1分) Accept-Charset: 用于告诉浏览器,客户机采用的编码 Host: 客户机通过这个头告诉服务器,想访问的 ...
- python全栈工程师薪水_python全栈+爬虫+自动化+AI=python全能工程师-挑战年薪30W+
如果你想选择一种语言来入门编程,那么Python绝对是首选! Python非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解.编程简单直接,更适合初学编程者,让其专注于编程逻辑,而不是困 ...
- python全栈是什么_Python全栈数据工程师养成攻略 PDF 下载
相关截图: 图书简介: 本书首先介绍了数据工程和Python语法,随后讲解如何获取和存储数据,并实现简单的静态可视化.文本作为一种极其重要的数据类型,也单独列出一章行讨论.之后读者将学习到关于Web建 ...
- python全栈攻略_python全栈知识点总结
全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人.就是与这项技能有关的都会,都能够独立的完成. 全栈只是个概念,也分很多种类.真正的全栈工程师涵盖了web开发.DBA .爬虫 ...
最新文章
- leetcode 110. 平衡二叉树
- android 仿微信聊天气泡显示图片,实现仿照微信聊天气泡里显示图片效果的自定义View...
- spark sql and hive 3g数据测试
- 网络直播“黑科技”:Stream Matrix
- jzoj3844-统计损失【树形dp,换根法】
- Java线程--扩展
- 【Hisi系列】之软件平台开发(MPP相关)
- 图片压缩工具(网页优化)
- 五分钟带你玩转rabbitmq(八)【真实案例】消息消费失败如何处理?
- AutoCAD DWG 读模块参数:处理块
- time模块时间格式转换及faker库数据伪造
- HDDREG(硬盘坏道修复工具)v1.31绿色版
- 二、创建基础的drill集群
- 家庭观念算老几?(转)
- linux vt码的学习和使用
- 从无到有:七步教你做数值(1)
- Kubernetes v1.19版本来了,有哪些重磅更新?
- 乐鑫Esp32学习之旅27 带你在Windows10平台下用自带的Linux安装 ESP8266/ESP32 环境,再无需额外安装虚拟机了。
- No module named ‘bs4‘解决
- 加州大学计算机硕士,加州大学伯克利分校cs专业
热门文章
- linux cvs账户,在linux下为cvs创建用户
- Bandit UCB推导
- OpenCV的Mat和Halcon的HObject类型互相转换
- 关于conda-新手必读
- 递归神经网络(Recursive Neural Network, RNN)
- Java 数组 定义一个数组,获取数组中的最大值和最小值,奇数个数和偶数个数...
- java以正确的方式停止线程
- 详解之-js闭包的用途
- The mbstring extendsion is missing,Please check you PHP configuration
- SQL Server 2008 R2 中英文 开发版/企业版/标准版 链接地址