入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、栈和队列的概念

1、栈

2、队列

二、python中的LifoQueue(其实也是所谓的后进先出队列)和list列表

三、python自行搭建栈

1、初始化

2、判断栈是否为空

3、进栈

4、出栈

5、栈的长度

6、输出栈顶元素但不弹出

7、具体调用

三、python中的Queue

四、python自行搭建队列

1、初始定义

2、判断队列是否为空

3、输出队列长度

4、入队

5、出队

6、获取队首元素

7、具体调用


一、栈和队列的概念

1、栈

简单来说,栈也是线性表的一种。它只允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

进栈:向一个栈插入新元素,它是把新元素放到栈顶元素的上面,变成新的栈顶元素;

出栈:从一个栈删除元素,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2、队列

队列也是一种一种线性表。

特点:

(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。

(2)在队尾添加元素,在队头删除元素。


二、python中的LifoQueue(其实也是所谓的后进先出队列)和list列表

python具有实现栈的数据结构,是queue库中的LifoQueue。接下来让我们来看看它的几个相关应用。

from queue import LifoQueuestack = LifoQueue()
for i in range(5):stack.put(i) #进栈for i in range(5):print(stack._get()) #出栈

首先从queue库中导入LifoQueue,put(data)是进栈,_get()是出栈。

此外队列除了传统的先进先出,还有先进后出(就类似栈),还有优先级队列(PriorityQueue),他们都是从先进先出改进而来的。

当然最简单的就是直接用列表啦~

a = [1,2,3]
a.pop()#出栈
a.append(4)#入栈

三、python自行搭建栈

1、初始化

class Stack:def __init__(self):self.data = []

2、判断栈是否为空

    def isEmpty(self): #判断栈是否为空return not self.data

3、进栈

    def push(self,data): #进栈self.data.append(data)

4、出栈

    def pop(self): #弹出栈顶元素(出栈)return self.data.pop()

5、栈的长度

    def size(self): #输出栈的大小return len(self.data)

6、输出栈顶元素但不弹出

    def searchtop(self): #输出栈顶元素(但未弹出)return self.data[-1]

7、具体调用

stack = Stack()
for i in range(5):stack.push(i)
print(stack.size())
print(stack.searchtop())
for i in range(5):print(stack.pop())
print(stack.isEmpty())

三、python中的Queue

python具有实现栈的数据结构,是queue库中的Queue。

首先我们从queue库中调用Queue

from queue import Queue
q = Queue()

然后很遗憾,开始报错

cannot import name 'Queue' from partially initialized module 'queue' (most likely due to a circular import)

后来发现原来是因为我把文件名定义成queue.py的缘故,和queue库重名了,所以换个文件件名就没事了。

for i in range(5):q.put(i)
for i in range(5):print(q.get())

和LifoQueue类似的,put(data)入队,get()出队


四、python自行搭建队列

1、初始定义

class Queuepy:def __init__(self):self.queue = []

2、判断队列是否为空

    def isEmpty(self): #判断队列是否为空return not self.queue

3、输出队列长度

    def size(self): #输出队列长度return len(self.queue)

4、入队

    def joinqueue(self,data): #入队(队尾)self.queue.append(data)

5、出队

    def outofqueue(self): #出队(队头)l = len(self.queue)if l == 0:print("The queue is None")else:a = self.queue[0]q = []for i in range(l-1):q.append(self.queue[i+1])self.queue = qreturn a

6、获取队首元素

    def getleader(self): #获取队头return self.queue[0]

7、具体调用

k = Queuepy()
for i in range(5):k.joinqueue(i)
print(k.isEmpty())
print(k.size())
print(k.getleader())
for i in range(5):print(k.outofqueue())
print(k.isEmpty())

欢迎大家在评论区批评指正,谢谢大家~

python栈和队列相关推荐

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

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

  2. python 栈和队列_python 栈和队列的基本实现

    python中的列表结构可以用来实现栈和队列. [栈]: 栈是一种数据结构,具有先入后出的特点,并且栈的所有操作只能在某一端进行,能进行操作的一端的第一个元素称为栈顶,另一端的第一个元素称为栈底 栈的 ...

  3. python 栈和队列 排序 初级数据结构

    编写一个类,具有栈和队列的功能.实现以下4个方法: shit()       返回并删除列表中第一个元素 unshit()   在列表的头部'压入'一个新的元素 push()    在列表尾部增加一个 ...

  4. Python栈与队列

    栈: 栈**(也称******下压栈******.堆栈)是******仅允许在表尾****进行插入和删除操作的线性表. 我们把允许插入和删除的一端称为****栈顶******,另一端称为******栈 ...

  5. 让python飞:形象理解python 栈、队列、lambda、生成器、迭代器、模块

    Day10 棒球和球棒与水晶火炉和五彩宝箱 棒球和球棒来到了足球场,要打棒球!但是球场工作人员不同意.棒球和球棒表示不服.球场工作人员说,这样吧,你按我们的规则完成任务,我们就让你们在这里玩.这里有两 ...

  6. python - 栈与队列(只有代码)

    1. 栈: - 后进先出 class Stack(object):def __init__(self):self.stack = []def peek(self):return self.stack[ ...

  7. python栈与队列的封装

    项目案例一:栈的封装 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为"栈顶",另一固定端称为"栈底",当栈中没有元素时称为&q ...

  8. python 栈和队列_python实现栈和队列

    栈(Stack),也叫做堆栈, 是一种容器, 可存入数据元素.访问元素.删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop ...

  9. python 栈和队列的区别_Python 栈与队列

    一.栈: #栈的实现,先进后出 class Stack(object): def __init__(self): self.__list = [] def push(self,item): self. ...

最新文章

  1. 设计模式C#描述——抽象工厂模式
  2. PyTorch | 优化神经网络训练的17种方法
  3. 对Linux0.11 中 进程0 和 进程1分析
  4. python第一堂课
  5. 深度学习用于基于内容的图像检索 Deep Learning for Content-Based Image Retrieval
  6. VC6中用DOM遍历网页中的元素
  7. log4j2分层输出日志
  8. 从浏览器地址栏输入url到显示页面的步骤
  9. 程序猿 自己所擅长的还是码代码 请远离 业务。
  10. 新手必看!电脑文件管理八条小技巧
  11. android surface windows,Android易混概念辨析之Surface,Window,View,SurfaceView,Bitmap
  12. Linux-lamp
  13. 关于码元、波特率和比特率
  14. 二元函数对xy同时求导_二元函数的连续、可偏导、可微、偏导数连续之间的关系...
  15. 帮你找影视剧同款的“影觅”宣布完成百万美元级Pre-A轮融资_36氪
  16. 8.综合案例:爱宠知识
  17. 空间直线的最小二乘拟合
  18. 校招 | 华为终端云服务招聘NLP、CV、推荐和大数据等岗位
  19. 物联网毕业设计 stm32远程智能浇花灌溉系统 - 单片机 嵌入式
  20. 那些做App启动页面应该要想到的地方(Android)

热门文章

  1. 中国软件人没有创造力?
  2. QC1.0/QC2.0/3.0/4.0协议
  3. [Free] Cracking the Coding Interview 6th Download
  4. 老西医和老码农的中年危机
  5. 机器学习 之 最小二乘法,各种损失函数
  6. 如何将PDF文件转换为Excel表格?这两个方法方便实用!
  7. 潜谈IT从业人员在传统IT和互联网之间的择业问题(下)-互联网公司
  8. 工作日记 day01
  9. 思维导图 基础篇(02)认知大脑
  10. 12.ROS编程学习:ROS常用指令