|
发表于 2018-6-24 00:58:52
|
显示全部楼层
- #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各种排序 |
|