一、带链队列的核心结构
带链队列通常采用单链表实现,为了方便入队(队尾插入)和出队(队头删除)操作,会设置两个指针:
- front(队头指针):指向队列的第一个节点(首元素);
- rear(队尾指针):指向队列的最后一个节点(尾元素)。
链表节点的结构为:[数据域 | 指针域]
,指针域指向后一个节点。
二、带链队列 “空” 的判断逻辑
当队列中没有任何元素时:
- 队头指针(front)没有指向的节点,因此
front = NULL
;
- 队尾指针(rear)也没有指向的节点,因此
rear = NULL
;
- 由于空队列中 front 和 rear 均无指向,二者必然相等(均为 NULL)。
一、为什么顺序队列用 front = -1
表示空?
顺序队列基于数组实现,front
(队头下标)和 rear
(队尾下标)本质是数组的索引(整数类型)。
- 初始状态(空队列)时,队列中没有元素,用
front = -1
表示 “队头尚未指向任何数组位置”(因为数组下标从 0
开始,-1
是一个无效的、不会与有效下标冲突的值);
- 此时
rear
通常也设为 -1
(与 front
一致),表示 “队尾也无有效元素”。
二、为什么链式队列不用 front = -1
?
链式队列基于节点 + 指针实现,front
和 rear
是指向节点的引用 / 指针(而非整数下标)。
- 指针的核心作用是 “指向内存中的某个节点”,当没有节点可指向时,指针的标准值是
NULL
(C/C++)、None
(Python)或 null
(Java),表示 “空指针”;
- 若给链式队列的
front
赋值 -1
,会出现类型矛盾(指针无法存储整数),逻辑上也无法表示 “无指向”。
核心区分点在于 “标识类型与存储结构匹配”:
因此,“front=-1 且 rear=NULL” 这种混合模式,在任何队列实现中都不成立。