赞
踩
链式队列和循环队列是两种常见的队列实现方式,它们各自具有不同的特点和适用场景。下面我们将分别介绍这两种队列的模拟、实现以及应用。
链式队列是用链表实现的队列,队列的插入和删除操作分别在表头和表尾进行。链式队列通常包含一个头指针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
循环队列适用于需要固定大小队列的场景,例如在缓存管理、滑动窗口算法等中都有广泛应用。通过循环队列,我们可以有效地避免数组越界问题,并且能够快速判断队列是否为空或已满。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。