1 #include"head.h"
 2 struct Student* insert(struct Student*head, struct Student*addinfo)
 3 {
 4     struct Student *p0, *p1, *p2;  //开辟三个结构体指针
 5     p2=p1 = head;   //头指针赋给p1,p2
 6     p0 = addinfo;  //把 增加信息的指针赋给p0,习惯不用原来指针
 7     if (head == NULL)
 8     {
 9         head = p0  //如果原来链表是空的,直接把新节点赋给头指针
10         p0 ->next = NULL;  //链表结束标志
11     }
12     else
13     {
14         while ((strcmp(p0->nun, p1->nun) > 0) && (p1->next != NULL))//循环终止条件是
15                                  // p0->nun<p1->nun,或者搜到链表最后一个元素了
16         {
17             p2 = p1;
18             p1 = p1->next;    //循环中若,没找到,则指针往后移一位
19         }
20         if ((strcmp(p0->nun, p1->nun) <=0))       //找到插入位置,介于p2~p1之间
21         {
22             if (p1 == head) head =p0;    //若插在第一位,把p0赋给头指针
23             else p2->next = p0;//若是中间,则把p0赋给p2->next
24                 p0->next = p1;        //两种情况后,把    后指针p1赋给p0->next,链接起来
25         }
26         else      //没找到,说明插入的序号最大,只需插在原来链表最后就行
27         {
28             p1->next =p0;//此时p1移到指向最后一个元素
29             p0->next = NULL;
30         }
31     }
32     n++;
33     return head;
34 }

 

posted on 2016-12-23 22:15  新爱代  阅读(737)  评论(0编辑  收藏  举报