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 }