实验内容描述:

2 .城市链表(设计性实验)
问题描述
将若干城市的信息存入一个带头结点的单向链表。结点中的城市信息包括城市名、城市的位置坐
标。要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
基本要求
(1) 给定一个城市名,返回其位置坐标。
(2) 给定一个位置坐标 P 和一个距离 D ,返回所有与 P 的距离小于等于 D 的城市。
测试数据
由读者依据软件工程的测试技术自己确定。注意测试边界数据

简述:

此次实验实际上就是要用到上一篇写的单链表,但实际上比那个简单,因为要求的操作很少,在此仅说一下一些需要注意的问题:

第一个是结构体内容的变化,这里的数据应该包括浮点类型的xyz三坐标,还应该包括字符类型的城市名字,在这里我用了一个char指针去实现

第二个是字符数组是可以装汉字的,只不过,一个汉字相当于原来的两个字符

第三个是在往里面输入城市名字的时候,必须先给字符指针用malloc分配内存

其它基本上没什么问题,跟普通单链表差不多

下面是代码and测试图:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
#define OK 2
#define ERROR 0
typedef char CityName;
typedef int Status;
typedef struct Cityinfo{CityName *name;double x;double y;double z;struct    Cityinfo *next;
}CityInfo,*CityPtr;
CityPtr CreatList(void);//创造城市链表
void FindCity(CityPtr);//查找城市
Status InsertCity(CityPtr);// 插入城市
Status DeleteCity(CityPtr);//删除城市
void CheckCity(CityPtr);//遍历城市
void ReturnCity(CityPtr,double,double,double,double);//寻找距离xyz小于distance的所有城市
int main()
{CityPtr L;L=CreatList();CheckCity(L);FindCity(L);InsertCity(L); CheckCity(L);DeleteCity(L);CheckCity(L);printf("下面开始寻找离坐标xyz的距离小于distance的所有城市:\n");printf("请分别输入x y z distance:");double x,y,z;double distance;scanf("%lf%lf%lf%lf",&x,&y,&z,&distance);ReturnCity(L,x,y,z,distance); return 0;
}
CityPtr CreatList(void)
{CityPtr L=(CityPtr)malloc(sizeof(CityInfo));L->next=NULL;CityPtr p,Tail;Tail=L;int n,i;CityName *s;printf("请输入您想创建的城市个数:");scanf("%d",&n);for(i=1;i<=n;i++){p=(CityPtr)malloc(sizeof(CityInfo));printf("请输入第%d个城市的名称:",i);s=(CityName*)malloc(sizeof(CityName)*20);scanf("%s",s);p->name=s;printf("请分别输入第%d个城市的x坐标,y坐标,z坐标:",i);scanf("%lf%lf%lf",&p->x,&p->y,&p->z); Tail->next=p;Tail=p;Tail->next=NULL;}return L;
}
void CheckCity(CityPtr L)
{CityPtr p=L->next;int cnt=0;while(p){cnt++;printf("第%d个城市的名字为%s,x坐标为%lf,y坐标为%lf,z坐标为%lf\n",cnt,p->name,p->x,p->y,p->z);p=p->next;}
}
void FindCity(CityPtr L)
{int choose;double x,y,z;CityName *s;s=(CityName*)malloc(sizeof(CityName)*20);int cnt=0;CityPtr p=L->next;printf("选择查找城市的方式,输入1为利用名称查找,输入2为利用坐标查找:");scanf("%d",&choose);switch(choose){case 1:printf("请输入你要查找的城市的名字:");scanf("%s",s);while(p){cnt++;if(!(strcmp(s,p->name))){printf("成功找到!,该城市在链表第%d个位置\n",cnt);  return;}p=p->next;} printf("没有查找到相关城市\n");return;case 2:printf("清分别输入你要查找的城市的x,y,z坐标:");scanf("%lf%lf%lf",&x,&y,&z);while(p){cnt++;if((x==p->x)&&(y==p->y)&&(z==p->z)){printf("成功找到!,该城市在链表第%d个位置\n",cnt);    return;}p=p->next;} printf("没有查找到相关城市\n");return;default:printf("输入的内容有误!!\n");break; } return;
}
Status InsertCity(CityPtr L)
{CityPtr p;CityName *s;s=(CityName*)malloc(sizeof(CityName)*20);p=(CityPtr)malloc(sizeof(CityInfo));printf("输入你想插入的城市的名字:");scanf("%s",s);p->name=s;double x,y,z;printf("清分别输入你要添加的城市的x,y,z坐标:");scanf("%lf%lf%lf",&x,&y,&z);p->x=x;p->y=y;p->z=z;printf("你要插到第几个城市的前面?输入数字以表示:"); int i;scanf("%d",&i);CityPtr q=L;while(--i){q=q->next;}p->next=q->next;q->next=p;return OK;
}
Status DeleteCity(CityPtr L)
{CityPtr p=L;CityName *s;CityPtr q;s=(CityName*)malloc(sizeof(CityName)*20);printf("输入你想删除的城市的名字:");scanf("%s",s);while(p->next){if(!(strcmp(s,p->next->name))){q=p->next;p->next=q->next;free(q);printf("删除成功!\n");return OK;}p=p->next;} printf("删除失败,没有发现对应的城市!\n");return ERROR;
}
void ReturnCity(CityPtr L,double x,double y,double z,double distance)
{CityPtr p=L->next;while(p){if((p->x-x)*(p->x-x)+(p->y-y)*(p->y-y)+(p->z-z)*(p->z-z)<distance*distance)printf("%s\n",p->name);p=p->next;}
}

测试图:

【数据结构入门实验C语言版】城市链表相关推荐

  1. 《数据结构与算法 C语言版》—— 2.5上机实验

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.5节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.5上机实验 实 ...

  2. 《数据结构与算法 C语言版》—— 3.8习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第3章,第3.8节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.8习题 1名 ...

  3. 《数据结构与算法 C语言版》—— 2.7习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.7节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.7习题 1描 ...

  4. 数据结构c语言版题库编程,数据结构习题库(c语言版)

    <数据结构习题库(c语言版)>由会员分享,可在线阅读,更多相关<数据结构习题库(c语言版)(104页珍藏版)>请在人人文库网上搜索. 1.wages in arrears. 2 ...

  5. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...

    1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...

  6. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  7. c语言数据结构算法设计题,数据结构题集(C语言版)算法设计题答案[].doc

    数据结构题集(C语言版)算法设计题答案[].doc 第一章 绪论 1.16 void print_descending(int x,int y,int z)// 按从大到小顺序输出三个数 { scan ...

  8. 数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告

    <数据结构二叉排序树实验报告>由会员分享,可在线阅读,更多相关<数据结构二叉排序树实验报告(7页珍藏版)>请在装配图网上搜索. 1.实验报告课程名:数据结构(C语言版)实验名: ...

  9. 图书信息管理系统(数据结构顺序表,c语言版)

    图书信息管理系统 顺序表 一.实验题目 二.工具环境 三.实验问题 问题: 四.实验代码 五.解决方法 方法: 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括 ...

最新文章

  1. 黄聪:原生js的音频播放器,兼容pc端和移动端(原创)
  2. java判断自己活了多少天_用程序计算你活了多少天
  3. python的翻译-用Python做一个简单的翻译工具
  4. LeetCode 算法 856. 括号的分数
  5. Light oj 1214-Large Division (同余定理)
  6. android EditText获取光标位置并安插字符删除字符
  7. 设计模式-17-迭代器
  8. 2016蓝桥杯C++A:寒假作业(详细解析)
  9. bzoj 1052: [HAOI2007]覆盖问题(二分+贪心)
  10. python程序按钮怎么创建_如何使用pygame创建按钮?
  11. 数据结构复习-day01-SqList顺序表
  12. 【Unity】Mesh网格编程(一)正二十面体
  13. 计算机word排版实训报告,Word排版实训报告
  14. 计算机的就业指导论文,★计算机就业指导论文题目计算机就业指导毕业论文题目大全计算机就业指导论文选题参考...
  15. Spring Cloud GateWay-过滤器
  16. systemctl开机启动设置
  17. 163邮箱苹果设置不成功_iphone手机,苹果手机如何登陆网易163邮箱
  18. 利用Java实现将华氏温度转换为摄氏温度
  19. 怎样开好项目启动大会
  20. 起码我们曾经爱过,不是吗

热门文章

  1. 产品未出 百度朋友圈“开演”
  2. 佛教对计算机的影响,宣化上人:200年后计算机会消失
  3. gnome2 卷起_GNOME 2 粉丝喜欢 Mate Linux 桌面的什么?
  4. 数据库:Win11安装数据库
  5. 页面中调用swf 时allowScriptAccess 参数
  6. 用excel来做动态图表
  7. Android Studio 项目异常问题汇总
  8. qq2007涂鸦表情破解(QQHelperDll.dll)
  9. nacos client 产生大量 time wait和close wait 解决方案
  10. [C#学习] BindingNavigator控件