数据结构-队列
「队列 Queue」是一种遵循「先入先出 first in, first out」数据操作规则的线性数据结构
队列的实现方式:环形队列(队列不能用列表简单实现,因此采用环形队列)
- 基于数组
- 基于链表
环形队列:
size:队列的长度
front:队首指针
rear:队尾指针
队首指针前进1:front = (front + 1) % size 之所以要 模 长度 是因为要判断是否到达队尾
队尾指针前进1:rear = (rear + 1) % size
队空条件:rear = front 两个指针重合就是队空
队满条件:(rear + 1)% size = front 队首为空,队尾在队首后面一个位置就是队满
基于数组
# 基于数组的环形队列 class Queue: def __init__(self, size=100): self.queue = [0 for _ in range(size)] self.size = size self.rear = 0 # 队尾指针 self.front = 0 # 队首指针 def push(self, element): # 入队列 if not self.is_filled(): self.rear = (self.rear + 1) % self.size # 队尾指针前进1 self.queue[self.rear] = element else: raise IndexError("Queue is filled.") def pop(self): # 出队列 if not self.is_empty(): self.front = (self.front + 1) % self.size return self.queue[self.front] else: raise IndexError("Queue is empty.") def is_empty(self): # 判断队空 return self.rear == self.front def is_filled(self): # 判断队满 return (self.rear + 1) % self.size == self.front q = Queue(5) for i in range(4): q.push(i) print(q.pop()) q.push(5) print(q.is_filled())
基于链表
class ListNode: def __init__(self, val: int): self.val = val # 结点值 self.next = None # 指向下一结点的指针 class LinkedListQueue: """ 基于链表实现的队列 """ def __init__(self): self.__front = None # 头结点 front self.__rear = None # 尾结点 rear self.__size = 0 # 队列长度 def size(self): """ 获取队列的长度 """ return self.__size def is_empty(self): """ 判断队列是否为空 """ return not self.__front def push(self, num): """ 入队 """ node = ListNode(num) # 如果队列为空,则令头、尾结点都指向该结点 if self.__front is None: self.__front = node self.__rear = node # 如果队列不为空,则将该结点添加到尾结点后 else: self.__rear.next = node self.__rear = node self.__size += 1 def peek(self): """ 访问队首元素 """ if self.size() == 0: return False return self.__front.val def pop(self): """ 出队 """ num = self.peek() # 删除头结点 self.__front = self.__front.next self.__size -= 1 return num def to_list(self): """ 转化为列表用于打印 """ queue = [] temp = self.__front while temp: queue.append(temp.val) temp = temp.next return queue A = LinkedListQueue() A.push(1) A.push(2) A.push(3) A.pop() print(A.peek())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」