大数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
题目:城市链表的设计与实现
二叉排序树基本操作的实现年级专业:09计算机科学与技术
姓名:戗
学号:E10914049
城市链表的设计与实现
I.设计要求
1.问题描述
将若干城市信息,存入一个带头结点的单链表。节点中的城市信息包括城市名、城市位置坐标、城市人口、城市面积、城市特色等。要求能够利用城市名和
位置坐标来进行查找、插入、删除、更新等操作。
2.需求分析
1)给定一个城市名,返回其位置坐标。
2)给定一个中心位置坐标p和一个距离d,返回所以与p距离小于等于d的
城市。
II.概要设计
为了实现需求分析中的功能,可以从以下3方面着手设计。
1.主界面设计
为了实现城市链表的基本操作,设计一个包含多个菜单选项的主控制子程序以实现城市链表的各项子功能,方便用户的使用。本系统的主控制菜单运行界面如图1所示。
图1城市链表的主菜单
2.存储结构的设计
本程序主要采链表结构类型来表示城市链表的信息。其中二叉树节点由7分量组成:城市的名称、城市的位的横坐标、城市位置的纵坐标、城市的面积、城市的人口、城市的特色,及指向自己结构体的指针。
3.系统功能设计
本程序设置了6个子功能菜单,其设计如下。
1)建立城市链表。根据系统提示,选择功能项1,并根据提示逐个输入城市的名
称、位置坐标、人口、面积、特色等。该功能由void Create()函数实现。
2)显示全部城市信息。根据系统提示,选择功能项2,即可显示全部的城市信息。
该功能由print()函数实现。
3)插入新的城市界节点信息。根据系统提示选择功能项3,可每次插入一个节点
信息,如果要插入多个城市信息,需多次选择传插入功能。该功能由Insert ()
函数实现。
4)查询城市的信息。选择功能项4,进入查询菜单,有两种查询方式。一是跟根
据城市名称查询,二是根据城市的位置坐标的距离查询。该功能由Searchmenu
()和void Searchname()及void Searchposition()函数实现。
5)更新城市链表中不正确后过时的信息。可以通过城市名称查询到该节点,再
以此输入城市名称坐标、人口、面积、特色等属性。该功能由void UpdateCity()
实现。
6)删除城市链表的节点信息。根据提示可以对城市链表中不需要的节点进行删
除,删除的方式是输入城市名称,查询到该节点后删除。该功能由void Delete
()函数实现。
III.模块设计
1.模块设计
本程序包含两个模块:主程序模块和二叉排序树操作模块。其调用关系如图2
图2模块调用示意图
2.系统子程序及其功能设计
本系统共设计了9个子程序,个程序的的函数名及其功能说明如下:
1)void Init(Citylist LHead);//创建头指针
2)void Create(Citylist LHead);//创建城市链表
3)int print(Citylist LHead);//显示全部信息
4)void Insert(Citylist LHead);//插入新城市信息
5)int Searchmenu(Citylist LHead);//查询查询菜单
6)void Searchname(Citylist LHead);//按名称查询
7)void Searchposition(Citylist LHead);//按坐标查询
8)void UpdateCity(Citylist LHead);//更新城市信息
9)void Delete(Citylist LHead);//删除城市信息
3.函数主要的调用关系
本系统9个子程序见的主要调用关系图3.
Searchname
IV.详细设计
1.数据类型定义
本系统采用链表结构存储城市节点信息,节点定义如下:
typedef struct Citynode{
char cityName[30];//名称
float x;//横坐标
float y;//纵坐标
int citypopulation;//人口
float cityarea;//面积
char citycharacteristic[50];//特色
struct Citynode *Next;
}Citynode,*Citylist;
2.主要子程序的详细设计
1)城市链表的创建函数,主要用来建立城市链表。
void Create(Citylist LHead)
{
int n;
printf("请输入要创建的链表的城市个数:");
scanf("%d",&n);
for(int i=0;i 2)城市链表的插入函数如下: void Insert(Citylist LHead) { Citylist newNode; char m; newNode = (Citylist )malloc(sizeof(Citynode)); if(newNode == NULL) { printf("存分配失败\n"); return; } printf("请输入城市名: \t"); scanf("%s",newNode->cityName); printf("请输入城市坐标x,y:\t"); scanf("%f%c%f",&newNode->x,&m,&newNode->y); printf("请输入城市的人口(万): \t"); scanf("%d",&newNode->citypopulation); printf("请输入城市的面积(平方公里): \t"); scanf("%f",&newNode->cityarea); printf("请输入城市的特色: \t"); scanf("%s",newNode->citycharacteristic); while(LHead->Next != NULL)