【数据结构】【在循环链队列中无溢出现象】这句话为什么是错的。。

小白一枚/// 在学习数据结构时候书上有这道题,但是书上和百度上都没有“循环链队列”的解释。

两个弱鸡问题:

1、循环链队列是啥意思?我感觉是尾指针Null那个小尖尖又指回了头结点?

2、求助这句话到底哪儿错了呀?是因为实际内存不够会产生真溢出嘛?

循环链队列在可用的存储空间范围内,一般不会出现丄溢出问题,而不是绝对。

(1)首先理解什么是队列

队列就是一种先进先出的数据结构,比如
5 4 3 2 1
出掉4个,进去6 7 8 9,那么就是
9 8 7 6 5

(2)队列用数组存储存在什么问题
因为队列是单向增长,单向删除的
比如你开一个20个元素的数组,从中间开始
x x x x x x x x 5 4 3 2 1 x x x x x x x
经过一段时间,数组必然向前运动,前面可用的空间越来越少,后面不用的空间越来越多,比如
x x x x 9 8 7 6 5 x x x x x x x x x x x
...
直到
13 12 11 10 x x x x x x x x x x x x x x x x
这种情况下,除非移动数组,否则数组的空间很大(20),队列的内容很少(只有4个),但是就存不下了。

(3)循环队列
记录下队头和队尾,不够的时候绕回来
13 12 11 10 x x x x x x x x x x x x x x x x
再往下,14 15 进去
13 12 11 10 x x x x x x x x x x x x x x x 15 14
...
可能运行一段时间,是这样的
x x x x x 100 99 98 97 x x x x x x x x x x x
只要队列不超过20个,一直能用

(4)循环链队列
循环队列有一个问题,就是数组开好了,20个,那么队列长度就最大20
比如
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
一直进队列,没有出的,这个时候21来了,又不行了,怎么办?用链表

开始
t->h
插入1
t->1->h
插入2
t->2->1->h
插入3
t->3->2->1->h
1出队
t->3->2->h
...
是不是可以任意多少都能行。

至于你说的物理内存不够溢出的情况,因为现在的计算机的内存都是8GB 16GB甚至更多(80亿,160亿个字节),所以近似可以视作是无限多,而不需要考虑。

从队列到循环队列到循环链队列,我说了这么多,只想让你搞清楚一点,就是这种设计,每一次复杂性的增加,都是在解决一个实际问题,而不是凭空人们就来一个循环链队列搞着好玩。

会出现假溢出