#include<stdio.h>
struct student { //建立结构体变量struct student
long num;
float score;
struct student *next
};
int n;
struct student *insert(struct student *head, struct student *stud) //函数的参数是head和stud,head是为了指向表头,
//stud目的是将待插入结点的地址从实参传给stud
{
struct student *p1;
struct student *p2;
struct student *p0; //定义三个结构体变量,其中p0为带插入点的地址
p1 = head;
p0 = stud;
if(head==NULL){ //原链表为空,即原来无结点,只需让head直接等于p0
head = p0; //并且让p0的next指向空地址,即只含一个结点
p0->next = NULL;
}
else { //若链表不为空,则分为两种情况
while ((p0->num > p1->num) && p1->next != NULL) //其中一种情况是插入的结点既不在第一个,也不在最后一个,即插入的点在中间
{ //让p2等于p1,且让p1指向下一个结点
p2 = p1; //一直找到p0小于等于p1为止,即p0需在p1的前面
p1 = p1->next;
}
if (p0->num <= p1->num) { //当结点p1前面的情况
if(p1==head) { //判断p1是否是表头,即判断p0是否要插在第一个表头的位置
head == p0; //若是,直接让head=p0
p0->next = p1;
}
else { //p1不是表头,则一定做了while循环,就会有p2的值
p2->next = p0; //则让p0插在p2和p1之间
p0->next = p1;
}
}
else { //插入的结点在表尾的情况
p1->next = p0; //则让p1的next指向p0,p0后面没有结点了,即next指向空地址
p0->next = NULL;
}
n = n + 1; //结点数加1
return(head);
}
}
c语言链表结点的插入
最新推荐文章于 2023-07-19 09:35:48 发布