当前位置:首页 » 存储配置 » 循环队列的存储空间

循环队列的存储空间

发布时间: 2024-10-02 19:48:45

A. 设循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的操作后,front-1=rear

该循环队列中共rear-front+m=49个元素
所以寻找最大元素最坏情况需要49-1=48次

B. 设循环队列的存储空间为Q(1:35),初始状态为front=rear=35.现经过一系列入队与退队运算后,

答案是0或35。前提条件是:此循环队列的存储空间全部用于存储数据,而没有留出一个存储空间用于判别队满与队空。

在上述循环队列中,当front = rear时,

(1)有可能是队空:先入队15个元素,rear = 15;再出队15个元素,front = 15。

(2)有可能是队满:先入队15个元素,rear = 15;再出队15个元素,front =
15;最后再入队35个元素,rear指针循环一圈后再次等于15。

综上,队列中元素个数为0或35。

但应注意,上述的循环队列由于无法判别队满与队空,导致其产生二义性(即有歧义),可用性降低。因此,改进的方法是少用一个存储空间,即队列最大只存储34个元素,此时可用下列方法区分队满与队空:

(1)队满:(rear + 1)% MaxSize == front

(2)队空:rear == front

C. 循环队列的存储空间为(0:59),初始状态为空,经过一系列正常的入队与退队操作后,front=25

设有一个用数组Q[1..m]表示的环形队列,约定f为当前队头元素在数组中的位置,r为队尾元素的后一位置(按顺时针方向),若队列非空,则计算队列中元素个数的公式应为 (m+r-f)mod m

(60+24-25)mod 60 =59

分析:

 对于顺序队列,头指针和尾指针开始时刻都指向数组的0下标元素。当加入新元素以后,尾指针向后移动,指向最后一个元素的下一个位置。

但是尾指针不能超过数组的最大范围。当有元素删除时,头指针向后移动。但是头指针不能低于数组的0下标。这样就会引入一种“假溢出”现象,

数组中存在空余的空间,但是由于尾指针已经在最大位置,不能加入元素。

    循环队列就可以用来解决 假溢出 问题, 当队列后面的满了,就从头在开始,形成头尾相接的循环. 

    出现的问题:  front=rear即头指针和尾指针相等,但是对应两种情况:一种是队列是空,一种是队列是满。

    所以,我们定义循环队列中空出一个位置为满队列状态。front指向头元素,rear指向尾元素的下一个位置。

    那么循环队列的长度如何计算呢? 

     情况一:  当rear大于front时,循环队列的长度:rear-front

    情况二:  当rear小于front时,循环队列的长度:分为两部分计算 0+rear   和   Quesize-front  ,  将两部分的长度合并到一起即为: rear-front+Quesize

    所以将两种情况合为一种,即为:  总长度是(rear-front+Quesize)%Quesize

热点内容
深宫曲安卓如何下载 发布:2024-10-02 21:54:38 浏览:98
如何给密码门设密码不是指纹锁 发布:2024-10-02 21:36:36 浏览:712
荆门服务器ip 发布:2024-10-02 21:36:35 浏览:975
不常用算法 发布:2024-10-02 21:31:33 浏览:973
如何做数据库备份 发布:2024-10-02 21:26:33 浏览:610
微信缓存如何设置时间设置在哪里设置 发布:2024-10-02 21:12:34 浏览:40
笑傲江湖免费脚本 发布:2024-10-02 20:56:08 浏览:661
c语言switchcase字符 发布:2024-10-02 20:46:08 浏览:461
压缩机操作证 发布:2024-10-02 20:19:56 浏览:24
安卓手机软件怎么开发 发布:2024-10-02 20:14:19 浏览:601