阅读以下说明和C函数,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。

admin2022-08-02  43

问题 阅读以下说明和C函数,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。【说明】已知单链表L含有头结点,且结点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删结点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。例如,某单链表如图4-1所示。若令minK为20、maxK为50,则删除后的链表如图4-2所示。图4-1图4-2链表结点类型定义如下:typedef struct Node{int data;struct Node *next;}Node, *LinkList;【C函数】int DeleteList (LinkList L, int minK, int maxK){  /*在含头结点的单链表L中删除大于minK且小于maxK的元素*/     (1)   *q = L, *p = L->next;  /*p指向第一个元素节点*/    int delTag = 0;     while ( p )       if  ( p->data <= minK )       { q = p;  p =   (2)  ;  }       else     if ( p->data < maxK )  {  /*找到删除满足条件的节点*/  q->next =   (3)  ;   free(p);  p =   (4)  ;  delTag = 1;    }     else  break;   if (   (5)   )  return -1;    return 0;}

选项

答案

解析 (1)Node
(2)p->next
(3)p->next
(4)q->next
(5)!delTag,或delTag==0,或delTag!=1

函数DeleteList(LinkList L,int mink,int maxK)的功能是在L在含头结点的单链表L中删除大于minK且小于maxK的元素,因此除了头指针L意外,至少还需要两个临时指针,一个用于遍历链表中的元素,另外一个用于删除结点时重新链接结点,p和q就起这样的作用。
空(1)处用于定义指针变量p和q,由于p和q之前已经有“*”,因此,应填入“Node”,若填入“LinkList”,则p和q为指向指针变量的指针变量,伺候对它们的使用方式就不正确了。
  由于链表中的元素已经按照顺序排列,所以在第一个大于minK的元素之前都可以令指针一直沿着指针链后移,即“q=p; p=p->next”,直到p指向第一个大于minK的元素结点为止,在此过程中,q始终指向p所指结点的前驱。因此,空(2)处应填入“p->next”.
转载请注明原文地址:https://www.tihaiku.com/congyezige/2427659.html

最新回复(0)