🤖 AI文章摘要 gemini-2.0-flash-lite

这篇文章介绍了队列(Queue)这种线性数据结构,它遵循先进先出(FIFO)的原则。文章定义了队列的几个关键概念,包括队头、队尾、队长和容量,并介绍了队列的几个基本操作,如enqueue(入队)、dequeue(出队)、front/head/peek(获取队头元素)、rear/tail(获取队尾元素)、isEmpty(判空)和isFull(判满)。文章还讨论了队列的两种实现方式:基于数组和基于链表。基于数组的实现需要维护数组、大小、容量和队头指针,并处理上溢和下溢的情况;基于链表的实现则需要封装节点类型,维护队头和队尾指针,并处理判空和指针的更新。

5f3bcd3b2b315f24aa387e40948c0eed

简单队列(Queue)

队列是一种线性数据结构,遵循元素先进先出的元素访问原则。

对于队列我们关注以下概念:

  • 队头(front | head):队列中准备出队的一端。
  • 队尾(rear | tail):队列中元素入队的一端。
  • 队长(size):队列中元素的个数。
  • 容量(capacity):队列可容纳的最大元素数量。

对于队列我们关注以下几个操作:

  • enqueue:将元素插入队尾。
  • dequeue:将元素从队头删除。
  • front | head | peek:获取队头元素。
  • rear | tail:获取队尾元素。
  • isEmpty:判断队列是否为空。
  • isFull:判断队列是否已满。

基于数组实现

  • 初始化数组相关变量$data$、$size$(初始0)、$capacity$以及队头指针$front$(初始0)。
  • 编写溢出函数时,$size==0$判定队空,$size==capacity$判定队满。
  • 编写插入函数时,进行上溢判断后计算队尾坐标$rear=(front+size)\%capacity$插入元素,并对size加1。
  • 编写弹出函数时,进行下溢判断后更新队头坐标$front=(front+1)\%capacity$,并对size减少1。

基于链表实现

  • 封装带$data$(初始为空)和$next$(初始为空)变量的节点类型,初始化队头指针$front$(初始为null)和队尾指针$rear$(初始为null)。
  • 编写溢出函数时,$front==rear==null$判定队空。
  • 编写插入函数时,队空时队头和队尾指针指向新节点即可,否则队尾节点指向新节点然后队尾指针指向新节点。
  • 编写弹出函数时,下溢判断后将队头指针指向下下个节点。