附加题1: 将若干城市的信息存人一个带头结点 的单链表,结点中的城市信息包括城市名、城市的位置坐标。要求: (1)给定一个城市名,返回其位置坐标; (2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。
时间: 2024-09-30 21:05:41 浏览: 63
这是一个涉及到数据结构和算法的问题,通常会在查找和排序相关的场景中遇到。为了实现这个功能,你可以按照以下步骤设计解决方案:
1. **数据结构设计**:首先,你需要创建一个`City`节点,包含两个属性:城市名(`name`)和位置坐标(`position`)。链表的每个节点就是一个`City`实例,并有一个指向下一个城市的指针。
```java
class City {
String name;
double[] position;
City next;
// 构造函数等其他方法...
}
```
2. **插入操作**:当添加新城市时,遍历链表找到合适的位置插入新的`City`节点。
3. **查询操作**:
- **(1)** 给定城市名,遍历链表查找对应的城市,一旦找到就返回它的位置坐标。
```java
public double[] getPosition(String cityName) {
for (City node = head; node != null; node = node.next) {
if (node.name.equals(cityName)) {
return node.position;
}
}
throw new IllegalArgumentException("City not found.");
}
```
- **(2)** 给定一个位置坐标P和距离D,从头节点开始,比较当前节点位置与P的距离,如果小于等于D,则将该城市加入结果列表,并继续遍历直到遍历结束或超过D的距离。
```java
public List<City> getCitiesWithinDistance(double[] point, double distance) {
List<City> result = new ArrayList<>();
City current = head;
while (current != null && distance >= 0) {
double currDistance = Math.sqrt(Math.pow(current.position[0] - point[0], 2) + Math.pow(current.position[1] - point[1], 2));
if (currDistance <= distance) {
result.add(current);
}
current = current.next;
distance -= currDistance;
}
return result;
}
```
阅读全文