python中的列表结构可以用来实现栈和队列。

【栈】:

栈是一种数据结构,具有先入后出的特点,并且栈的所有操作只能在某一端进行,能进行操作的一端的第一个元素称为栈顶,另一端的第一个元素称为栈底

栈的五种基本方法:

push: 元素进栈

pop: 元素出栈,删除栈顶元素,并返回该元素

isEmpty: 判断栈是否为空;栈为空,返回True;栈不为空,返回False

peek: 访问栈顶元素

length: 返回栈中元素的个数

1 classStack():2 def __init__(self):3 self.stack =[]4

5 defpush(self, data):6 self.stack.append(data)7

8 defpop(self):9 if notself.isEmpty():10 returnself.stack.pop()11 else:12 print('StackError: fail to pop, the stack is empty.')13

14 defisEmpty(self):15 return self.length() ==016

17 defpeek(self):18 if notself.isEmpty():19 return self.stack[-1]20 else:21 print("The stack is empty.")22

23 deflength(self):24 return len(self.stack)

【队列】:

队列是一种数据结构,具有先入先出的特点,元素的插入和删除分别在不同的端进行,能够插入元素的队列一端称为队尾,另一端只能删除元素,称为队首

队列的五种基本操作:

push: 从队尾插入元素

pop: 从队首删除元素

isEmpty: 判断队列是否为空

peek: 访问队首元素

length: 获取队列中元素个数

1 classQueue():2 def __init__(self):3 self.queue =[]4

5 defpush(self, data):6 self.queue.append(data)7

8 defpop(self):9 if notself.isEmpty():10 returnself.queue.pop(0)11 else:12 print('StackError: fail to pop, the stack is empty.')13

14 defisEmpty(self):15 return self.length() ==016

17 defpeek(self):18 if notself.isEmpty():19 returnself.queue[0]20 else:21 print("The queue is empty.")22

23 deflength(self):24 return len(self.queue)

【双端队列】:

deque模块是Python标准库collections中的一个内置模块,实现双端队列的功能,在队列的两端都可以进行插入和删除

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

deque的种基本操作:

append: 入队,从队列右端插入一个元素

appendleft: 入队,从队列左端删除一个元素

extend: 迭代处理其输入,对每个元素完成与append()相同的处理

extendleft: 迭代处理其输入,对每个元素完成与appendleft()相同的处理

pop: 出队,从队列右端删除一个元素,并返回该元素

popleft: 出队,从队列左端删除一个元素,并返回该元素

rotate:将队列的某些元素按某一方向进行旋转

1 from collections importdeque2 queue = deque()

3 queue =deque(maxlen=n) # 限制queue的最大长度为n4 queue.append('one') #deque(['one'])

5 queue.appendleft('two') #deque(['two', 'one'])

6 queue.extend('three') #deque(['two', 'one', 't', 'h', 'r', 'e', 'e'])

7 queue.extendleft('four') #deque(['r', 'u', 'o', 'f', 'two', 'one', 't', 'h', 'r', 'e', 'e'])

8 queue.pop() #deque(['r', 'u', 'o', 'f', 'two', 'one', 't', 'h', 'r', 'e'])

9 queue.popleft() #deque(['u', 'o', 'f', 'two', 'one', 't', 'h', 'r', 'e'])

10 queue.rotate(2) #deque(['r', 'e', 'u', 'o', 'f', 'two', 'one', 't', 'h']) ,参数为正数n时,将右端的n个元素依次插入到左端

11 queue.rotate(-3) #deque(['o', 'f', 'two', 'one', 't', 'h', 'r', 'e', 'u']) ,参数为负数n时,将左端的n个元素依次插入到右端

参考博文: https://www.jb51.net/article/88139.htm

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431953239820157155d21c494e5786fce303f3018c86000

https://docs.python.org/3/library/collections.html#collections.deque

python 栈和队列_python 栈和队列的基本实现相关推荐

  1. python实现栈的操作_python简单实现队列和栈push、pop操作

    栈: # -*- coding: utf-8 -*- #定义序列 lst=[] def pop(): if(len(lst)==0): print"栈为空","无法出栈& ...

  2. python 清空队列_python实现:队列

    队列 队列和栈比较类似,可以和博文:https://blog.csdn.net/weixin_42521211/article/details/88946748 参考学习. 队列的一个特性是:先进先出 ...

  3. python消息队列_python之消息队列

    消息持久化 acknowledgment 消息不丢失的方法 生效方法:channel.basic_consume(consumer_callback, queue, no_ack=False, exc ...

  4. python中的队列和栈_python的队列和栈

    (一)队列和栈的区别 1.队列: 队列是一种特殊的线性表.其两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端 ...

  5. python 栈和队列_Python实现栈和队列的简单操作方法示例

    本文实例讲述了Python实现栈和队列的简单操作方法.分享给大家供大家参考,具体如下: 先简单的了解一下数据结构里面的栈和堆: 栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: sta ...

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

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

  7. python链表实现栈_python实现链表队列栈

    #!/usr/bin/python # -*- coding: utf-8 -*- #便于测试 data 使用数字 class Node(object): def __init__(self,data ...

  8. python实现队列_Python学习教程:用队列实现栈

    接着上一期跟大家说的用栈实现队列,这期的 Python学习教程 跟大家讲 用队列实现栈 题目: 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() ...

  9. python链表实现栈_使用python实现数组、链表、队列、栈

    引言 什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表,集合和字 ...

最新文章

  1. Github for windows
  2. 解决Moodle日历乱码的最佳方案
  3. Python简单遍历字典及删除元素的方法
  4. Linux 常見的登錄檔檔名
  5. setseed_Java Random setSeed()方法与示例
  6. js获取当前时区GMT
  7. ipv6单播地址包括哪两种类型_IPV6中为啥没有ARP了呢?一文带你搞懂NDP邻居发现协议...
  8. ARM9学习笔记之——SDRAM实验
  9. 从Hive导入数据到ES
  10. Qt 环境下MAPX组件的编程
  11. 程序开发中版本管理之命名规则及格式
  12. activex 控件 过期_ie8/9下Activex控件无法加载的两种解决方法
  13. 阵列卡在服务器什么位置,阵列卡是什么
  14. 如何给服务器IIS配置文件夹配置everyone权限
  15. win7桌面背景_解决WIN7桌面背景无法更改的问题
  16. u8零售服务器端口号修改,用友U8服务器修改数据库端口
  17. 一种简单的短路检测电路设计
  18. 2022年后疫情时代下市场研报报告合集(共90份)
  19. 【风马一族_php】
  20. (纪录片)光的故事 BBC Light Fantastic (2004)

热门文章

  1. lte核心网由哪些设备组成_投影地面互动的实现由哪些设备组成?「振邦视界」...
  2. mysql 启动 修改密码_基础的启动/停止/重启/密码修改MySQL
  3. shell中执行某条语句失败能不能重复执行_如何理解Mysql中的事务隔离级别?
  4. 大一新生计算机课word知识,大学新生计算机基础分层考试结果探析与启发.doc
  5. C++头文件的防卫式声明(为了防止多次include)
  6. Halcon算子学习:create_sheet_of_light_model
  7. Socket编程应用——开发聊天软件
  8. 深度学习、图像识别的基本概念
  9. 进入opencv内部函数调试
  10. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨每次访问的交易次数【难度困难-提前放出来】​