关于单链表的问题~ 编译没错 但无法实现功能~ 求帮忙~~
题目为:将若干城市的信息输入一个带头结点的单链表,结点中的城市信息包括城市名称,城市的位置坐标,要求:(1)给定一个城市名,返回位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P得距离小于等于D的城市。写的代码为:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct city //用结构体定义单链表
{
char name; //城市名(字符串类型,c语言中没有string类,字符串依赖数组实现)
int hengzuobiao; //城市横坐标
int zongzuobiao; //城市纵坐标
struct city *next; //指向自己的指针next
}city,*LinkList; //struct city类的别名city,LinkList为结构指针类型
void InitList(LinkList *H) //初始化单链表
{
*H=(LinkList)malloc(sizeof(city));//建立头结点
(*H)->next=NULL; //建立空的单链表H
}
void CreatFromTail(LinkList H)//尾插法建表
{
city *r,*s;
char n;
int x,y;
int flag=1; //设置一个标志,初值为1,当输入“$”时,flag=0,建表结束
r=H; //r指针动态指向链表的当前结尾,以便于做尾插入,其初值指向头结点
while(flag) //循环输入表中元素值,将建立新结点s插入表尾
{
printf("输入城市名(若想终止存入信息,请输入$):\n");
scanf("%s",&n);//读入字符串
getchar(); //一开始没有加getchar()函数时,scanf("%s",&n)会直接被跳过,输出"输入城市名(若想终止存入信息,请输入$):"后就直接输出"输入城市坐标:"。为什么!!!!
if(n!='$')
{
printf("输入城市坐标:\n");
scanf("%d%d",&x,&y); //输入城市的横纵坐标
s=(city *)malloc(sizeof(city)); //申请新结点
s->name=n;
s->hengzuobiao=x;
s->zongzuobiao=y;
r->next=s;
r=s; //r始终指向单链表的表尾
}
else
{
flag=0;
r->next=NULL; //将最后一个结点的next链域置为空,表示链表的结束
}
}
}
void search() //查询城市坐标
{
LinkList L;//在带头结点的单链表L中查找其结点值等于key的结点,若找到则返回城市坐标;否则返回NULL
CreatFromTail(L);
char key;
city *p;
printf("请输入要查询的城市名:");
scanf("%d",&key);
p=L->next; //从表中第一个结点比较
while(p!=NULL)
if(p->name!=key)
p=p->next; //p指向下一结点
else
{
printf("该城市坐标为:",p->hengzuobiao,p->zongzuobiao);
break; //找到结点key,退出循环
}
}
void calculate() //计算距离
{
LinkList L;
CreatFromTail(L);
int m,n,D;
city *p;
printf("请输入坐标P:");
scanf("%d%d",&m,&n);
printf("请输入距离D:");
scanf("%d",&D);
p=L->next; //从表中第一个结点比较
while(p!=NULL)
if((m-p->hengzuobiao)*(m-p->hengzuobiao)+(n-p->zongzuobiao)*(n-p->zongzuobiao)<=(D*D))
{
printf("此城市符合条件:",p->name);
}
else
p=p->next; //继续比较下一个结点
}
void main()
{
int number;
printf("请选择序号:1.查询城市坐标 2.输出符合距离条件的城市 3.退出系统\n");
scanf("%d",&number);
switch(number)
{
case 1:
search();
break;
case 2:
calculate();
break;
case 3:
printf("已成功退出系统!欢迎再次使用!");
break;
default:
printf("输入错误,请重新输入");
break;
}
system("pause");
}
帮忙看看程序应该怎么修改~~~~~~~