python数据结构4-栈和队列
文章目录
- 1.栈
- 2.队列
- 3.双端队列
1.栈
- 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,
- 特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。
- 由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
- 栈可以用顺序表实现,也可以用链表实现。
顺序表
#栈
class Stack(object):'''栈'''def __init__(self):self.__list = []def push(self,item):#添加一个新的元素到栈顶self.__list.append(item)def pop(self):#弹出栈顶元素return self.__list.pop()def peek(self):#返回栈顶元素if self.__list:return self.__list[-1]else:return Nonedef is_empty(self):'''判断栈为空'''return self.__list == []def size(self):'''返回栈顶元素'''return len(self.__list)if __name__ == '__main__':s = Stack()s.push(1)s.push(2)s.push(3)print(s.pop())print(s.pop())print(s.pop())
运行结果
3
2
1
2.队列
- 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
- 队列是一种先进先出的(First In First Out)的线性表,允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作
- 同栈一样,队列也可以用顺序表或者链表实现
顺序表
#队列
class Queue(object):'''创建一个空的队列'''def __init__(self):self.__list = []def enqueue(self,item):'''往队列中添加一个item元素'''self.__list.append(item)def dequeue(self):'''从队列头部删除一个元素'''return self.__list.pop(0)def is_empty(self):'''判断一个队列是否为空'''return self.__list == []def size(self):'''返回队列的大小'''return len(self.__list)
if __name__ == '__main__':s = Queue()s.enqueue(1)s.enqueue(2)s.enqueue(3)print(s.dequeue())print(s.dequeue())print(s.dequeue())
运行结果:
1
2
3
3.双端队列
- 双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
- 双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
#双端队列
class Deque(object):'''创建一个空的双端队列'''def __init__(self):self.__list = []def add_front(self,item):'''从队头加入一个item元素'''self.__list.insert(0,item)def add_rear(self,item):'''从队尾加入一个item元素'''self.__list.append(item)def remove_front(self):'''从队头删除一个item元素'''return self.__list.pop(0)def remove_rear(self):'''从队尾删除一个item元素'''return self.__list.pop()def is_empty(self):'''判断双端队列是否为空'''return self.__list == []def size(self):'''返回队列的大小'''return len(self.__list)
if __name__ == '__main__':s = Deque()s.add_front(1)s.add_front(2)s.add_rear(3)print(s.remove_front())print(s.remove_front())print(s.remove_front())
运行结果:
2
1
3
python数据结构4-栈和队列相关推荐
- python数据结构-栈和队列的实现
1.栈(后进先出(last in first out,LIFO)) 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出(LIFO,last-in-first-o ...
- python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt
数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...
- 【数据结构】栈、队列、堆的python实现
[数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- 数据结构~07.栈和队列的基本概念
数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...
- 10.数据结构:栈和队列
大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...
- 【数据结构】栈与队列区分push pop offer poll containsKey put等
目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...
- 算法与数据结构(part5)--栈与队列
学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...
- 数据结构03栈和队列
第三章栈和队列 STL 栈:stack http://blog.csdn.net/weixin_37289816/article/details/54773495 队列: queue http:// ...
- 用Java描述数据结构之栈和队列,以及栈和队列的常用方法
一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然.它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具 ...
最新文章
- Java Master-Worker模式实现
- atmega8a如何烧写程序_如何让树莓派4上固件的debug日志输出到串口?
- RabbitMQ入门-发送消息机制的介绍
- 音视频技术开发周刊 55期
- java中的HashSet内部是如何工作的
- matlab连接mysql教程视频_Matlab建立到Oracle数据库的连接
- Linux——alias 设置别名详解
- java nio 缓冲区(一)
- java多线程学习-java.util.concurrent详解(五) ScheduledThreadPoolExecutor
- Mac硬盘格式转化好帮手——Tuxera NTFS
- Android开发-之五大布局
- Python的逻辑操作
- 设计一个RC高通滤波器或低通滤波器
- NEO智能合约开发(二)再续不可能的任务
- 卷积神经网络学习路线(十三)| CVPR2017 Deep Pyramidal Residual Networks
- java库存同步思路_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
- 声学模型(语音识别中的)--学习笔记
- C语言入门教程|| C语言 程序结构|| C语言 基本语法
- 如何解决图片在移动端清晰显示的问题
- extra argument in call