本文将使用 C 语言实现一个带头结点的单链表,用于存储城市信息。每个结点包含城市名和城市的位置坐标。该程序将提供以下功能:

  1. 插入: 插入新的城市信息到链表中。
  2. 删除: 根据城市名或坐标从链表中删除城市信息。
  3. 更新: 更新已有城市的信息(例如,修改城市名或坐标)。
  4. 查找:
    • 根据城市名查找其坐标。
    • 根据位置坐标和距离,查找所有距离该坐标小于等于指定距离的城市。
  5. 保存: 将所有城市信息保存到文件中。

程序实现:

// 定义结点结构体
struct City {
  char name[50]; // 城市名
  float x, y; // 城市坐标
  struct City *next; // 指向下一个结点的指针
};

// 创建一个新的城市结点
struct City *createCity(char *name, float x, float y) {
  struct City *newCity = (struct City *)malloc(sizeof(struct City));
  strcpy(newCity->name, name);
  newCity->x = x;
  newCity->y = y;
  newCity->next = NULL;
  return newCity;
}

// 插入新的城市信息
void insertCity(struct City **head, char *name, float x, float y) {
  struct City *newCity = createCity(name, x, y);
  newCity->next = *head;
  *head = newCity;
}

// 删除城市信息
void deleteCity(struct City **head, char *name) {
  // ...
}

// 更新城市信息
void updateCity(struct City *head, char *name, float x, float y) {
  // ...
}

// 根据城市名查找坐标
void findCityByName(struct City *head, char *name) {
  // ...
}

// 根据坐标和距离查找附近的城市
void findCitiesByDistance(struct City *head, float x, float y, float distance) {
  // ...
}

// 保存城市信息到文件
void saveCitiesToFile(struct City *head, char *filename) {
  // ...
}

int main() {
  // 创建一个空链表
  struct City *head = NULL;

  // 插入城市信息
  insertCity(&head, "北京", 116.404, 39.915);
  insertCity(&head, "上海", 121.474, 31.233);
  insertCity(&head, "广州", 113.263, 23.126);

  // 其他操作 ...

  return 0;
}

注意: 以上代码仅提供框架,实际实现还需要补充具体的逻辑和代码。


原文地址: https://www.cveoy.top/t/topic/pVH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录