c语言使用链表实现歌手比赛成绩排序
时间: 2024-10-21 21:03:41 浏览: 16
在C语言中,使用链表实现歌手比赛成绩排序通常涉及到结构体(structs)用于存储歌手信息,以及自定义链表节点(Node)。这里我们可以选择使用冒泡排序、插入排序或者归并排序等算法对链表进行升序或降序排列,因为链表不适合直接随机访问元素,所以不适合快速排序等原地排序算法。
首先,创建一个`SongCompetitor`结构体,包含歌手名字和分数:
```c
typedef struct SongCompetitor {
char* name;
int score;
struct SongCompetitor* next;
} SongCompetitor;
```
然后,可以编写函数来操作链表:
1. 插入新歌手:
```c
void insert(SongCompetitor** head, char* name, int score) {
SongCompetitor* new_node = (SongCompetitor*)malloc(sizeof(SongCompetitor));
new_node->name = strdup(name);
new_node->score = score;
new_node->next = *head;
*head = new_node;
}
```
2. 比较和交换节点(假设我们这里是冒泡排序或插入排序的一部分):
```c
int compare_scores(const void* a, const void* b) {
const SongCompetitor* nodeA = (const SongCompetitor*)a;
const SongCompetitor* nodeB = (const SongCompetitor*)b;
return nodeB->score - nodeA->score; // 降序排序
}
// 使用qsort函数进行排序
void sort_list(SongCompetitor** head) {
if (*head != NULL) {
qsort(*head, 1, sizeof(SongCompetitor), compare_scores);
}
}
```
3. 遍历打印结果:
```c
void print_list(SongCompetitor* head) {
while (head != NULL) {
printf("%s: %d\n", head->name, head->score);
head = head->next;
}
}
```
阅读全文