填空题

下列给定程序中,已建立一个带头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入链表中,使插入后备结点数据域中的数据仍保持递增有序。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意 :部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<stdlib.h>
#define N 8
typedef struct list
{int data;
struct list *next;
}SLIST;
void fun(SLIST *h,int x)
{SLIST *p,*q,*s;
s=(SLIST *)malloc(sizeof(SLIST));
/********found********/
s->data=______;
q=h;p=h->next;
while(p!=NULL && x>p->data)
{
/********found********/
q=______;
p=p->next;
}
s->next=p;
/********found********/
q->next=______;
}
SLIST *creatlist(int *a)
{SLIST *h,*p,*q;int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0;i<N;i++)
{q=(SLIST *)malloc(sizeof(SLIST));
q->data=a[i];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",p->data);
p=p->next;
}while(p!=NULL);
printf("->End\n");
}
}
main()
{SLIST *head;int x;
int a[N]={11,12,15,18,19,22,25,29};
head=creatlist(a);
printf("\nThe list before inserting:\n");
outlist(head);
printf("\nEnter a number:");
scanf("%d",&x);
fun(head,x};
printf("\nThe list after inserting:\n");
outlist(head);
}

【参考答案】

x p s [解析] 填空1:将形参x赋值给结点的数据域。
填空2和填空3:将新的结点和原有链表中结点进行比较。