//这是我学C时写的个东西 可能有BUG 我也懒得改
看看对你有没帮助
//动态链表创建排序插入删除
//实现语言C
//平台vc++6.0
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct score
{
int num;
char name[15];
float score_1;
float score_2;
float score_3;
float score_av;
};
struct student
{
struct score objscore;
struct student *next;
};
void paixu();
void chuanjian();
void shuchu();
void shanchu();
struct student *head,*pf,*pb;
int i=0;
void main()
{
char yn='y',ch=' ';
do
{
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃动态链表实现排序插入删除:
T-11 koman ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 请选择您的需要:
┃\n");
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
printf("┃1 、创建或加入学员资料
3、排序,输出
┃\n");
printf("┃2 、按学号删除学员
0 、退
出
┃\n");
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
do{
printf("┠请输入数字: ");
fflush(stdin);
scanf("%d",&ch);
if(ch<0||ch>3)
printf("┠输入错误!\n");
}while(ch<0||ch>3);
if(ch==0)
break;
if(ch==1)
{
chuanjian();
}
else if(ch==3)
{
paixu();
shuchu();
}
else if(ch==2)
{
shanchu();
}
printf("┠■ 是否继续操作(Y/N)? ");
fflush(stdin);
scanf("%c",&yn);
}while(yn=='Y'||yn=='y');
}
void paixu()
//排序
{
struct student *p,*q;
struct score temp;
p=head;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(p->objscore.score_av < q->objscore.score_av)
{
temp=q->objscore;
q->objscore=p->objscore;
p->objscore=temp;
}
q=q->next;
}
p=p->next;
}
}
void chuanjian() //创建||加入学员资料
{
char yn='y';
printf("┣请输入学员信息: \n");
do
{
pb=(struct student*) malloc(sizeof(struct student));
pb->objscore.num=0;
pb->objscore.score_1=0;
pb->objscore.score_2=0;
pb->objscore.score_3=0;
pb->objscore.score_av=0;
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┣学号:");
scanf("%d",&pb->objscore.num);
printf("┣姓名:");
fflush(stdin);
gets(pb->objscore.name);
printf("┣三门成绩:\n");
printf("┣成绩1: ");
scanf("%f",&pb->objscore.score_1);
printf("┣成绩2: ");
scanf("%f",&pb->objscore.score_2);
printf("┣成绩3: ");
scanf("%f",&pb->objscore.score_3);
pb->objscore.score_av=(pb->objscore.score_3+pb->objscore.score_3+pb->objscore.score_3)/3;
if(i==0)
{
pf=head=pb;
}
else
{
pf->next=pb;
}
pf=pb;
pb->next=NULL;
i++;
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┣是否继续(y/n)?");
fflush(stdin);
yn=getchar();
}while(yn=='y'||yn=='Y');
}
void shuchu() //输出学员资料
{
struct student *p;
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┣你输入的结果排序后输出:\n");
p=head;
if(i==1)
{
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┣学号: %d\n",head->objscore.num);
printf("┣姓名: %s\n",head->objscore.name);
printf("┣三门成绩: \n");
printf("┣成绩1: \t\t%.2f\n",head->objscore.score_1);
printf("┣成绩2: \t\t%.2f\n",head->objscore.score_2);
printf("┣成绩3: \t\t%.2f\n",head->objscore.score_3);
printf("┣平均成绩: \t\t%.2f\n",head->objscore.score_av);
}
else
{
while(p!=NULL)
{
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┣学号: %d\n",p->objscore.num);
printf("┣姓名: %s\n",p->objscore.name);
printf("┣三门成绩: \n");
printf("┣成绩1: \t\t%.2f\n",p->objscore.score_1);
printf("┣成绩2: \t\t%.2f\n",p->objscore.score_2);
printf("┣成绩3: \t\t%.2f\n",p->objscore.score_3);
printf("┣平均成绩: \t\t%.2f\n",p->objscore.score_av);
p=p->next;
}
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
}
void shanchu() //按学号删除学员
{
struct student *p,*q;
int stu_num;
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┣请输入你要删除的学员学号: ");
scanf("%d",&stu_num);
q=p=head;
while(p!=NULL)
{
if(stu_num==p->objscore.num)
{
if(p==head)
{
head=p->next;
}
else
{
q->next=p->next;
}
}
q=p;
p=p->next;
}
}