循环队列之循环队列长度和头尾指针关系
2016-09-08 16:36
531 查看
1、为什么会引入循环队列?
对于顺序队列,头指针和尾指针开始时刻都指向数组的0下标元素。当加入新元素以后,尾指针向后移动,指向最后一个元素的下一个位置。
但是尾指针不能超过数组的最大范围。当有元素删除时,头指针向后移动。但是头指针不能低于数组的0下标。这样就会引入一种“假溢出”现象,
数组中存在空余的空间,但是由于尾指针已经在最大位置,不能加入元素。
2、循环队列是什么样的队列?
解决假溢出的方法:后面的满了,就从头在开始,形成头尾相接的循环,即循环队列。
存在的问题:front=rear即头指针和尾指针相等,但是对应两种情况:一种是队列是空,一种是队列是满。
所以,我们定义循环队列中空出一个位置为满队列状态。front指向头元素,rear指向尾元素的下一个位置。
3、循环队列达到队列满时的front和rear关系?
Quesize是队列的长度
(rear+1)%Quesize=front
4、循环队列的长度计算?
当rear大于front时,循环队列的长度:rear-front
当rear小于front时,循环队列的长度:分为两类计算 0+rear和Quesize-front即rear-front+Quesize
总的来说,总长度是(rear-front+Quesize)%Quesize
PS:总结一下,让自己梳理下。
对于顺序队列,头指针和尾指针开始时刻都指向数组的0下标元素。当加入新元素以后,尾指针向后移动,指向最后一个元素的下一个位置。
但是尾指针不能超过数组的最大范围。当有元素删除时,头指针向后移动。但是头指针不能低于数组的0下标。这样就会引入一种“假溢出”现象,
数组中存在空余的空间,但是由于尾指针已经在最大位置,不能加入元素。
2、循环队列是什么样的队列?
解决假溢出的方法:后面的满了,就从头在开始,形成头尾相接的循环,即循环队列。
存在的问题:front=rear即头指针和尾指针相等,但是对应两种情况:一种是队列是空,一种是队列是满。
所以,我们定义循环队列中空出一个位置为满队列状态。front指向头元素,rear指向尾元素的下一个位置。
3、循环队列达到队列满时的front和rear关系?
Quesize是队列的长度
(rear+1)%Quesize=front
4、循环队列的长度计算?
当rear大于front时,循环队列的长度:rear-front
当rear小于front时,循环队列的长度:分为两类计算 0+rear和Quesize-front即rear-front+Quesize
总的来说,总长度是(rear-front+Quesize)%Quesize
PS:总结一下,让自己梳理下。
相关文章推荐
- 【数据结构】循环队列的front,rear指针以及队列满的条件、计算队列长度
- 循环队列的头尾指针----阿里巴巴2015实习生笔试题
- _DataStructure_C_Impl:只有队尾指针的链式循环队列
- 一步一步学数据结构之1--1(队列--单链表实现--含队头尾指针)
- 一步一步学数据结构之1--1(队列--单链表实现--含队头尾指针)
- 设数组data[m]作为循环队列的存储空间。front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为()
- 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。
- 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。
- 设头指针的循环单向队列及其约瑟夫环应用
- 另类循环队列---未实现题目要求,实现了双指针(Front、Rear)
- 关于C数组与指针的关系(主要是长度首地址内容)
- 假设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。试设计相应的入队和出队的算法
- 顺序表(顺序存储)循环队列类(初始化,入队,退队,输出排头与排尾指针及元素)
- 数组实现的队列(限制最大长度)的head、tail指针的修改方法。
- 设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有元素个数为?
- 通过strlen()方法和循环遍历分别获取指针指向的字符串长度
- HW输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列。
- 假设以带头结点的循环链表表示队列, 并且只设一个指针指向队尾元素结点(注意不设头指针) 试编写相应的队列初始化,入队列和出队列的算法
- 可自动增长队列长度的泛型循环队列
- 假设在长度大于1的循环链表中,即无头结点也无头指针,s为指向链表中的某个结点的指针,试编写算法删除结点s的前驱结点