经典指数          
原因
5363
浏览数
0
收藏数
 

下列给定程序中已建立一个带头结点的单向链表,链表中各节点按节点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新节点并插入列表中使插入后各节点数据域中的数据仍保持递增有序。  请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 试题程序。 #include #include #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));     s->data = 1 ;     q = h;     p = h->next;     while (p != NULL && x > p->data)     {         q = 2 ;         p = p->next;     }     s->next = p;     /********** found **********/     q->next = 3 ; } SLIST *crealist(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("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");     oulist(head);     printf("\nEnter a number: "); scanf("%d", &x);     fun(head, x);     printf("\nThe list after intserting:\n");     outlist(head); }

     举报   纠错  
 
切换
1 个答案

1. s->data = x; 

2.q = q->next; 或者 q = p;

3.q->next = s; 

说明:

1.新建了一个结点s,那么把x放入s的data域中. 所以就是s->next = x;

2.记住,单链表中插入一个结点一定要知道插入结点处的前驱结点.所以q,p实际上是构造了一个前(q指针),一个后(p指针)的两个相邻指针,所以

q = p; p = p->next;

 但是因为在前面已经说明了q是指向头结点,而p是指向第一个数据结点,那么此时其实已经使得q,p构成了一前一后的两个相邻指针,所以q也可以按照自己的步伐一步步的走,即q

= q->next;

3.单链表结点插入操作

 
切换
撰写答案