链表操作:
定义结构体:
> typedef struct lis
{
int data;
double score;
char name[20];
struct lis *next;
}LIST;
创建链表
> LIST *creat(int a[],double b[],char (*name)[20])//创建链表函数
{
LIST *h,*p,*q;
int i;
h=p=(LIST*)malloc(sizeof(LIST));
for(i=0;i<N;i++)
{
q=(LIST*)malloc(sizeof(LIS
T));
q->data=a[i];
q->score=b[i];
strcpy(q->name,name[i]);
p->next=q;//新申请的q放在p的后面
p=q;
}
p->next=NULL;//最后的一位存放NULL
> return h;
> }
显示链表元素
> void show_list(LIST *h)//定义显示链表元素函数
{
LIST *p;
p=h->next;
while(p!=NULL)
{
printf("排名:%8d\t",p->data);
printf("总分:%8lf\t",p->score);
printf("姓名:%8s\n",p->name);
p=p->next;
}
}
根据链表中的某个元素值进行排序
LIST *ppaixu(LIST *h)
{
LIST *p,*q;
double mid;
int md;
char name1[20];
q=h->next;
while(q!=NULL)
{
p=q->next;
while(p!=NULL)
{
if(q->score<p->score)
{
mid=q->score;
q->score=p->score;
p->score=mid;
strcpy(name1,q->name);
strcpy(q->name,p->name);
strcpy(p->name,name1);
/*
md=q->data;
q->data=p->data;
p->data=md;
*/
}
p=p->next;
}
q=q->next;
}
return h;
}
主函数的实现
#include <stdio.h>
#include <Windows.h>
#include <malloc.h>
#include <string.h>
#include "input_number.h"
#include "paixu_yd.h"
#include "ipname.h"
#include "ipscore.h"
#define N 10
int main()
{
LIST *head;
int a[N]={1,2,3,4,5,6,7,8,9,10};
double b[N]={1.0,2.0,3.1,4.4,5.0,6.7,7.8,9.9,9.7,4.5};
char name[][20]={"zhangyi","zhanger","zhangsan","zhangsi",
"zhangwu","zhangliu","zhangqi","zhangba","zhangjiu","lisi"};
//ipnumber(a,N);//输入编号,可以将初始化值覆盖
//ipname(name,N);//输入姓名,可以将初始化值覆盖
inputscore(b,N);//输入成绩,可以将初始化值覆盖
head=creat(a,b,name);
show_list(head);//show orign data
printf("\n---------排序后---------\n");
head=ppaixu(head);
show_list(head);
system("pause");//show product data
return 0;
}
参考文献:
【1】计算机二级等考试题
【2】c语言从入门到精通(第二版)