牛骨文教育服务平台(让学习变的简单)

队列的具体应用:

 所有和事件有关的操作都有队列的影子。

(例如操作系统认为先进来的先处理)

定义:

一种可是实现“先进先出”的存储结构

分类:

链式队列:用链表实现

 

静态队列:用数组实现

静态队列通常都必须是循环队列,为了减少内存浪费。

循环队列 :

1、静态队列为什么必须是循环队列

如果用传统意义的数组实现队列,无论入队还是出队,rear和front指针只能+不能-;

比 F元素下标小的的数组元素下标就浪费了。

循环队列怎么用呢?

当出现这种情况时,如果仍然需要插入元素,那么f指向下一个位置,即5,r指向下一个位置即0.如图:

那么,我们在插入一个元素“国”,然后再删除中呢?

这就是所谓的循环队列。

2、    循环队列需要几个参数来确定 及其含义

需要2个参数来确定

front
rear

 

3、 循环队列各个参数的含义

2个参数不同场合不同的含义?   

建议初学者先记住,然后慢慢体会

1)队列初始化

front和rear的值都是零,初始化时队列就是空的。

2)队列非空

front代表队列的第一个元素

rear代表了最后一个有效元素的下一个元素

3)队列空

front和rear的值相等,但是不一定是零

4、循环队列入队伪算法讲解

需要判断r是否指向数组最后一个元素。

两步完成:

1)将值存入r所代表的位置

2)将r后移,正确写法是rear = (rear+1)%数组长度

错误写法:rear=rear+1;

 

5、 循环队列出队伪算法讲解

 front = (front+1)% 数组长度

6、 如何判断循环队列是否为空

如果front与rear的值相等,

则队列一定为空

7、 如何判断循环队列是否已满

上图这种情况,如果再插入f,r指向同一个元素。如果这样的话就不能判断队列是空还是满。

所以为了判断循环队列是否已满,有一下两种方式:

1、多增加一个表标识的参数

2、少用一个队列中的元素(才一个,不影响的)

如果r和f紧挨着(r的下一个位置是f),则队列已满

用C语言描述:

If((r+1)%数组长度)==f

  队列已满

Else

  队列不满