链表的有序插入法创建

链表的有序插入法创建 func.h

#include #include #include typedef struct student{ int num; //新来的学生 struct student *pNext; }stu,*pstu; void list_sort_insert(pstu *,pstu *,int); void list_print(pstu);

func.c
#include "func.h"//有序插入法新建链表 void list_sort_insert(pstu * pphead,pstu * pptail,int i){ //定义一个pnew空间 pstu pnew; //反复使用*pphead,定义指针pcur; pstu pcur,ppre; pcur=*pphead; ppre=*pphead; //calloc不仅申请空间并且把空间都初始化为0,参数绝对不为0 //相当于malloc+memset pnew=(pstu)calloc(1,sizeof(stu)); pnew->num=i; //判断链表是否为空 if(NULL==*pphead){ //把新节点赋值给头指针 *pphead=pnew; //把新节点赋值给尾指针 *pptail=pnew; //如果插入到头,采用头插法 }else if(pcur->num>i){ //原有的头指针赋值给新节点的pNext pnew->pNext=*pphead; //新节点变为头指针 *pphead=pnew; }else{ //插入到中间 while(pcur!=NULL) { if(pcur->num>i) { ppre->pNext=pnew; pnew->pNext=pcur; break; } //先ppre记住pcur ppre=pcur; pcur=pcur->pNext; } //节点插入到尾部 if(NULL==pcur) { //使用尾插法 ppre->pNext=pnew; *pptail=pnew; } } }//链表打印 void list_print(pstu phead) { //遍历链表 while(NULL!=phead) { printf("%3d",phead->num); phead=phead->pNext; } printf("\n"); }

【链表的有序插入法创建】main.c
#include "func.h"int main() { //头指针,尾指针 pstu phead=NULL,ptail=NULL; int i; //代表学号 while(scanf("%d",&i)!=EOF) { //把i放到链表内,链表多一个节点 参数:取地址 list_sort_insert(&phead,&ptail,i); } //phead 是值传递,不会改变原本的 list_print(phead); system("pause"); }

    推荐阅读