链表之字符(二)

#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;
    //p=L;
    char a[20];
    printf("请输入你要查找的城市的名字\n");
    scanf("%s",&a);
    for(p = L->next; p != NULL; p = p->next)    
        if(!strcmp(p->name,a))//C/C++函数,比较两个字符串。设这两个字符串为str1,str2,若str1==str2,则返回零  
        {   
            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);
    }

    // Print(L);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值