刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

试题四(共 15 分)

阅读以下说明和 C 函数,填补函数中的空缺,将解答填入答题纸的对应栏内。

【说明】

简单队列是符合先进先出规则的数据结构,下面用不含有头结点的单向循环链表表示简单队列。

函数 enqueue(queue *q,KeyType new_elem) 的功能是将元素new_elem 加入队尾。

函数 Dnqueue(queue *q,KeyType *elem)的功能使将非空队列的队头元素出队(从

队列中删除),并通过参数带回刚出队的元素。

用单向循环链表表示的队列如图 4-1 所示。


图 4-1 单向循环链表表示的队列示意图

队列及链表结点等相关类型定义如下:

enum {errOr, OK};

typedef int KeyType;

typedef struct qNode﹛

KeyType data;

Struct qNode*next;

﹜qNode,*Linkqueue;

 

Typedef struct﹛

int size;

Link:queue rear;

}queue;

 

【C 函数】

int enqueue(queue*q,KeyType new_elem)

﹛ //元素 new_elem 入队列

qNode*p;

P=(qNode*)malloc(sizeof(qNode));

if(!p)

return errOr;

P->data=new_elem;

if(q->rear)﹛

P->next=q->rear->next;

();

else

P->next=p;

﹙﹚;

q->size++;

return OK;

 

int Dequeue(queue*q,KeyType*elem)

﹛ //出队列

qNode*p;

if(0==q->size) //是空队列

return errOr;

P=(); //令 p 指向队头元素结点

*elem =p->data;

q->rear->next=(); //将队列元素结点从链表中去除

if(()) //被删除的队头结点是队列中唯一结点

q->rear=NULL //变成空队列

free(p);

q->size--;

return OK;


使用微信搜索喵呜刷题,轻松应对考试!

答案:

(1)Q→rear→next=p

(2)Q→rear=p

(3)Q→rear→next

(4)p→next

(5)Q→rear==p 或 Q→rear→next==p→next 或 Q→size==1 


解析:

对于enqueue函数,当队列不为空时,新元素p的next应该指向原队列的队尾元素的后继节点,即Q→rear→next。同时,为了保证队列的循环性,需要将Q的队尾rear指向新元素p,即Q→rear=p。这样新元素就被正确地插入到了队列的尾部。

对于Dequeue函数,首先判断队列是否为空,如果为空则直接返回错误。如果不为空,则通过Q→rear→next获取队头元素结点p。然后,通过q→rear→next=p→next将队尾的下一个元素指向原来队头元素的下一个节点,从而删除队头元素。最后,判断被删除的队头结点是否是队列中的唯一结点,如果是的话,将队列的队尾设置为空,并释放被删除节点的内存。这一过程可以通过多种方式判断,如Q→rear==p 或 Q→rear→next==p→next 或 Q→size==1等。

创作类型:
原创

本文链接:试题四(共 15 分) 阅读以下说明和 C 函数,填补函数中的空缺,将解答填入答题纸的对应栏内。 【

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share