- 66
- 0
- 约7.11千字
- 约 67页
- 2021-11-03 发布于湖北
- 举报
在循环队列中出队的算法为 DELQUEUE(queue,r,f,out) /* 在循环队列queue中退出一个元素送out */ { if(f==r) { printf(队空); } else { f=(f+1)%n; out=queue[f]; } } 例4.2 设有一个有序线性表A(n)和循环队列Q(m),设计一个算法,使得在线性表中比关键字KEY大的数据送到循环队列中。设队列Q中的逻辑地址为1~m,F为队首指针,R为队尾指针。 分析 由于线性表A是有序的,因此只需确定在线性表A中比KEY大的值的序号i(地址),然后从i开始直到n逐个地把线性表中的数据送入循环队列。当然,下面的情况也应考虑在内:若线性表A所有的值均比KEY小,则不必把数据送入队列;也有可能在进队过程中,循环队列的存储空间不够(队满),产生溢出而出错,最后还要修正线性表的表长。图4-8给出了算法的流程框图。 算法描述如下: LIST_QUEUE(a,q,r,f,key) /* 在有序线性表a[1:n]中把比关键字值key大的数值送到循环队列q[1:m]中,其中r和f分别 是队首指针和队尾指针 */ { for(i=1; i=n; i++) if(a[i]key)break; /* 在线性表中找比key值大的值的位置 */ if(i=n)
原创力文档

文档评论(0)