链表的有序插入法创建
链表的有序插入法创建 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");
}
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量