用c语言编写程序若干城市的信息存人一个带头结点的单链表,结点中的城市信息包括城市名、 城市的位置坐标。要求: (1)给定一个城市名,返回其位置坐标; (2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。
时间: 2024-10-06 12:02:59 浏览: 27
在C语言中,你可以使用结构体定义每个城市的节点,并创建一个链表数据结构来存储城市信息。首先,定义一个包含城市名和坐标的结构体:
```c
typedef struct City {
char name[50]; // 城市名
double position; // 坐标
struct City* next; // 指向下一个节点
} CityNode;
```
接下来,你可以创建链表并实现相应功能:
1. **添加城市到链表**:
```c
void addCity(CityNode** head, char* cityName, double pos) {
CityNode* newNode = (CityNode*)malloc(sizeof(CityNode));
strncpy(newNode->name, cityName, sizeof(newNode->name) - 1);
newNode->position = pos;
newNode->next = *head;
*head = newNode;
}
```
2. **查找特定城市坐标**:
```c
double findCityPosition(const CityNode* head, char* cityName) {
while (head != NULL) {
if (strcmp(head->name, cityName) == 0)
return head->position;
head = head->next;
}
return -1; // 如果未找到则返回-1表示不存在
}
```
3. **查找距离小于等于D的所有城市**:
```c
void findCitiesWithinDistance(CityNode* head, double P, double D, CityNode** result) {
*result = NULL;
CityNode* current = head;
while (current != NULL) {
if (sqrt(pow(current->position - P, 2)) <= D) { // 计算欧氏距离
CityNode* newNode = (CityNode*)malloc(sizeof(CityNode));
*newNode = *current; // 复制节点
newNode->next = *result;
*result = newNode;
}
current = current->next;
}
}
```
使用完后记得释放不再需要的内存。
阅读全文