静态队列为什么必须是循环队列
2018-01-15 12:58
513 查看
首先静态队列是基于数组实现的,如果是普通数组,规定font指向第一个元素的位置,rear指向最后一个元素位置的下一个位置
假设现在进行入队操作,此时 rear(后面)指针往后移动一位;出队则是font向后移动一位,此时会出现一个问题,
就是已经删除的元素所使用的空间无法继续使用;
因为每次入队或者出队都是font或者rear向后移动一位,font指针无法往前移动,此时就会造成删除的空间无法使用!!
到此处应该就想到了另外一种解决方法,循环队列即可解决问题
需要明白以下几个问题
1.静态队列为什么必须要是循环队列?
因为静态队列是基于数组实现的,如果不用循环队列,会导致删除的元素所使用的空间无法继续使用,造成空间的浪费
2.循环队列需要几个参数来确定?以及各个参数的含义
需要2个参数,第一个参数是front(前面),第二个参数是rear(后面);
2个参数在不同的场合下有不同的含义
1.队列初始化
front和rear的值都为0;
2.队列非空
front代表队列的第一个元素,
rear代表队列的最后一个有效元素的下一个元素
3. 队列空
front和rear的值相等,但是不一定是0;因为是循环队列;
3. 循环队列入队伪算法
两步完成:
1
.将值存入rear代表的位置
2.将
rear的值变成(rear+1)%数组的长度 (这样就可以循环)
4.循环队列出队伪算法
将front的值变成(front+1)%数组的长度
5.如何判断循环队列是否是空?
如果front和rear的值相等,队列为空
6.如何判断循环队列是否已满?
预备知识
front的值可能比rear的值大,也可能小,也可能相等
两种方式
1.
多增加一个标识参数,用于表示元素的个数,这种不常用,因为要多维护一个参数
2.
少放一个元素(假设有6个元素,放5个就规定满了)
条件
当(rear+1)%数组的长度=front时,队列就满了
假设现在进行入队操作,此时 rear(后面)指针往后移动一位;出队则是font向后移动一位,此时会出现一个问题,
就是已经删除的元素所使用的空间无法继续使用;
因为每次入队或者出队都是font或者rear向后移动一位,font指针无法往前移动,此时就会造成删除的空间无法使用!!
到此处应该就想到了另外一种解决方法,循环队列即可解决问题
需要明白以下几个问题
1.静态队列为什么必须要是循环队列?
因为静态队列是基于数组实现的,如果不用循环队列,会导致删除的元素所使用的空间无法继续使用,造成空间的浪费
2.循环队列需要几个参数来确定?以及各个参数的含义
需要2个参数,第一个参数是front(前面),第二个参数是rear(后面);
2个参数在不同的场合下有不同的含义
1.队列初始化
front和rear的值都为0;
2.队列非空
front代表队列的第一个元素,
rear代表队列的最后一个有效元素的下一个元素
3. 队列空
front和rear的值相等,但是不一定是0;因为是循环队列;
3. 循环队列入队伪算法
两步完成:
1
.将值存入rear代表的位置
2.将
rear的值变成(rear+1)%数组的长度 (这样就可以循环)
4.循环队列出队伪算法
将front的值变成(front+1)%数组的长度
5.如何判断循环队列是否是空?
如果front和rear的值相等,队列为空
6.如何判断循环队列是否已满?
预备知识
front的值可能比rear的值大,也可能小,也可能相等
两种方式
1.
多增加一个标识参数,用于表示元素的个数,这种不常用,因为要多维护一个参数
2.
少放一个元素(假设有6个元素,放5个就规定满了)
条件
当(rear+1)%数组的长度=front时,队列就满了
相关文章推荐
- 为什么类中的线程函数必须要声明静态?
- 【郝斌数据结构自学笔记】53-56_一个函数为什么可以自己调用自己_递归必须满足三个条件_循环和递归的比较
- 在java中为什么main方法必须是静态的解释
- 为什么类中的线程函数必须要声明静态?
- 实现循环队列为什么要使用一个空的数据位
- 数据结构基础(5)--队列和循环队列详解--静态方式
- 为什么类中的线程函数必须要声明静态
- 为什么静态成员必须在类外初始化
- 为什么类中的线程函数必须要声明静态?
- 数据结构基础(5)--C语言实现循环队列--静态
- 拷贝构造函数的参数为什么必须使用引用类型——避免拷贝死循环
- Java 中,为什么在静态方法中可以调用的方法、可以使用的成员变量必须是静态的?
- 类中的线程函数为什么必须是静态的
- c语言数组方式实现静态循环队列
- 3.4.3 循环队列之静态存储空间(2)
- 为什么循环队列具有先天的并行性
- 为什么静态成员必须在类外初始化
- C#重载运算符必须静态吗? 为什么必须是静态的?
- 静态函数 静态数据成员与静态成员函数 为什么虚函数必须是非静态成员函数 构造函数能为static吗?
- 为什么静态成员必须在类外初始化