前言
队列是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行。特点是先进先出。
队列抽象数据类型
其中,像队列中插入元素的过程称为入队(enqueue),删除元素的过程称为出队(dequeue),允许入队的一端称为队尾(rear),允许出队的一头称为对头(front),没有元素的队列称为空队列
顺序队列
顺序队列使用数组存储数据元素
1.当队列空时,设置队头、队尾下标front=rear=-1,
2.当第一个元素入队时,front=rear=0,同时改变两个下标
3.进行入队、出队操作,front、rear随之变化
4.当入队的元素个数(包括已出队元素)超出数组容量时,rear下标越界,数据溢出,但是,由于之前已有若干元素出队,数组前部以空出许多存储单元,所以这种溢出并不是因为存储空间不够而产生的,称为假溢出
所以顺序队列有两个缺点:假溢出和存储单元没有重复使用机制
顺序循环队列
相比较顺序队列,有如下不同
1.队头、队尾元素按照如下循环规律变化,其中length表示数组长度
front=(front+1)%length;
rear=(rear+1)%length;
所以可以看出front和rear的取值范围为0~length-1;
2.约定rear是下一个入队元素位置,队列空条件是front==rear,即入队只改变rear,出队只改变front
3.约定队列满条件是队列中仍然有一个空位置,即front==(rear+1)%length,
|
|
链式队列
以不带头结点的单链表实现链式队列,设指针front和rear分别指向队头和队尾结点,初始空队列的状态设置为front=rear=null;队列空条件是front==null&&rear==null
|
|