当前位置:   article > 正文

链式队与循环队列的模拟、实现与应用_循环队列、链式队列操作实现功能模块设计

循环队列、链式队列操作实现功能模块设计

链式队列和循环队列是两种常见的队列实现方式,它们各自具有不同的特点和适用场景。下面我们将分别介绍这两种队列的模拟、实现以及应用。

一、链式队列

链式队列是用链表实现的队列,队列的插入和删除操作分别在表头和表尾进行。链式队列通常包含一个头指针front和一个尾指针rear,分别指向队列的头结点和尾结点。

模拟:

初始化:创建一个空链表作为队列,设置头指针front和尾指针rear都为NULL。
入队操作:在链表尾部插入一个新结点,并将尾指针rear指向该结点。
出队操作:删除链表头部结点,并将头指针front指向下一个结点。
实现:

代码实现

以下是链式队列的Python实现示例:

class Node:  
    def __init__(self, data=None):  
        self.data = data  
        self.next = None  
  
class LinkedQueue:  
    def __init__(self):  
        self.front = None  
        self.rear = None  
  
    def enqueue(self, data):  
        new_node = Node(data)  
        if self.rear is None:  
            self.front = self.rear = new_node  
        else:  
            self.rear.next = new_node  
            self.rear = new_node  
  
    def dequeue(self):  
        if self.front is None:  
            return None  
        else:  
            data = self.front.data  
            self.front = self.front.next  
            if self.front is None:  
                self.rear = None  
            return data
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

应用:

链式队列适用于需要动态调整队列大小的情况,例如在网络编程中处理数据包、在操作系统中管理进程等。

二、循环队列

循环队列是用数组实现的队列,通过取模运算实现循环。循环队列通常设置一个front指针指向队头元素,一个rear指针指向队尾元素的下一个位置。当队列为空时,front和rear相等;当队列满时,(rear+1)%队列长度=front。

模拟:

初始化:创建一个固定大小的数组作为队列,设置front和rear都为0。
入队操作:在rear位置插入一个新元素,并将rear指针向后移动一位(如果rear到达数组末尾,则回到数组开头)。
出队操作:删除front位置的元素,并将front指针向后移动一位(如果front到达数组末尾,则回到数组开头)。

实现:

以下是循环队列的Python实现示例:

class CircularQueue:  
    def __init__(self, k):  
        self.k = k  
        self.queue = [0] * k  
        self.head = self.tail = -1  
  
    # 插入元素到队尾  
    def enqueue(self, data):  
        if ((self.tail + 1) % self.k == self.head):    
            print("循环队列已满\n")   
        elif (self.head == -1):  # 插入第一个元素  
            self.head = 0  
            self.tail = 0  
            self.queue[self.tail] = data  
        else:  # 队列非空  
            self.tail = (self.tail + 1) % self.k  # 循环队列  
            self.queue[self.tail] = data  
  
    # 删除队头元素  
    def dequeue(self):  
        if (self.head == -1):  # 空队列  
            print("循环队列为空\n")  
        elif (self.head == self.tail):  # 队列中只剩下一个元素  
            temp = self.queue[self.head]  
            self.head = -1  
            self.tail = -1  
            return temp  
        else:  
            temp = self.queue[self.head]  
            self.head = (self.head + 1) % self.k  
            return temp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

应用:

循环队列适用于需要固定大小队列的场景,例如在缓存管理、滑动窗口算法等中都有广泛应用。通过循环队列,我们可以有效地避免数组越界问题,并且能够快速判断队列是否为空或已满。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/880219
推荐阅读
相关标签
  

闽ICP备14008679号