队列的定义及基本运算
来源:互联网 发布:西门子s7200编程电缆 编辑:程序博客网 时间:2024/05/17 01:43
队列的定义及基本运算
1、定义
(1)允许删除的一端称为队头(Front)。
(2)允许插入的一端称为队尾(Rear)。
(3)当队列中没有元素时称为空队列。
(4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。
【例】在队列中依次加入元素a1,a2,…,an之后,a1是队头元素,an是队尾元素。退出队列的次序只能是a1,a2,…,an。
2、队列的基本逻辑运算
(1)InitQueue(Q)
(2)QueueEmpty(Q)
(3) QueueFull(Q)
(4) EnQueue(Q,x)
(5) DeQueue(Q)
(6) QueueFront(Q)
顺序队列
(2) 顺序队列的表示
①和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素。
②由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置,它们的初值在队列初始化时均应置为0。
(3)顺序队列的基本操作
①入队时:将新元素插入rear所指的位置,然后将rear加1。
②出队时:删去front所指的元素,然后将front加1并返回被删元素。
(4)顺序队列中的溢出现象
① "下溢"现象
② "真上溢"现象
③ "假上溢"现象
由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为"假上溢"现象。
【例】假设下述操作序列作用在初始为空的顺序队列上:
2、循环队列
(1)循环队列的基本操作
①方法一:
②方法二--利用"模运算"
(2)循环队列边界条件处理
①另设一布尔变量以区别队列的空和满;
②少用一个元素的空间。约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满(注意:rear所指的单元始终为空);
③使用一个计数器记录队列中元素的总数(即队列长度)。
(3)循环队列的类型定义
(4)循环队列的基本运算
用第三种方法,循环队列的六种基本运算:
①置队空
②判队空
③判队满
intQueueFull(CirQueue *Q)
④入队
voidEnQueue(CirQueuq *Q,DataType x)
⑤出队
DataTypeDeQueue(CirQueue *Q)
⑥取队头元素
DataTypeQueueFront(CirQueue *Q)
链队列
1、 链队列的定义
2、 链队列的结构类型说明
3、 链队列的基本运算
(1) 置空队
(2) 判队空
(3)入队
(4) 出队