[1595] 自己参照構造体のソートの方法がわかりません
投稿者:バッファロー
2010/06/30 11:27:14
線形リストをつくったのですが、リストに値をセットした後連結リストをソートしたい
のですが、わかりません。どなたか教えてください。
ソース(free用関数は後で作ります。):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct DATA DATA;
struct DATA
{
DATA * next;
char * name;
int math;
int language;
int sum;
};
#define MAX 256
void listSort(DATA *top);
DATA* newnode(){
DATA *p;
p=malloc(sizeof(DATA));
p->next=NULL;
return p;
}
int SUM(DATA *data)
{
return data->language+data->language;
}
void add(DATA *p,char *c,int lang,int math){
while(p->next != NULL){
p= p->next;
}
p->math = math;
p->language = lang;
p->sum = SUM(p);
p->name=malloc(strlen(c)+1);
strcpy(p->name,c);
p->next=newnode();
}
void ShowData(DATA *data)
{
FILE *fp = fopen("result.txt","w");
DATA *temp;
for(temp = data; temp->next;temp= temp->next){
printf("name : %s, language : %d, math : %d, sum :%d \n",temp->name,temp->language,temp->math,temp->sum);
}
for(temp = data; temp->next;temp= temp->next){
fprintf(fp,"name : %s, language : %d, math : %d, sum :%d \n",temp->name,temp->language,temp->math,temp->sum);
}
fclose(fp);
}
int main()
{
char data[MAX] = {'\0'};
char ctemp[100] = {'\0'};
int m,l;
FILE *fp = fopen("data.txt","r");
char *n;
DATA *top = malloc(sizeof(DATA));
top->next = NULL;
while(fgets(data,MAX,fp)){
if(n = strchr(data,'\n'))
*n = '\0';
sscanf(data,"%s%d%d",ctemp,&m,&l);
add(top,ctemp,l,m);
}
listSort(top);
ShowData(top);
return 0;
}
void listSort(DATA *top)
{
//ここのしょりがわかりません
//ちなみにsumで比較
}