#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
using namespace std;
typedef int ElemType;
int size=0;
typedef struct Node
{
char name[20];
float x,y;
ElemType data;
Node *next;
}Node,*LinkList;
void Build(LinkList L){
LinkList p,q;
int n;
p=L;
printf("请输入要建立城市的个数\n");
scanf("%d",&n);
while(n--)
{
q=(LinkList)malloc(sizeof(Node));
printf("请输入城市的名字\n");
scanf("%s",&q->name);
printf("请输入城市的坐标x\n");
scanf("%f",&q->x);
printf("请输入城市的坐标y\n");
scanf("%f",&q->y);
q->next=NULL;
p->next=q;
p=q;
size++;
}
}
void Print(LinkList L)
{
int num=0;
LinkList p;
p=L->next;
while(p)
{
num++;
printf("城市的名字是:\n");
printf("%s ",p->name);
printf("城市的坐标是%f %f\n",p->x,p->y);
p=p->next;
}
printf("\n长度为%d:\n",num);
}
void Lookcoordinate(LinkList L){
LinkList p,q;
char a[20];
printf("请输入你要查找的城市的名字\n");
scanf("%s",&a);
for(p = L->next; p != NULL; p = p->next)
if(!strcmp(p->name,a))
{
printf("请你要查找的城市的坐标是%f %f\n",p->x,p->y);
break;
}
}
void List(LinkList L){
char a[20];
Node *p;
Node n;
int i;
float d;
float de ;
cout<<"你给的城市是 :";
cin>>a ;
cout<<"你给的距离是 :";
cin>>d;
for(p = L->next; p != NULL; p = p->next)
if(!strcmp(p->name,a)) break;
n = *p; p = L->next;
for(i=0;i<size;i++, p = p->next)
{ de=sqrt(((*p).x-n.x)*((*p).x-n.x)+((*p).y-n.y)*((*p).y-n.y));
if(de<=d && strcmp(p->name,a))
{ cout<<p->name ;
cout<<'('<<p->x<<','<<p->y<<')'<<endl ; }
}
}
int main(){
LinkList L; int n;
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
Build(L);
printf("你可以通过选择-----1查找城市名来返回坐标-----\n");
printf("你可以通过选择-----2查找城市周边符合情况-----\n");
scanf("%d",&n);
while (n)
{
switch (n)
{
case 1:
Lookcoordinate(L);
break;
case 2:
List(L);
break;
}
scanf("%d",&n);
}
}