阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。 [说明1] L为一个带头结点的循环链表。函数LinkList deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于C的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。 [C函数1] LinkList deletenode(LinkList L,int c) {LinkList Lc,P,pre; pre=L; p= (1) ; Lc=(LinkList)malloc(sizeof(Listnode)); Lc->next=Lc; while(P!=L) if(p->data>C){ (2) ; (3) ; Lc->next=p; p=pre->next; } else{ pre=p; p=pre->next; } return Lc; } [说明2] 递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成进制数,并打印。 [C函数2] dec to k 2(int n,int k) { if(n!=O){ dec to k 2( (4) ,k); printf("%d", (5) ); } }
参考答案:pre->next或L->next (2) pre->neXt=p->next (3) p->next=Lc->next
解析:(4) n/k (5) n%k 函数1是考察链表的删除和插入的操作。(1)空所在语句是对指针P赋初值,应填“pre->next”或“L->next”,通过下面的程序可以判断指针pre所指的结点是指针p所指结点前驱结点。(2)、(3)空所在的语句块是处理当指针p所指的结点是一个大于C的结点,则将该结点从链表L中删除,再将它插入到链表Lc中。分别填“pre->next=p->next”和“p->next=-Lc->next” 。 函数2是一个递归函数,采用除k取余法。最开始得到余数作为k进制数的最低位,最后得到的余数作为k进制数的最高位。用递归法求解时,先将n/k转换成k进制,再输出n%k。因此(4)填“n/k”,(5)填“n%k”。