作业帮 > 数学 > 作业

数据结构基础问题出队 void DeQueue(QUEUE*Q,QueueEntry *item){if (QueueE

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:数学作业 时间:2024/05/28 13:52:08
数据结构基础问题
出队
void DeQueue(QUEUE*Q,QueueEntry *item)
{
if (QueueEmpty(*Q)) exit(“Queue is empty.”);
else {
Q->front=(Q->front+1)%MAX_QUEUE;
*item=Q->item[Q->front];
}
}
中Q->front=(Q->front+1)%MAX_QUEUE 为什么他可以使队头元素删除?
数据结构基础问题出队 void DeQueue(QUEUE*Q,QueueEntry *item){if (QueueE
把队列想像成一个环形的结构,这样就不会造成假溢出(Q->rear=Maxsize,而Q->front!=0,数组在0到Q->front这段下标里面还可以存数据),想像成一个环形的结构,那么Q->front自增1就不是Q->front=(Q->front+1)了,因为我们要当Q->front=Maxsize的时候再加1就要变成Q->front=0,所以用取模的方式.Q->front=(Q->front+1)%MAXsize,当Q->front小于MAXsize时,增量是1,当Q->front大于MAXsize时,Q->front从0开始增加
再问: 恩恩,那删除队头元素不应该是Q->front-1吗?为什么是+1?
再答: 队列是:添加元素,rear+1,删除元素,front+1,你画个图看看,这样增加一个和删除一个元素是不是队列的长度rear-front没变啊,看下面这个图,删掉x1之后,front会变成front1,就是加了1