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队列的分类
循环队列
顺序队列
链式队列