1.队列是什么?
队列是一种先进先出(First In First Out)的线性表,允许插入的一端是队尾,允许删除的一段是队头。
2.队列和栈都是线性表,他们之间的不同?
队列是先进先出,而栈是先进后出。
3.队列的“假溢出”是什么?
假设这个队列的总个数不超过5个,照目前这个情况,继续入队的的话,因为最后一个元素已经被占用,再加,会产生数组越界的错误。而实际上,此队列在下标为0和1的地方是空的。这种现象称为“假溢出”。
4.“假溢出”的解决方法
使用循环队列,也就是头尾相接的循环。后面满了,就从头开始。
5.判断队列是否满的条件?
(rear + 1)%QueneSize == front
6.计算队列长度的公式
Length = (rear - front + QueneSize)%QueneSize
7.循环队列的顺序存储结构代码
typedef int DataType;
struct quene
{
DataType data[MAXSIZE];
int front; //头指针
int rear; //尾指针
}
typedef struct quene Quene;
8.循环队列的初始化
#include <stdio.h>
#define SUCCESS 100
#define FAILURE 101
#define MAXSIZE 10
typedef int DataType;
struct quene
{
DataType data[MAXSIZE];
int front; //头指针
int rear; //尾指针
};
typedef struct quene Quene;
int InitQuene(Quene *s)
{
s->front = 0;
s->rear = 0;
return SUCCESS;
}
int main()
{
int ret;
Quene quene;
ret = InitQuene(&quene);
if(FAILURE == ret)
{
printf("Init Failure!\n");
}
else
{
printf("Init Success!\n");
}
return 0;
}
9.循环队列求队列长度
int LengthQuene(Quene s)
{
return (s.rear -s.front + MAXSIZE)%MAXSIZE;
}
printf("The lenth of quene is %d\n",LengthQuene(quene));
10.链队列
队头指针指向链队列的头结点,而队尾指针指向终端结点。