题目详情

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

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

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

函数dequeue(queue*q,KeyType*elem)的功能使将非空队列的队头元素出队(从队列中删除),并通过参数带回刚出队的元素。

用单向循环链表表示的队列如下图所示。

初级程序员,章节练习,基础复习,案例分析

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

初级程序员,章节练习,基础复习,案例分析

初级程序员,章节练习,基础复习,案例分析

正确答案及解析

正确答案
解析

(1)q->rear->next=p

(2)q->rear=p

(3)q->rear→next

(4)p->next

(5)q->rear==p或p->next==p或q->size==1

解析:本题考察C语言指针与链表的知识,为入队列和删除队列问题。

(1)对于入队列,当队列q不为空时,p的队尾元素要指向原q的队尾指向的元素,而原q队尾指向的元素应指向p,故(1)处应填q->rear->next=p。

(2)当队列q为空时,插入p元素,则p的队尾指向p自身,即:p->next=p,且整个队列q的队尾也是p,故(2)处应填q->rear=p。

(3)对于队列删除元素p,先判断q是否为空,为空队列则返回错误;否则,应当令p指向队头元素结点,队头元素结点可用q->rear->next表示,因此(3)填q->rear->next。

(4)此时,p转化为头结点,p出列,则需要q的队尾指向p的下一个元素,因此(4)中应填p->next。

(5)最后,判断被删除的队头结点是否是队列中的唯一结点,可采用:q->rear==p或p->next==p或q->size==1等表示方法,故(5)中应填q->rear==p或p->next==p或q->size==1。

你可能感兴趣的试题

单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.0
  • B.1
  • C.2
  • D.3
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.1、1
  • B.1、2
  • C.2、2
  • D.2、3
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.3
  • B.4
  • C.5
  • D.6
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.V(S3)和V(S5)V(S6)
  • B.P(S3)和V(S5)V(S6)
  • C.V(S3)和P(S5)P(S6)
  • D.P(S3)和P(S5)P(S6)
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.243ms
  • B.246ms
  • C.254ms
  • D.280ms
查看答案

相关题库更多 +