预习队列

1.队列是什么?

是一种先进先出的的线性表,只允许一段删除另一端插入,允许删除的一端作为队头。同理另一端允许插入的,称为队尾。

2对队列的数据可以执行的操作有那些?

initqueue,初始化一个队列

destroyqueue,销毁一个队列

clearqueue清空队列

判断操作:

emptyqueue判断表是否为空

gethead 若表非空,则返回队列元素

enqueue插入队列元素到队尾

dequeue删除队头元素,并用e返回其值

queuelength检测队列元素的个数并返回

3循环队列存在的问题?

当队头被删除后的时候,后面的元素都需要往前一步替补队头。

当队列只有一个元素的时候,队头和队尾会重合。

引入font 和rear指针一个指向队头一个指向队尾的下一个位置,入栈时font不移动,始终指向队头,rear依次往后移动。

存在如果在队列满的情况下,不管删除多少元素,只要队尾有元素rear都会指到表外面去。会出现假溢出现象。

4.判读队列是否满的方法?

(rear+1)%最大表长==font,当等式成立则队列已满,否则还有空余。

5.队列的链式结构

在单链表的基础上,加上尾进先出的规则,就是队列的链式结构。

队头指针指向链表头结点,队尾指向终端结点。当队列为空表时,2个指针重合。

6循环队列的程序结构:


typedef int  qelemtype

typedef struct Node

{

   qelemtype data;

struct Node *next;


}结点结构

tydepef struct  linkqueue

{

   queue font, rear;


}链表结构

7:入队操作的实现:

  1.给指针变量分配一个内存空间

  2.将数据e给s->data

  3.将s的后继清空

 4.将拥有e的新结点赋值给队尾后继q-<next

 5将s设为队尾

 6返回一个ok字符的返回值

8 出队操作的实现:

1.先判断表是否为空,删除队头元素返回e。

2将e先给变量p存储,

3将队头结点后继赋给删除后头结点的后继

4如果只剩下一个元素,即font与rear指向同一个空间,则删除后rear和font同时指向队头结点。

9栈与队列的不同

栈只限于表尾进行删除插入操作的线性表

队列一端执行删除,一端执行插入。

10队列的分类

循环队列

顺序队列

链式队列

猜你喜欢

转载自blog.csdn.net/hujiaqi2018/article/details/79276686