首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位
[单选题]
数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为()。
r-f
(n+f-r)% n
n+r-f
(n+r-f)% n
查看答案及解析
添加笔记
求解答(32)
邀请回答
收藏(1154)
分享
15个回答
添加回答
91
未来的搬运工
发表于 2017-11-06 16:31:02
回复(3)
57
牛客013236
长度等于尾指针减去头指针加上总长度然后对总长度取余
发表于 2017-05-10 19:22:48
回复(0)
30
TinyDolphin
如果不是循环队列的话,那就应该是 r - f , 但是如果是循环队列的话,那就算 ( n + r - f ) % n
发表于 2017-08-11 15:35:17
回复(0)
18
__sgf__
关于循环队列的一些计算问题: front为队头、rear为队尾、maxSize为队列的总容量、m为队列中元素的个数: 队空:front = rear 队满:(rear + 1) % maxSize = front 进队:front = (front + 1) % maxSize 出队:rear = (rear + 1) % maxSize 队列中元素的个数 m = (rear - front + maxSize) % maxSize
发表于 2022-01-15 00:03:19
回复(2)
12
69岁拄拐跑路
可以理解为跑圈,r跑的长度是一定要不小于f的,当你看到r在f后面时,同时考虑数组容量问题,说明r已经套了f一圈,计算r比f快多少时,需要把r当前位置加上一圈跑道的长度。
发表于 2023-01-13 10:52:49
回复(0)
7
欧拉木大
r > f 时,应该是A;r < f 时,应该是C。D是一般情况,包含了 r > f 和 r < f 的情况,因此选D。
发表于 2017-06-01 16:13:31
回复(0)
6
牛客小丑C
记住循环队列,队头地址不一定比队尾高或者低的!
发表于 2022-03-06 17:51:49
回复(0)
2
Wg_yh
少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位置上”作为队列“满”状态的标志。即:
队空时: front=rear
队满时: (rear+1)%maxsize=front
(形成一个圆,逆时针为下一位置)
发表于 2017-08-16 09:30:45
回复(1)
1
爱你孤单走暗巷
循环队列长度公式推导
假设MaxSize = 10,根据rear和front的大小共有三种情况,红色代表已存储数据,绿色代表空间还未被占用
1.Q.rear > Q.front如图所示
Q.front=0, Q.rear=4,则队列中的元素个数为上图中红色部分区域,即长度等于Q.rear - Q.front= 5-0=5
2.Q.rear = Q.front
因为Q.rear一定指向空单元所以总长度为Q.rear - Q.front = 0
3.Q.rear < Q.front
如图所示Q.front=7 , Q.rear = 2,存储数据的单元为Q[7],Q[8],Q[9],Q[0],Q[1]
红色部分为已填充数据此时列表的长度就是上图中两段红色部分相加即
列表长度=MaxSize - Q.front + Q.rear
变换一下:列表长度 = Q.rear - Q.front +MaxSize
第三种情况就是在第二种情况的基础之上加MaxSize,根据数学取余的性质
(x + ky) % y = x所以循环队列的长度公式可以写成:
L = (Q.rear - Q.front + MaxSize) % MaxSize
发表于 2024-06-05 23:55:11
回复(0)
1
傅先生201904081648730
王道p74
队满条件:(Q.rear+1)%MaxSize==Q.front
队空条件: Q.front==Q.rear
队列中元素的个数:(Q.rear-Q.front+MaxSize)%MaxSize
发表于 2022-08-15 15:40:48
回复(0)
0
Tudorlin
说点能听懂的吧,因为是循环队列,所以头指针的位置不一定比尾指针的位置低,两者相减有可能会出现负数的情况,所以需要做一个取模的操作防止出现负数
发表于 2024-01-14 15:51:13
回复(0)
0
long11.
循环队列元素个数=(总长度+尾-头)%总长度
编辑于 2023-12-12 16:56:31
回复(0)
0
一锅端攻城狮
为什么会出现访问数组越界而报错,说明数组在编译的时候已经确定了大小,如果你觉得因为push可以向数组里添加元素,觉得是可以改变的,那么你就错了,push他有一句话是返回新数组,那么就是原来那个数组不用了,我再重新生成一个新规定的数组,再补充一点为什么数组的查询速度比链表的查询速度要快,大家可能以为时间复杂度都是O(n),但其实不然,实际上数组的查询速度是比链表要快的,为什么呢?这就涉及到cpu与内存之间的关系了,大家在工作中最常听的一句话就是拿到内存中去处理,而不是频繁的与硬盘进行IO上的交互,与这个道理类似,因为CPU在缓存上的处理速度要比在内存上快,同时缓存中只能存储内存地址连续的元素,因为数组在内存中数据地址是连续的,所以CPU可以直接在缓存中处理数组,而链表只能在内存中进行处理,效率上会慢一些。
编辑于 2022-06-16 12:35:14
回复(0)
0
牛客589895105号
D
发表于 2021-11-09 11:14:52
回复(0)
0
@小伟Code
什么?_?假如容量为10,但循环队列中现有元素个数为9,即如果f=9,n=10,r=0呢?
发表于 2017-07-14 20:58:36
回复(2)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
数组
队列
上传者:
Letitia
难度:
15条回答
1154收藏
18204浏览
热门推荐
相关试题
请画出在包含 14 个结点的二项堆...
高级算法
评论
(1)
如图 1 表示使用快表(页表)的虚...
编程基础
评论
(1)
对于我们来说,谁是好的顾客?
销售常识
评论
(1)
小红书用户在不同使用场景下,对内容...
需求分析
评论
(1)
订单表order_table全部记...
查找
数据库
数据分析
SQL
评论
(2)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题