数据结构===队列

简介: 数据结构===队列

概要

队列,就像现实中的排队一样,这样的数据结构,一说很多人都熟悉。

队列,就是像我们排队一样,有2个操作,入队,出队;先进先出;现实中也是一样的。不过,毕竟是数据结构,我们学过数组,链表,从这边分,又衍生出顺序队列,链式队列。接下来看看具体的。

操作

操作有2种,入队和出队。

队列,对数据的操作有2种,入队,出队;时间复杂度都是O(1)。简单看下吧。

入队

入队就是往队列尾部中插入一个数据。

入队操作,就是插入一个元素。队列这种数据结构,只能是尾部插入。想想我们排队,肯定都是排在尾部的,相对于那个队列来说。参考对象别选错了。很重要。

出队

出队就是把队列中的头元素删除掉。

队列是先进先出的。前边说过,出队,肯定也是头部元素先出去的。这个还好理解吧,实在不理解可以画个图看看。

顺序队列

前边说过,从我们学过的最基础的数组和链表的角度看,队列可以分为顺序队列和链式队列。先看看顺序队列,数组的话,支持随机访问下标,插入,删除效率低,涉及到其他元素的位移,插入还涉及到扩容。来看看代码实现。

代码Python

class ArrayQueue:
    
    def __init__(self, capacity: int):
        self._items = []
        self._capacity = capacity
        self._head = 0
        self._tail = 0
    def enqueue(self, item: str) -> bool:
        if self._tail == self._capacity:
            if self._head == 0:
                return False
            else:
                for i in range(0, self._tail - self._head):
                    self._items[i] = self._items[i + self._head]
                self._tail = self._tail - self._head
                self._head = 0
        
        self._items.insert(self._tail, item)
        self._tail += 1
        return True
    
    def dequeue(self) -> Optional[str]:
        if self._head != self._tail:
            item = self._items[self._head]
            self._head += 1
            return item
        else:
            return None

链式队列

链式队列是基于链表实现的。

链式队列,这个是基于链表实现的;链表的特点,插入,删除效率高,查找效率低。这些都知道了。来看看代码实现。

代码Python

class Node:
    
    def __init__(self, data: str, next=None):
        self.data = data
        self._next = next
class LinkedQueue:
    def __init__(self):
        self._head: Optional[Node] = None
        self._tail: Optional[Node] = None
    
    def enqueue(self, value: str):
        new_node = Node(value)
        if self._tail:
            self._tail._next = new_node
        else:
            self._head = new_node
        self._tail = new_node
    
    def dequeue(self) -> Optional[str]:
        if self._head:
            value = self._head.data
            self._head = self._head._next
            if not self._head:
                self._tail = None
            return value

小结

队列,一种常见的数据结构。

对列,一种常见的数据结构;我们都很熟悉,毕竟经常见到。当然,数据结构中又基于数组的顺序队列,基于链表的链式队列;还有一些其他的,像环式队列等等。这里不在一一列举。其实,还是最基础的特点,先进先出,入队,出队;然后基于不同的其他数据结构实现的,看看特点,时间复杂度。就这么多了。翻篇。

相关文章
|
26天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
122 9
|
2月前
|
缓存 算法 调度
数据结构之 - 双端队列数据结构详解: 从基础到实现
数据结构之 - 双端队列数据结构详解: 从基础到实现
69 5
|
2月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
107 64
|
29天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
初步认识栈和队列
初步认识栈和队列
61 10
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
23 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
32 2
【数据结构】--- 栈和队列
【数据结构】--- 栈和队列
|
2月前
|
消息中间件 存储 Java
数据结构之 - 深入探析队列数据结构: 助你理解其原理与应用
数据结构之 - 深入探析队列数据结构: 助你理解其原理与应用
36 4
|
2月前
【初阶数据结构】深入解析队列:探索底层逻辑
【初阶数据结构】深入解析队列:探索底层逻辑