链式队与循环队列的模拟、实现与应用

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

一、链式队列

链式队列是用链表实现的队列,队列的插入和删除操作分别在表头和表尾进行。链式队列通常包含一个头指针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

应用:

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

二、循环队列

循环队列是用数组实现的队列,通过取模运算实现循环。循环队列通常设置一个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

应用:

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅人OranGe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值