文章目录

  • 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-栈和队列相关推荐

  1. python数据结构-栈和队列的实现

    1.栈(后进先出(last in first out,LIFO)) 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出(LIFO,last-in-first-o ...

  2. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  3. 【数据结构】栈、队列、堆的python实现

    [数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...

  4. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  5. 数据结构~07.栈和队列的基本概念

    数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...

  6. 10.数据结构:栈和队列

    大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...

  7. 【数据结构】栈与队列区分push pop offer poll containsKey put等

    目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...

  8. 算法与数据结构(part5)--栈与队列

    学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...

  9. 数据结构03栈和队列

    第三章栈和队列 STL 栈:stack http://blog.csdn.net/weixin_37289816/article/details/54773495 队列: queue  http:// ...

  10. 用Java描述数据结构之栈和队列,以及栈和队列的常用方法

    一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然.它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具 ...

最新文章

  1. Java Master-Worker模式实现
  2. atmega8a如何烧写程序_如何让树莓派4上固件的debug日志输出到串口?
  3. RabbitMQ入门-发送消息机制的介绍
  4. 音视频技术开发周刊 55期
  5. java中的HashSet内部是如何工作的
  6. matlab连接mysql教程视频_Matlab建立到Oracle数据库的连接
  7. Linux——alias 设置别名详解
  8. java nio 缓冲区(一)
  9. java多线程学习-java.util.concurrent详解(五) ScheduledThreadPoolExecutor
  10. Mac硬盘格式转化好帮手——Tuxera NTFS
  11. Android开发-之五大布局
  12. Python的逻辑操作
  13. 设计一个RC高通滤波器或低通滤波器
  14. NEO智能合约开发(二)再续不可能的任务
  15. 卷积神经网络学习路线(十三)| CVPR2017 Deep Pyramidal Residual Networks
  16. java库存同步思路_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
  17. 声学模型(语音识别中的)--学习笔记
  18. C语言入门教程|| C语言 程序结构|| C语言 基本语法
  19. 如何解决图片在移动端清晰显示的问题
  20. extra argument in call

热门文章

  1. “带锁的门”问题,并有c语言和python代码运行效率对比
  2. 20100823工作记录
  3. Linux window查询网络端口
  4. 安装MySQL和出现的问题解决
  5. [HNOI2006]最短母串问题 --- AC自动机 + 隐式图搜索
  6. 80 行代码爬取豆瓣 Top250 电影信息并导出到 CSV 及数据库
  7. asp.net 页面缓存、数据缓存
  8. readline,readlines,read函数
  9. cocos2dx进阶学习之CCAction
  10. 89c52串口发送接收小示例