...的单链表,结点中的城市信息包括城市名,城市的位置坐标,要求...
发布网友
发布时间:2024-10-01 05:53
我来回答
共1个回答
热心网友
时间:2024-11-14 02:46
#include<stdio.h>
#include<malloc.h>
typedef struct Node{
char data1;
int data2,data3;
struct Node *next;
}Node,*LinkList L;
void Initlinklist(LinkList *l)/*对单链表进行初始化*/{
*l=(LinkList)malloc(sizeof(Node));
(*l)->next=NULL;
}
void CreateFromTail(LinkList L)
{
Node *r, *city;
char *b;
int flag=1,c,d;/*设置一个标志,初值为1,当输入"$"时,flag为0,建表结束*/
r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
while(flag) /*循环输入表中元素值,将建立新结点s插入表尾*/
{
printf("input the City:\n");
b=gets();//获取城市名
printf("input the
site:\n");
scanf("%d%d",&c,&d);//获取城市坐标
if(!strcmp(b,"$"))//跳出条件
{
city=(Node*)malloc(sizeof(Node));
city->data1=*b;
city->data2=c;
city->data3=d;
r->next=city;
r=city;
}
else
{
flag=0;
r->next=NULL; /*将最后一个结点的next链域置为空,表示链表的结束*/
}
}//while
}
int search()//查找城市坐标 {
LinkList L;
Node *p,*q;
int flag=0;
int i;
char
c;
Initlinklist(&L);
printf("input
the element,end by '$'\n");
CreateFromTail(L);//尾插建立单链表
p =L->next;
printf("Which city are you
want to search:\n");
q=gets();//获取城市名
while(p!=NULL)
{
if(strcmp(p->data1,q)){//比较输入的城市名是否存在
printf("%s's site
is:(%d,%d)",p->data1,p->data2,p->data3);//输出名字于坐标
p=NULL;//跳出循环
break;
}
p=p->next;//下一位
}//while
}
int count()//计算符合要求的城市 {
LinkList L;
Node *p,*q;
int flag=0;
int i,e,f,g,h;
char c;
Initlinklist(&L);
printf("input the element,end by '$'\n");
CreateFromTail(L);//尾插建立单链表
p
=L->next;
printf("Input the site:\n");
scanf("%d%d",&e,&f);//获取坐标
printf("Input the distance:\n");
scanf("%d",&g);//获取距离
while(p!=NULL)
{
f=e+f+g;//条件2的满足条件
g=p->data2+p->data3;
if(g<=f){
printf("%s's site
is:(%d,%d)\n",p->data1,p->data2,p->data3);
h++;//计算符合要求的城市个数
}
p=p->next;
}//whileprintf("There are %d cities to
meet the requirements\n",h);
}