1. 队列的定义是什么?
答:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
2. 队列有哪些性质?
答:队列是一种先进先出的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。
3. 常见的队列操作有哪些?
答:创建队列,销毁队列,清空队列,进队列,出队列,获取队头元素,获取队列长度等。
4. 队列的抽象数据类型有哪些?
答:(1)初始化操作,建立一个空队列Q;(2)若队列存在,则销毁它; (3)将队列清空;(4)若队列Q为空,返回true,否则返回false;(5)若队列Q存在且非空,用e返回队列Q的队头元素;(6)若队列Q存在,插入新元素e到队列Q中,并成功称为队尾元素;(7)删除队列Q中队头元素,并用e返回其值;(8)返回队列Q的元素个数;
5. 队列顺序存储的不足之处?
答:当队列元素出列时,出列元素是队头,也就意味着,队列中的所有元素都要向前移动,以保证队列的队头不为空。而入队列的时候还有可能出现假溢出的现象。
6. 循环队列
答:把头尾相接的顺序存储结构称为循环队列。
相关代码:
初始化一个空队列Q:
int InitQueue(SqQueue *Q)
{
Q->front = 0;
Q->rear = 0;
return OK;
}
求队列长度:
int QueueLength(SqQueue Q)
{
return (Q.rear -Q.front+MAXSIZE)%MAXSIZE;
}
循环队列的入队列:
int EnQueue(SqQueue *Q, int e)
{
if((Q->rear+1)%MAXSIZE ==Q->front)
return ERROR;
Q->data[Q->rear] = e;
Q->rear=(Q->rear+1)%MAXSIZE;
return OK;
}
循环队列的出队列:
int DeQueue(SqQueue *Q, int *e)
{
if(Q->rear==Q->front)
return ERROR;
*e=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return OK;
}