将若干城市的信息存入一个带 头结点的单向链表。结点中的城市信息包括城市名、城市的位置坐标。要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
时间: 2023-12-21 16:06:05 浏览: 88
实现这个功能,我们可以定义一个结构体来存储城市信息,包括城市名和位置坐标。然后再定义一个单向链表结构体,每个节点存储一个城市信息结构体。
具体实现如下:
```c
typedef struct city_info {
char name[20]; // 城市名
int x; // 城市横坐标
int y; // 城市纵坐标
} CityInfo;
typedef struct city_node {
CityInfo city; // 城市信息
struct city_node *next; // 指向下一个节点的指针
} CityNode, *CityList;
// 初始化链表
void init_city_list(CityList *L) {
*L = (CityNode*)malloc(sizeof(CityNode));
(*L)->next = NULL;
}
// 插入节点
void insert_city_node(CityList L, CityInfo city) {
CityNode *p = (CityNode*)malloc(sizeof(CityNode));
p->city = city;
p->next = L->next;
L->next = p;
}
// 删除节点
void delete_city_node(CityList L, char name[]) {
CityNode *p = L->next;
CityNode *pre = L;
while (p != NULL) {
if (strcmp(p->city.name, name) == 0) {
pre->next = p->next;
free(p);
return;
}
pre = p;
p = p->next;
}
}
// 更新节点
void update_city_node(CityList L, char name[], int x, int y) {
CityNode *p = L->next;
while (p != NULL) {
if (strcmp(p->city.name, name) == 0) {
p->city.x = x;
p->city.y = y;
return;
}
p = p->next;
}
}
// 查找节点
CityNode* find_city_node(CityList L, char name[]) {
CityNode *p = L->next;
while (p != NULL) {
if (strcmp(p->city.name, name) == 0) {
return p;
}
p = p->next;
}
return NULL;
}
```
这样,我们就可以通过链表来进行城市信息的存储、插入、删除、更新和查找等操作了。
阅读全文