下列给定程序中,已建立一个带头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数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= (1) ;
q=h;
p=h->next;
while(p!=NULL && x >p->data)
/********** found********** /
q= (2) ;
p=p->next;
s->next=p;
/********** found********** /
q->next= (3) ;
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 inser-
ting: \n");
outlist (head);
printf("\nEnter a number : ");
scanf ("% d", &x);
fun (head, x);
printf (" \nThe list after inser-
ting: \n");
outlist (head);
参考答案:x (2) p (3) s
答案考生文件夹
解析: 本题考查: 链表的基本操作。了解链表的基本思想和相关算法,理解有关链表插入及删除时指针移动的先后顺序问题,注意指针的保存和归位。
[解题思路] 填空1:将形参x赋值给结点的数据域。
填空2和填空3:将新的结点和原有链表中结点进行比较。