struct student{ int num; char name[20]; int sex;//sex=0女、sex=1男 int age; student *next; };以这个结构体组成的有头结点的链表排序
时间: 2024-05-16 09:17:05 浏览: 96
可以使用插入排序对链表进行排序,具体实现步骤如下:
1. 定义一个指针p1,从链表的第二个节点开始遍历链表,直到最后一个节点。
2. 定义一个指针p2,从链表的第一个节点开始遍历链表,直到p1所指向的节点。
3. 如果p1节点的num小于p2节点的num,则交换p1和p2节点的数据。
4. 将p2指向下一个节点,继续执行步骤3,直到p1节点。
5. 将p1指向下一个节点,重复执行步骤2-4,直到最后一个节点。
代码实现如下:
```c++
void sortList(student *head) {
if(head == NULL || head->next == NULL) {
return;
}
student *p1, *p2;
for(p1 = head->next; p1 != NULL; p1 = p1->next) {
for(p2 = head->next; p2 != p1; p2 = p2->next) {
if(p1->num < p2->num) {
// 交换p1和p2节点的数据
int num = p1->num;
p1->num = p2->num;
p2->num = num;
char name[20];
strcpy(name, p1->name);
strcpy(p1->name, p2->name);
strcpy(p2->name, name);
int sex = p1->sex;
p1->sex = p2->sex;
p2->sex = sex;
int age = p1->age;
p1->age = p2->age;
p2->age = age;
}
}
}
}
```
阅读全文