请使用线性表的顺序存储结构,实现对巴黎奥运会奖牌榜的存储、查询、插入等操作。(C语言)
时间: 2024-10-05 21:01:05 浏览: 56
在C语言中,我们可以使用数组作为线性表的顺序存储结构来实现对巴黎奥运会奖牌榜的存储、查询和插入操作。这里我们假设每个运动员有一个名字字段和两个计数器,分别代表金牌和总奖牌数。
首先,我们需要创建一个结构体`Athlete`来表示运动员:
```c
typedef struct {
char name[50]; // 姓名
int gold; // 金牌数
int total; // 总奖牌数
} Athlete;
```
接着,我们可以定义一个动态大小的数组`medalList`来存储所有运动员及其成绩,并初始化数组长度为0:
```c
Athlete medalList[100]; // 假设最多有100位获奖者
int numAthletes = 0; // 当前运动员数量
```
对于操作实现:
1. **插入**新运动员:当有新的获奖者信息时,可以检查数组是否已满,如果未满则将数据添加到数组末尾,增加`numAthletes`:
```c
void insert(Athlete newAthlete) {
if (numAthletes < sizeof(medalList) / sizeof(Athlete)) {
medalList[numAthletes] = newAthlete;
numAthletes++;
} else {
printf("数组已满,无法插入更多运动员。\n");
}
}
```
2. **查询**特定运动员的成绩:通过姓名查找指定的运动员,例如使用线性搜索:
```c
Athlete* searchByName(const char* name) {
for (int i = 0; i < numAthletes; i++) {
if (strcmp(medalList[i].name, name) == 0) {
return &medalList[i];
}
}
return NULL; // 如果找不到,则返回NULL
}
```
3. **更新**运动员成绩:找到运动员后,可以直接修改其奖牌数:
```c
void updateMedals(Athlete* athlete, int gold, int total) {
athlete->gold = gold;
athlete->total = total;
}
```
4. **遍历**查看整个奖牌榜:
```c
void displayMedalList() {
for (int i = 0; i < numAthletes; i++) {
printf("%s: 金牌 %d, 总奖牌 %d\n", medalList[i].name, medalList[i].gold, medalList[i].total);
}
}
```
阅读全文