用c语音根据用户输入的歌唱比赛信息(包括人数、选手姓名、比赛成绩),建立一个单链表,按照比赛成绩进行递减排序输出。
时间: 2024-12-15 22:30:31 浏览: 3
在C语言中,我们可以创建一个结构体来存储歌唱比赛的相关信息,如选手姓名和比赛成绩,并利用链表的数据结构来进行操作。首先,我们需要定义一个链表节点:
```c
typedef struct SongContest {
char* name;
int score;
struct SongContest* next;
} SongContestNode;
```
然后,你可以编写一个函数用于从用户输入创建并初始化链表:
```c
SongContestNode* createList(int numEntries) {
SongContestNode* head = NULL;
for (int i = 0; i < numEntries; i++) {
char* name;
scanf("请输入第 %d 位选手的姓名: ", &name);
int score;
scanf("%d", &score);
SongContestNode* newNode = (SongContestNode*)malloc(sizeof(SongContestNode));
newNode->name = name;
newNode->score = score;
newNode->next = NULL;
if (!head) {
head = newNode;
} else {
SongContestNode* current = head;
while (current->next != NULL && current->score > newNode->score) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
return head;
}
```
这个`createList`函数遍历用户输入,每次添加一个新的节点到链表中,同时保证新节点插入的位置使得链表按分数降序排列。
最后,我们写一个函数来打印链表,展示比赛成绩:
```c
void printList(SongContestNode* head) {
while (head) {
printf("选手: %s, 成绩: %d\n", head->name, head->score);
head = head->next;
}
}
```
要使用上述功能,你需要在主程序中调用这两个函数:
```c
int main() {
int numEntries;
printf("请输入参赛选手的人数: ");
scanf("%d", &numEntries);
SongContestNode* listHead = createList(numEntries);
printList(listHead);
free(head); // 不要忘记释放内存
return 0;
}
```
阅读全文