数据结构必会|队列和双端队列(Python)

简介: 队列和双端队列

队列

1. 队列是什么

​ 队列的思想比较贴近于我们的生活,当我们在超市排队结账的时候,其实就是一个队列的实现,也就是先排队的人先结账,后排队的人后结账的思想。

​ 和栈一样,队列也是一个有序的集合,添加操作发生在尾部,移除操作则发生在头部,新元素会从尾部进入队列,然后一直向前移动到头部,直到成为下一个被移除的元素。

​ 队列的性质规定了最新添加的元素必须在队列的尾部等待,在队列中时间最长的元素排在头部,这种原则被称为FIFO(first-in first-out)

在这里插入图片描述

2. 队列的实现

​ 队列的实现方式很简单,我们只要保证元素“从哪进,不从哪出”就可以了,使用列表的方式实现队列我们可以从尾部使用insert()函数插入元素,再使用pop()推出头部的元素。具体的实现方法如下:

class Queue:
    def __init__(self):
        self.items = []
    
    # 判断是否为空队列
    def isEmpty(self):
        return self.items == []

    # 入队列
    def enqueue(self, item):
        self.items.insert(0, item)

    # 出队列
    def dequeue(self):
        return self.items.pop()

    # 队列的长度
    def size(self):
        return len(self.items)

​ 测试结果如下:

# 测试队列
q = Queue()
q.isEmpty()

# 传入元素
q.enqueue('I')
q.enqueue('like')
q.enqueue('python')
q.size()
q.dequeue()

# 输出
'I'

双端队列

1. 双端队列的概念

​ 双端队列相对于之前的数据结构来说更加的自由,双端队列对于在哪一端进行添加和移除元素是没有限制的,也就意味着可以从任意一端进行元素的添加和移除。

​ 双端队列的性质也决定了其具有两种不同的原则:LIFO和FIFO。

在这里插入图片描述

2. 双端队列的实现

​ 实现双端队列的时候我们可以把之前用在栈和队列上面的做法结合在一起来实现LIFO和FIFO两种思想。具体的实现方法如下:

class Deque:
    def __init__(self):
        self.items = []

    # 判断是否为空
    def isEmpty(self):
        return self.items == []

    # 从前端插入数据
    def addFront(self, item):
        self.items.append(item)

    # 从尾端插入数据
    def addRear(self, item):
        self.items.insert(0, item)

    # 从前端删除数据
    def removeFront(self):
        return self.item.pop()

    # 从尾端删除数据
    def removeRear(self):
        return self.item.pop(0)

    # 队列的长度
    def size(self):
        return len(self.items)

​ 测试结果如下:

# 测试
d = Deque()
d.isEmpty()

# 插入元素
d.addFront('I')
d.addFront('like')
d.addRear('Python')

# 测试长度
d.size()

# 输出
3
相关文章
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
186 9
|
23天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
134 59
|
23天前
|
存储 开发者 Python
Python 中的数据结构与其他编程语言数据结构的区别
不同编程语言都有其设计理念和应用场景,开发者需要根据具体需求和语言特点来选择合适的数据结构
|
23天前
|
存储 开发者 索引
Python 中常见的数据结构
这些数据结构各有特点和适用场景,在不同的编程任务中发挥着重要作用。开发者需要根据具体需求选择合适的数据结构,以提高程序的效率和性能
|
23天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
23天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
23天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
44 5
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
21 0
|
2月前
|
存储 索引 Python
python数据结构之列表详解
列表是Python中极为灵活和强大的数据结构,适合于存储和操作有序数据集合。掌握其基本操作和高级特性对于编写高效、清晰的Python代码至关重要。通过本回答,希望能帮助你全面理解Python列表的使用方法,从而在实际编程中更加游刃有余。
36 0
下一篇
DataWorks