ave)//循环条件:当q->next不为空,以及p->aveave实现插入后无需排序
{
p=p->next;//p指针后移
q=q->next;//q指针后移
if(q->next==NULL)//这个判断防止q->next为空时,在执行循环是出现野指针使程序出错
{
p=NULL;//防止出现野指针p
q->next=r;//连接节点
r->next=NULL;//置空r指针域
flag=0;//到达最后一个节点更改flag
break;
}
}
if(flag)//判断是否到达最后一个节点,为真执行该操作
{
r->next=p;
q->next=r;
//实现将r节点插入链表
}
printf("please input singer's num:n");
scanf("%d",&num);
}
}
//删除节点模块
void del(S *head)
{
S *p,*q;//定义指针
int b;//用于输入编号查找删除
p=head;//p记录头节点的地址
q=head->next;//q记录头节点的指针域的地址
printf("input singer's num you want to delete:");
//输入编号
scanf("%d",&b);
while(q!=NULL)//q不为空时执行循环
{
if(q->num==b)//判断是否找到输入的编号
//为真时
{
p->next=q->next;//断开q节点
free(q);//释放q节点neicun
q=NULL; //置空q指针防止出现野指针
}
else
{
//判断为假时
p=p->next;//p指针后移
q=q->next;//q指针后移
}
}
if(p==NULL)//当查找到最后一个节点还未查到要删除的编号时,输出ERROR INPUT
printf("ERROR INPUTn");
}
//查找节点模块
void search(S *head)
{
S *p;//定义指针
int b;//定义b用于输入查找编号
printf("input the singer's num you are searching:");
//输入查找编号
scanf("%d",&b);
p=head->next;
while(p!=NULL)
{
if(p->num==b)//判断是否找到选手编号
{
//为真时,输出信息
printf("%d %s %.2f %.2fn",p->num,p->name,p->sum,p->ave);
break;
}
else
//为假时
p=p->next;//指针后移
}
if(p==NULL)//查找到最后一个节点还未查到要的编号时,输出ERROR INPUT
printf("ERROR INPUTn");
}
//排序节点模块
//采用冒泡排序,交换节点
void sort(S *head)
{
S *p,*pre,*temp,*tail;
tail = NULL;
// 算法的核心部分,节点交换
while( head->next != tail ){
pre= head;
p = head->next;
while( p->next != tail ){
if( p->ave > p->next->ave ){
temp = p->next;
pre->next = p->next;
p->next = p->next->next;
pre->next->next = p;
p = temp;
}
// 节点后移
p = p->next;
pre= pre->next;
}
tail = p;
}
}
//输出链表模块
void print(S *head)
{
int i;
S *p=head->next;
while(p)//当p不为空的时候执行
{
printf("%d %s %.2f %.2fn",p->num,p->name,p->sum,p->ave);
for(i=0;i<10;i++)
printf("%.2f ",p->grade[i]);
printf("n");
p=p->next;//指针后移
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持无名。