队列的学习(一)用数组和链表实现单向队列

简介: 队列的学习(一)用数组和链表实现单向队列队列(Queue)是一种先进先出的数据结构,类似于现实生活中排队的场景。它有两个基本操作:入队(enqueue)和出队(dequeue)。在本文中,我们将介绍如何使用数组和链表来实现单向队列。

队列的学习(一)用数组和链表实现单向队列

队列(Queue)是一种先进先出的数据结构,类似于现实生活中排队的场景。它有两个基本操作:入队(enqueue)和出队(dequeue)。在本文中,我们将介绍如何使用数组和链表来实现单向队列。

数组实现单向队列

数组实现单向队列需要两个指针,一个指向队头(front),一个指向队尾(rear)。入队操作时,将数据插入到队尾,即rear指针指向的位置;出队操作时,将队头数据删除,即front指针指向的位置。使用数组实现单向队列的优点是简单易懂,缺点是容易产生假溢出(队列未满但无法插入数据)。

以下是使用数组实现单向队列的代码示例:

class ArrayQueue:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.data = [None] * capacity
        self.front = 0
        self.rear = 0
    def enqueue(self, item: int) -> bool:
        if self.rear == self.capacity:
            return False
        self.data[self.rear] = item
        self.rear += 1
        return True
    def dequeue(self) -> int:
        if self.front == self.rear:
            return None
        item = self.data[self.front]
        self.front += 1
        return item

链表实现单向队列

链表实现单向队列只需要一个指针,即指向队尾的节点,每个节点包含一个数据域和一个指向下一个节点的指针。入队操作时,创建一个新节点,将其插入到队尾节点后面;出队操作时,删除队头节点即可。使用链表实现单向队列的优点是不会产生假溢出,缺点是需要较多的空间存储指针信息。

以下是使用链表实现单向队列的代码示例:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class LinkedQueue:
    def __init__(self):
        self.head = ListNode()
        self.tail = self.head
    def enqueue(self, item: int) -> None:
        new_node = ListNode(item)
        self.tail.next = new_node
        self.tail = new_node
    def dequeue(self) -> int:
        if self.head.next is None:
            return None
        item = self.head.next.val
        self.head.next = self.head.next.next
        if self.head.next is None:
            self.tail = self.head
        return item

以上是使用数组和链表分别实现单向队列的方法。根据实际需求,选择合适的实现方式即可。

队列的学习(一)用数组和链表实现单向队列

队列(Queue)是一种先进先出的数据结构,类似于现实生活中排队的场景。它有两个基本操作:入队(enqueue)和出队(dequeue)。在本文中,我们将介绍如何使用数组和链表来实现单向队列。

数组实现单向队列

数组实现单向队列需要两个指针,一个指向队头(front),一个指向队尾(rear)。入队操作时,将数据插入到队尾,即rear指针指向的位置;出队操作时,将队头数据删除,即front指针指向的位置。使用数组实现单向队列的优点是简单易懂,缺点是容易产生假溢出(队列未满但无法插入数据)。

以下是使用数组实现单向队列的代码示例:

class ArrayQueue:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.data = [None] * capacity
        self.front = 0
        self.rear = 0
    def enqueue(self, item: int) -> bool:
        if self.rear == self.capacity:
            return False
        self.data[self.rear] = item
        self.rear += 1
        return True
    def dequeue(self) -> int:
        if self.front == self.rear:
            return None
        item = self.data[self.front]
        self.front += 1
        return item

链表实现单向队列

链表实现单向队列只需要一个指针,即指向队尾的节点,每个节点包含一个数据域和一个指向下一个节点的指针。入队操作时,创建一个新节点,将其插入到队尾节点后面;出队操作时,删除队头节点即可。使用链表实现单向队列的优点是不会产生假溢出,缺点是需要较多的空间存储指针信息。

以下是使用链表实现单向队列的代码示例:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class LinkedQueue:
    def __init__(self):
        self.head = ListNode()
        self.tail = self.head
    def enqueue(self, item: int) -> None:
        new_node = ListNode(item)
        self.tail.next = new_node
        self.tail = new_node
    def dequeue(self) -> int:
        if self.head.next is None:
            return None
        item = self.head.next.val
        self.head.next = self.head.next.next
        if self.head.next is None:
            self.tail = self.head
        return item

以上是使用数组和链表分别实现单向队列的方法。根据实际需求,选择合适的实现方式即可。

相关文章
|
2月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
122 64
|
27天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
53 5
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
28 3
|
2月前
|
算法 Java
数据结构与算法学习五:双链表的增、删、改、查
双链表的增、删、改、查操作及其Java实现,并通过实例演示了双向链表的优势和应用。
25 0
数据结构与算法学习五:双链表的增、删、改、查
|
2月前
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
29 0
|
2月前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
24 0
|
6月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
6月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表