题目:4.建立一个链表,每个结点包括:学号,姓名,年龄,性别。要求输入3个人的信息,将他们按照年龄正序/逆序排序输出他们的信息。
下面是代码:
结构体模块:
typedef struct Student{
long num;
char name[8];
int age;
char sex[5];
Student *next;
}stu;
初始化模块
void init(stu **pNode,int n){
int i = 1;
while (i<=n){
stu *node = *pNode;
stu *temp;
if (*pNode == NULL){
*pNode = (stu *)malloc(sizeof(stu));
long num;
printf("输入第%d个学生学号:", i);
scanf("%ld", &num);
(*pNode)->num = num;
char name[10];
printf("输入第%d个学生姓名:", i);
scanf("%s", (*pNode)->name);
int age;
printf("输入第%d个学生年龄:", i);
scanf("%d", &age);
(*pNode)->age = age;
char sex[5];
printf("输入第%d个学生性别:", i);
scanf("%s", (*pNode)->sex);
(*pNode)->next = NULL;
i++;
}
else{
node = *pNode;
while (node->next != NULL){
node = node->next;
}
temp = (stu *)malloc(sizeof(stu));
long num;
printf("输入第%d个学生学号:", i);
scanf("%ld", &num);
temp->num = num;
char name[10];
printf("输入第%d个学生姓名:", i);
scanf("%s", temp->name);
int age;
printf("输入第%d个学生年龄:", i);
scanf("%d", &age);
temp->age = age;
char sex[5];
printf("输入第%d个学生性别:", i);
scanf("%s", temp->sex);
temp->next = NULL;
node->next = temp;
i++;
}
}
}
排序模块
stu *paixu(stu *pNode){
stu *node1 = (stu*)malloc(sizeof(stu));
stu *node2 = (stu*)malloc(sizeof(stu));
for (node1 = pNode; node1 != NULL; node1 = node1->next){
for (node2 = node1->next; node2 != NULL; node2 = node2->next){
if (node1->num > node2->num){
stu *temp = (stu*)malloc(sizeof(stu));
temp->num = node1->num;
*temp->name = *node1->name;
temp->age = node1->age;
*temp->sex = *node1->sex;
node1->num = node2->num;
*node1->name = *node2->name;
node1->age = node2->age;
*node1->sex = *node2->sex;
node2->num = temp->num;
*node2->name = *temp->name;
node2->age = temp->age;
*node2->sex = *temp->sex;
}
}
}
return pNode;
}
遍历函数
void bianli(stu *pNode){
stu *node;
node = pNode;
printf("学号\t姓名\t年龄\t性别\t\n");
while(node->next != NULL){
printf("%ld\t", node->num);
printf("%s\t", node->name);
printf("%d\t", node->age);
printf("%s\t", node->sex);
printf("\n");
node = node->next;
}
printf("%ld\t", node->num);
printf("%s\t", node->name);
printf("%d\t", node->age);
printf("%s\t", node->sex);
printf("\n");
}
主函数
int _tmain(int argc, _TCHAR* argv[])
{
int n;
printf("请输入要存入信息的人数:");
scanf("%d", &n);
stu *head = NULL;
init(&head,n);
stu *newhead = paixu(head);
bianli(newhead);
system("pause");
return 0;
}
测试结果:(汉字输入会有一个字乱码,正在修改)