#include "stdio.h"
#include "malloc.h"
#include "string.h"
//一个学生信息管理系统的排序功能
//学生信息包括学号,姓名,年龄
//要求能根据学号进行排序
//学号为string类型
//初学者求助,跪求大佬帮助......
typedef struct sData{
char * xh;
char * name;
int age;
}sData;
typedef struct sTest{
sData * Data;
struct sTest *next;
}sTest;
typedef struct sHead{
sTest * p_head;
}sHead;
void random_data(sHead * p,int n){
sTest * t;
char str[128];
int i ;
p->p_head=NULL; //初始化
for(i=0;i<n;i++){
t=(sTest *)malloc(sizeof(sTest));
t->Data=(sData *)malloc(sizeof(sData));
str[0]='a'+i;
str[1]='b'+i;
str[2]='c'+i;
str[3]='\0';
t->Data->xh =(char *)malloc(strlen(str)+1);
t->Data->name=(char *)malloc(strlen(str)+1);
t->Data->age=i;
strcpy(t->Data->xh,str);
strcpy(t->Data->name,str);
t->next=p->p_head;
p->p_head=t;
}
}
void print(sHead * p){
sTest *t=p->p_head;
while(t){
printf("number:%s name:%s age:%d\n",t->Data->xh,t->Data->name,t->Data->age);
t=t->next;
}
}
void sort(sHead * p){
sTest *t=p->p_head;
sTest *t1;
sTest * swap;
while(t && t->next){
swap = t;
t1=t->next;
while(t1){
if(strcmp(swap->Data->xh,t1->Data->xh)>0){
swap=t1;
}
t1=t1->next;
}
if(t-swap){ //地址发生偏移
sData * s = t->Data;
t->Data = swap->Data;
swap->Data = s;
}
t=t->next;
}
}
int main(){
sHead head;
random_data(&head,10);
print(&head);
sort(&head);
puts("\n\n");
print(&head);
return 0;
}
sort比较low,好的方法。可以带入函数指针,函数指针返回 0 或者大于0 或者小于0,sort根据函数指针返回到值,进行操作。
这样到好处是,可以sort各种排序 |