题目
将若干城市的信息存入一个带头结点的单链表,结点中的城市信息包括城市名、城市的位置坐标。要求:(1)给定一个城市名,返回其位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。本题只考察链表信息,城市名可使用单字符。
代码实现
#include#include #include typedef struct Node { char name; int x; int y; struct Node *next;} Node, *LinkList;void initLink(LinkList *link);void input(LinkList link);void print(LinkList link);void searchByName(LinkList link, char name);void findAllCity(LinkList link, int x, int y, int distance);int main(int argc, char *argv[]) { LinkList link; char name; int x, y, distance; initLink(&link); input(link); print(link); printf("请输入您要查询的城市名:\n"); getchar(); scanf("%c", &name); searchByName(link, name); printf("请输入您要查询的城市坐标及限定距离,格式为[X坐标 Y坐标 限定距离]:\n"); scanf("%d %d %d", &x, &y, &distance); findAllCity(link, x, y, distance); return 0;}/** * 初始化链表 */void initLink(LinkList *link) { *link = (Node *)malloc(sizeof(Node)); (*link)->next = NULL;}/** * 打印输出链表 */ void print(LinkList link) { Node *p = link->next; while (p) { printf("城市名:%c\tX坐标:%d\tY坐标:%d\n", p->name, p->x, p->y); p = p->next; }}/** * 首次输入链表内数据 */ void input(LinkList link) { Node *node; int time = 0; printf("请输入要输入的数据个数:\n"); scanf("%d", &time); printf("请以[城市名 X坐标 Y坐标]的格式输入数据:\n"); for (int i = 0; i < time; i++) { getchar(); node = (Node *)malloc(sizeof(Node)); scanf("%c %d %d", &node->name, &node->x, &node->y); link->next = node; link = node; } link->next = NULL;}/** * 给定一个城市名,返回其位置坐标 * link: 链表 * name:城市名 */ void searchByName(LinkList link, char name) { Node *node = link->next; while (node) { if (name == node->name) { printf("X坐标:%d\tY坐标:%d\n", node->x, node->y); break; } node = node->next; }}/** * 给定一个位置A坐标,距离D,返回所有与A的距离小于distance的城市名 * link: 链表 * x:x坐标 * y:y坐标 * distance:距离 */ void findAllCity(LinkList link, int x, int y, int distance) { Node *node = link->next; while (node) { if (sqrt(pow(x - node->x, 2) + pow(y - node->y, 2)) <= distance ) { printf("城市:%c\n", node->name); } node = node->next; }}