Skip to content
  1. 顺序表的实现

  2. 顺序表的优缺点

  3. 线性表单向链式存储的实现

  4. 链表的优缺点

  5. 查找单向链表的中间节点

  6. 查找链表中是否有环

  7. 查找链表中环的入口节点

  8. 判断循环队列的满和空的方法

循环队列是一种特殊的线性表,它只允许在表的前端(front)和后端(rear)进行删除和插入操作。由于其特殊的存储结构,判断循环队列是否为空或已满是实现循环队列的重要部分。以下是三种常用的方法来判断循环队列的满和空。

  • 少用一个存储位置

    这种方法通过少用一个存储位置来区分队列的满和空状态。

    队列为空:当 rear == front 时,队列为空。

    队列满:当 (rear + 1) % maxsize == front 时,队列已满。

    这种方法的优点是简单易懂,但需要注意在某些情况下可能不适用

    c++
    class CircularQueue:
    def __init__(self, maxsize):
    self.queue = [None] * maxsize
    self.maxsize = maxsize
    self.front = 0
    self.rear = 0
    
    def is_empty(self):
    return self.front == self.rear
    
    def is_full(self):
    return (self.rear + 1) % self.maxsize == self.front
  • 设置一个标记位

    通过设置一个标记位来区分队列的满和空状态。

    队列为空:当 rear == frontflag == False 时,队列为空。

    队列满:当 rear == frontflag == True 时,队列已满。

    这种方法通过标记位来区分队列的状态,避免了少用一个存储位置的问题

    c++
    class CircularQueueWithFlag:
    def __init__(self, maxsize):
    self.queue = [None] * maxsize
    self.maxsize = maxsize
    self.front = 0
    self.rear = 0
    self.flag = False
    
    def is_empty(self):
    return self.front == self.rear and not self.flag
    
    def is_full(self):
    return self.front == self.rear and self.flag
  • 计数法

    通过一个计数器来记录队列中元素的个数。

    队列为空:当 count == 0 时,队列为空。

    队列满:当 count == maxsize 时,队列已满。

    这种方法通过计数器来精确记录队列的状态,适用于各种情况

    c++
    class CircularQueueWithCount:
    def __init__(self, maxsize):
    self.queue = [None] * maxsize
    self.maxsize = maxsize
    self.front = 0
    self.rear = 0
    self.count = 0
    
    def is_empty(self):
    return self.count == 0
    
    def is_full(self):
    return self.count == self.maxsize

通过以上三种方法,可以有效地判断循环队列的满和空状态,选择适合自己需求的方法进行实现。