给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生

admin2019-03-06  33

问题 给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
    不得增行或删行,也不得更改程序的结构!
1  #include<stdio.h>
2  #include<Stdlib.h>
3  #define N 8
4  typedef struct list
5  { int data;
6  struct 1ist *next;
7  } SLIST;
8  void fun(SLIST *p)
9  { SLIST *t,*e;
10  t=p->next;s=p;
11  while(t->next!=NULL)
12  {  s=t;
13  /**********found**********/
14  t=t->___1___;
15  }
16  /**********found**********/
17  printf(’’%d’’,___2____);
18  s->next=NULL;
19  /**********found**********/
20  free( ___3____);
21  }
22  SLIST *creatlist(int *a)
23  {SLIST *h,*p,*q;it i;
24  h=p=(SLIST*)malloc(sizeof(SLIST));
25  for(i=0;i<N;i++)
26  {q=(SLIST *)malloc(sizeof(SLIST));
27  q->data=a;p->next=q;p=q;
28  }
29  p->next=0;
30  return h;
31  }
32  void outlist(SLIST *h)
33  {SLIST *p;
34  p=h->next;
35  if  (p==NULL) printf(’’\nThelist is NULL!\n’’);
36  else
37  { printf(’’\nnead’’);
38  do {printf(’’->%d’’,p->data);p=p->next;} while(p!=NULL);
39  printf(’’->End\n’’);
40    }
41  }
42  main()
43  {SLIST *head;
44  int  a[N]={11,12,15,18,19,22,25,29};
45  head=creatlist(a);
46  printf(’’\nOutput from head:\n’’);outlist(head);
47  printf(’’\nOutput from tail:\n’’);
48  while(head->next!=NULL) {
49  fun(head);
50   printf(’’\n\n’’);
51   printf(’’\nOutput from head again:\n’’);outlist Ihead);
52    }
53  }

选项

答案(1)next (2)t->data (3)t

解析 fun函数的功能是输出链表尾部结点中的数据,并释放该结点,使链表缩短。由于链表是单向的,找到链表尾部结点需要利用循环从头结点开始查找,直至找到最后一个,找到之后输出尾部结点的数据,然后删除尾结点。
    第一空:fun函数中的循环目的是找到尾结点“while(t->next!=NULL)”,利用结点变量s和t,s指向当前节点,t不断指向下一个结点,因此,第一空处应该是“t=t->next;”。第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点t,t的数据是t->data,因此,第二空处应该为“printf(’’%d’’,t->data),”。第三空输出尾结点数据之后删除尾结点,使用free,又因为尾结点是t,因此,第三空处应该为“flee(t);”。
转载请注明原文地址:https://kaotiyun.com/show/cIRp777K
0

最新回复(0)