C语言:有序递增链表的插入问题。

//已建立一个带头节点的单向链表,链表中的各结点按结点数据域中的数据递增有序连接。fun函数:把形参x的值放入一个新结点并插入链表中,使插入的各个数据域的数据仍保持递增有序。

 1 #include    <stdio.h>
 2 #include    <stdlib.h>
 3 #define    N    8
 4 typedef  struct list
 5 {  int  data;
 6    struct list  *next;
 7 } SLIST;
 8 void fun( SLIST  *h, int  x)
 9 {  SLIST  *p, *q, *s;
10    s=(SLIST *)malloc(sizeof(SLIST));//申请内存
11 /**********found**********/
12    s->data=x;
13    q=h;
14    p=h->next;
15    while(p!=NULL && x>p->data) {
16 /**********found**********/
17       q=p;
18       p=p->next;往后遍历,直到x的大小合适
19    }
20    s->next=p;//插入操作,在q和p之间插入s
21 /**********found**********/
22    q->next=s;
23 }
24 SLIST *creatlist(int  *a)
25 {  SLIST  *h,*p,*q;      int  i;
26    h=p=(SLIST *)malloc(sizeof(SLIST));
27    for(i=0; i<N; i++)
28    {  q=(SLIST *)malloc(sizeof(SLIST));
29       q->data=a[i];  p->next=q;  p=q;
30    }
31    p->next=0;
32    return  h;
33 }
34 void outlist(SLIST  *h)
35 {  SLIST  *p;
36    p=h->next;
37    if (p==NULL)  printf("\nThe list is NULL!\n");
38    else
39    {   printf("\nHead");
40        do { printf("->%d",p->data);  p=p->next;  } while(p!=NULL);
41        printf("->End\n");
42    }
43 }
44 void main()
45 {  SLIST  *head;      int  x;
46    int  a[N]={11,12,15,18,19,22,25,29};
47    head=creatlist(a);
48    printf("\nThe list before inserting:\n");  outlist(head);
49    printf("\nEnter a number :  ");  scanf("%d",&x);
50    fun(head,x);
51    printf("\nThe list after inserting:\n");  outlist(head);
52 }

 

posted @ 2019-03-12 16:43  小大大小  阅读(1869)  评论(0编辑  收藏  举报