给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得

admin2017-02-27  18

问题 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
    不得增行或删行,也不得更改程序的结构!
#include  
#include
#define N 8
typedef struct list
{  i____nt data;
  struct list *next;
} SLIST;
void fun (SLIST  *h, irit X)
{SLIST *p,*q,*s;
     s= (SLIST  *) malloc (sizeof (SLIST)) ;
  s—>data=   ____1____ ;
q=h;
       p=h— >next;
    while (p ! =NULL  &&  x>p—>data)   {
    q=____2____;
p=p—>next;
        }
s—>next=p;
  q—>next=____3____;
}
SLIST  *creatlist (int  *a)
{SLIST *h,*p,*q; int i;
      h=p= (SLIST *) malloc (sizeof (SLIST)) ;
      { q= (SLIST *) malloc (sizeof (SLIST)) ;
        q—>data=a ; p—>next=q; p=q;
        }
p—>next=0;
  return h;
}
void outlist (SLIST *h)
{SLIST *p;
       p=h—>next ;
  if (p==NULL) printf("\nThe list
is  NULL ! \n") ;
else
    {   printf ("\nHead") ;
          do {   printf ("—>%d" f p—>data) ;
p=p—>next; }  while (p ! =NULL) ;
            printf ( "—>End\n") ;
        }
}
main { }
{SLIST *head; int x;
int a [N] ={ 11,12,15,18 f 19,22,25, 29};
   head=creatlist (a) ;
      printf ( "\nThe list before inserting:
\n") ;  outlist (head) ;
  printf("\nEnter a number : ");
    fun (headf x) ;
    printf ("\nThe list after inserting:
\n") ;  outlist (head) ;
}

选项

答案(1)x (2)p (3)s

解析 函数fun的功能是把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。利用循环搜索链表,找到插入位置,将新结点插入到链表当中。
第一空:“s=(SLIST *)ma11oc(sizeof(SLIST)); ”显然s是一个新结点,第一空处是给新结点的数据域赋值x,因此第一空处应该是“s—>data=x; ”。
第二空:循环“while(p! =NULL&&x>p—>data)”是用来寻找插入位置,当链表没有结束且x仍然大于p所指向的结点的数据时,就不断的向链表后面搜索。在循环体内,语句“p=p—>next; ”是找到下一个结点的地址,变量q用来保存当前结点的地址,因此第二空处应该是“q=p; ”。
第三空:“s—>next=p; ”将s插入链表当中,s指向p,此时s结点已经指向需要插入位置的下一个节点,因此在需要插入s结点的位置的上一个结点需要指向s结点,故第三处应该为“q—>next=s; ”。
转载请注明原文地址:https://kaotiyun.com/show/XrID777K
0

相关试题推荐
最新回复(0)