数据结构课程设计实验1城市链表

合集下载

城市链表实验报告书

城市链表实验报告书

学生课程实验报告书09级计算机科学与信息技术系网络工程专业02班学号:0930040250 姓名:郭文明2010-2011学年第二学期实验项目:实验二线性表实验目的:本次实习的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。

通过本次实习还可帮助读者复习高级语言的使用方法。

实验内容:城市链表【问题描述】将若干城市的信息,存入一个带头结点的单链表。

结点中的城市信息包括:城市名,城市的位置坐标。

要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。

【基本要求】(1)给定一个城市名,返回其位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。

int Menu(){int choice;printf("************************\n");printf(" 1.新建\n");printf(" 2.根据城市名查找\n");printf(" 3.根据离中心坐标距离查找\n");printf(" 4.输出城市链表\n");printf(" 5.退出\n");printf("============================\n");printf("请选择:");scanf("%d", &choice);return choice;}【程序如下所示】#include<malloc.h> /* malloc()等*/#include<stdio.h> /* EOF(=^Z或F6),NULL */#include<process.h> /* exit() */#include<math.h>#include<stdlib.h>#include<string.h>/* 函数结果状态代码*/#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/struct xinxi{int x;int y;};struct LNode{char name[40];struct xinxi zuobiao;struct LNode *next;};typedef struct LNode *LinkList; /* 另一种定义LinkList的方法*/int InitList(LinkList *L) /* 操作结果:构造一个空的线性表L */{*L=(LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点*/if(!*L)/* 存储分配失败*/exit(OVERFLOW);(*L)->next=NULL;/* 指针域为空*/return OK;}int DestroyList(LinkList *L) /* 初始条件:线性表L已存在。

城市链表(实验报告)

城市链表(实验报告)

本科学生综合性实验报告学院:软件与通信工程学院课程名称:数据结构与算法专业班级:09通信工程1班姓名:王燕学号:0093731学生实验报告(1)一、实验目的1.掌握用 C语言调试程序的基本方法。

2.掌握线性表的基本运算,如创建、插入、删除等。

二、实验内容将若干城市的信息,存入一个带头结点的单链表。

结点中的城市信息包括:城市名,城市的位置坐标。

要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。

[拓展要求](1)给定一个城市名,返回其位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。

三、实验要求1.用C++/C完成算法设计和程序设计并上机调试通过。

2. 实验过程中学生调试完成,需向教师演示实验过程和结果。

3.撰写实验报告,提供实验结果和数据。

4.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。

5. 采用上机情况、程序质量、实习报告相结合的形式,满分为100分。

四、实验仪器1.WindowsXP以上操作系统;2.Visual C++6.0语言环境;3.每人一台PC机。

五、实验内容和步骤1.启动Windows XP操作系统2.创建工作文件夹创建Visual C++ 6.0的工作文件夹。

3.启动Visual C++ 6.0建立一个空工程LinkList,在建立一个源文件citylinklist4.编写代码如下:#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>#include<math.h>typedef struct Node{char CityName[10];float CityPoistion[2];struct Node *next;}Node, * LinkList;void InitList(LinkList * H){* H=(LinkList)malloc(sizeof(Node));(* H)->next=NULL;}//建立城市信息链表,以城市名“no”作为结束标识符void CreateCity(LinkList H){Node * r, * s;;char name[10];float x,y;r=H;printf("请输入若干个城市的信息!(以城市名no结束)\n城市名经度纬度\n");scanf("%s%f%f",name,&x,&y);while(strcmp(name,"no")!=0){s=(Node*)malloc(sizeof(Node));strcpy(s->CityName,name);s->CityPoistion[0]=x;s->CityPoistion[1]=y;r->next=s;r=s;scanf("%s%f%f",name,&x,&y);}r->next=NULL;}//在某个城市后面插入一个城市信息int InsertCity(LinkList L){char cityname[10],name[10]; //name为定位城市名,cityname为要插入城市信息的城市名float x,y,x1,y1; //x1,y1是定位城市位置坐标,x,y是要插入城市信息的城市位置坐标int flag;printf("请选择插入方式(0 按城市名插入, 1 按城市位置坐标插入):");scanf("%d",&flag);switch(flag){case 0:p=L;printf("请输入在那个城市名后插入城市信息:");scanf("%s",name);getchar();while((p!=NULL)&&(strcmp(p->CityName,name)!=0))p=p->next;if(p==NULL){printf("没有找到城市名为%s 的城市,插入位置不当!\n",name);}else{printf("在城市%s 后插入一个城市信息:\n城市名经度纬度\n",name);scanf("%s%f%f",cityname,&x,&y);q=(Node*)malloc(sizeof(Node));strcpy(q->CityName,cityname);q->CityPoistion[0]=x;q->CityPoistion[1]=y;q->next=p->next;p->next=q;}break;case 1:p=L;printf("请输入在哪个城市位置坐标后插入城市信息:");scanf("%f%f",&x1,&y1);getchar();while((p!=NULL)&&(p->CityPoistion[0]!=x1)&&(p->CityPoistion[1]!=y1))p=p->next;if(p==NULL){printf("没有找到满足坐标为(%.2f , %.2f)的城市,插入位置不当!\n",x1,y1);}else{printf("在城市坐标为(%.2f , %.2f)的城市后面插入一个城市信息\n城市名经度纬度\n",x1,y1);q=(Node*)malloc(sizeof(Node));strcpy(q->CityName,cityname);q->CityPoistion[0]=x;q->CityPoistion[1]=y;q->next=p->next;p->next=q;}break;}return 1;}//删除一个城市信息int DeleteCity(LinkList L){Node *p,*q;char name[10]; //name是要删除城市信息的城市名float x1,y1; //x,y是要删除城市信息的城市位置坐标int flag;printf("请选择删除方式(0 按城市名删除, 1 按城市坐标删除): ");scanf("%d",&flag);switch(flag){case 0:p=L;q=p->next;printf("请输入要删除城市信息的城市名:");scanf("%s",name);while(q!=NULL && strcmp(q->CityName,name)!=0){q=q->next;p=p->next;}if(q==NULL){printf("没有找到城市名为%s 的城市,删除不成功!\n",name);}else{p->next=q->next;printf("删除了城市%s 的信息.\n",q->CityName);free(q);}break;case 1:p=L;printf("请输入要删除城市信息的城市位置坐标:");scanf("%f%f",&x1,&y1);while((q!=NULL)&&(q->CityPoistion[0]!=x1)&&(q->CityPoistion[1]!=y1)){q=q->next;p=p->next;}if(q==NULL){printf("没有找到满足坐标为(%.2f , %.2f)的城市,删除不成功!\n",x1,y1);}else{printf("删除了城市%s 的信息.\n",q->CityName);p->next=q->next;free(q);}break;}return 1;}//查找一个城市信息int FindCity(LinkList L){Node *p;char name[10]; //name是要查找城市信息的城市名float x1,y1; //x,y是要查找城市信息的城市位置坐标int flag;printf("请选择查找方式(0 按城市名查找, 1 按城市位置坐标查找):");scanf("%d",&flag);switch(flag){case 0:p=L->next;printf("请输入要查找城市信息的城市名:");scanf("%s",&name);while(p!=NULL&&strcmp(p->CityName,name)!=0)p=p->next;if(p==NULL){printf("没有找到城市名为%s 的城市!\n",name);}else{printf("城市名为%s 的城市位置坐标为}break;case 1:p=L->next;printf("请输入要查找城市信息的城市位置坐标:");scanf("%f%f",&x1,&y1);while((p!=NULL)&&(p->CityPoistion[0]!=x1)&&(p->CityPoistion[1]!=y1))p=p->next;if(p==NULL){printf("没有找到城市位置坐标为(%.2f , %.2f)的城市!\n",x1,y1);}elseprintf("城市位置坐标为(%.2f , %.2f)的是城市名为%s \n",p->CityPoistion[0],p->CityPoistion[1],p->CityName);break;}return 1;}//计算二维坐标两点间的距离float Length(float x1,float y1,float x2,float y2){float l;l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));return l;}//以某点为中心找到所有小于某个距离的城市void SubDAround(LinkList L){Node * q;int n=0;float px,py,d;q=L->next;printf("请输入中心坐标点坐标以及距离:");scanf("%f%f%f",&px,&py,&d);printf("距中心坐标点(%.2f , %.2f) %.2f 的城市有:\n",px,py,d);while(q!=NULL){if(Length(px,py,q->CityPoistion[0],q->CityPoistion[1])<=d){printf("%s %.2f %.2f\n",q->CityName,q->CityPoistion[0],q->CityPoistion[1]);q=q->next;n++;}else}if(n==0) printf("没有任何城市符合条件!\n");}//显示所有城市信息void DisplayCity(LinkList L){Node * p;p=L->next;printf("城市名经度纬度\n");while(p!=NULL){printf("%s %.2f %.2f\n",p->CityName,p->CityPoistion[0],p->CityPoistion[1]);p=p->next;}}void main(){int k=1;LinkList CLL;InitList(&CLL);while(k){printf("\n\n\t\t\t城市信息管理系统\n\n");printf("\t\t\t1.建立一个城市信息链表\n");printf("\t\t\t2.查找一个城市信息\n");printf("\t\t\t3.插入一个城市信息\n");printf("\t\t\t4.删除一个城市信息\n");printf("\t\t\t5.显示所有城市信息\n");printf("\t\t\t6.距某点小于某距离的所有城市信息\n");printf("\t\t\t0.退出\n");printf("请选择操作项目:");scanf("%d",&k);system("cls");switch(k){case 1:CreateCity(CLL);system("pause");break;case 2:FindCity(CLL);system("pause");break;case 3:InsertCity(CLL);system("pause");break;case 4:DeleteCity(CLL);system("pause");break;case 5:DisplayCity(CLL);system("pause");break;case 6:SubDAround(CLL);system("pause");break;case 0:break;}system("cls");}5.编译、运行,结果如下:开始界面:建立城市城市信息链表:显示建立城市信息链表后的内容:按城市名查找城市信息,而且查找成功:按城市名查找城市信息,但查找不成功:按城市坐标查找城市信息,而且查找成功:按城市名查找城市信息,但查找不成功:按城市名在某个城市后面插入一个城市信息,而且插入成功:按城市名在某个城市后面插入一个城市信息,但插入不成功:按城市坐标在某个城市后面插入一个城市信息,而且插入成功:按城市坐标在某个城市后面插入一个城市信息,但插入不成功:显示插入城市信息后城市链表的内容:按城市名删除一个城市信息,而且删除成功:按城市名删除一个城市信息,但删除不成功:按城市坐标删除一个城市信息,而且删除成功:按城市坐标删除一个城市信息,但删除不成功:显示删除一些城市信息后城市链表的内容:寻找以某点中心小于某个距离的所有城市信息,而且寻找成功:寻找以某点中心小于某个距离的所有城市信息,但寻找不成功:选择退出后的页面:四、结论1、实验结果实现了在城市链表中利用城市名和位置坐标进行有关查找、插入、删除、更新基本要求的操作。

城市链表课程设计

城市链表课程设计

城市链表课程设计一、教学目标本课程旨在通过学习城市链表的相关知识,让学生了解和掌握城市链表的基本概念、原理和应用。

具体目标如下:1.了解城市链表的基本概念和原理。

2.掌握城市链表的创建、插入、删除和查找等基本操作。

3.了解城市链表在城市规划和管理中的作用和应用。

4.能够运用城市链表解决实际问题,如城市交通管理、城市规划等。

5.能够使用相关软件工具进行城市链表的创建、编辑和管理。

情感态度价值观目标:1.培养学生的创新意识和解决问题的能力。

2.培养学生对城市规划和管理的社会责任感和使命感。

二、教学内容本课程的教学内容主要包括以下几个部分:1.城市链表的基本概念和原理:介绍城市链表的定义、特点和应用场景。

2.城市链表的创建和维护:讲解城市链表的创建方法、插入和删除操作的原理和实现。

3.城市链表的查找和应用:介绍城市链表的查找方法以及在城市规划和管理中的具体应用。

4.城市链表的实际案例分析:分析城市链表在实际城市规划和管理中的成功案例,探讨其优点和不足。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式进行教学。

包括:1.讲授法:通过讲解城市链表的基本概念、原理和应用,使学生掌握相关知识。

2.案例分析法:分析城市链表在实际城市规划和管理中的成功案例,让学生了解城市链表的实际应用。

3.实验法:学生进行城市链表的创建、插入、删除和查找等操作的实验,提高学生的动手能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选择一本适合学生层次的城市链表示意图料作为主要教学资源。

2.多媒体资料:制作课件、教案等多媒体资料,以图文并茂的形式展示城市链表的相关知识。

3.实验设备:准备计算机、网络设备等实验设备,为学生提供实际操作城市链表的机会。

4.参考书:提供相关的参考书籍,供学生课后自主学习和拓展知识。

五、教学评估本课程的教学评估将采用多元化方式进行,以全面、客观、公正地评估学生的学习成果。

城市链表课程设计

城市链表课程设计

湖南商学院《城市链表》课程设计(实习)报告题目姓名: 彭应品学号: 080910135专业: 电子信息工程班级: 电信0804指导教师: 李姣燕职称: 讲师计算机与电子工程学院2011年12月课程设计(实习)评审表课程设计(实习)作品验收表注:1. 除“验收情况”栏外,其余各栏均由学生在作品验收前填写。

2. “验收情况”栏由验收小组按实际验收的情况如实填写。

目录1 课程设计任务与要求 (1)1.2 问题分析 (1)2系统总体设计 (1)2.1 总体设计思想、设计方案的选择 (1)2.2 系统模块设计 (1)3 系统详细设计 (2)3.1 系统子程序及功能设计 (2)3.3 函数主要调用关系图 (3)4 系统详细设计 (3)4.1 数据类型定义 (3)4.2 系统主要子程序设计 (3)5 系统实现与测试 (6)5.1 建立城市链表 (6)5.2 浏览城市链表 (6)5.3城市链表的查找 (6)5.4 城市链表的插入 (7)5.6 城市链表的更新 (7)5.7 查看给定范围内的城市 (7)5.8文件的载入与保存 (8)5.9系统设置 (8)6软件使用说明书 (8)7 课程设计总结 (9)参考文献 (9)1 课程设计任务与要求1.1 课程设计任务将城市信息存在单链表里,对其实现常见的链表操作1.2 问题分析由若干个城市的信息,存入一个带头节点的单链表。

节点中的城市信息包括城市名,城市坐标,城市面积,城市人口等。

要求能够利用城市名和位置坐标进行有关的查找,插入,删除,更新等操作。

2系统总体设计为了实现上述需求可以从以下几个方面着手进行设计。

2.1 总体设计思想、设计方案的选择本系统主要采用链表结构类型来存储数据,其中节点由四个部分组成:城市名称,城市坐标,城市人口和城市面积。

2.2 系统模块设计本系统共设计了9个主要的子功能,各功能的描叙如下所述:(1)建立城市链表,可以一次性的输入多条城市的信息,建立城市信息表。

城市链表课程设计

城市链表课程设计

城市链表课程设计一、引言城市链表是指一个城市网络系统,通过连接不同的城市,形成一个有机的整体。

城市链表的设计与实现是城市规划和交通管理的重要组成部分。

本文将介绍城市链表的设计原理、应用场景以及实现方法。

二、城市链表的设计原理1. 城市链表的概念城市链表是由多个城市节点组成的有向图。

每个城市节点代表一个城市,节点之间的边表示城市之间的交通连接关系。

通过城市链表,可以方便地查找和管理城市之间的交通信息。

2. 城市节点的属性每个城市节点包含以下属性:- 城市名称:唯一标识一个城市的名称;- 经纬度:表示城市的地理位置;- 人口数量:反映城市的人口规模;- 交通状况:描述城市的交通拥堵程度。

3. 城市节点之间的连接关系城市节点之间的连接关系可以用边来表示,边的属性包括:- 距离:表示两个城市之间的距离;- 交通工具:表示两个城市之间的交通工具种类,如公路、铁路、航空等。

三、城市链表的应用场景1. 城市规划城市链表可以帮助城市规划部门进行城市布局和交通规划。

通过分析城市链表中城市节点之间的连接关系,可以确定城市之间的交通需求,合理规划道路和交通设施的建设。

2. 交通管理城市链表可以用于交通管理系统,帮助交通管理部门实时监控和调度城市交通。

通过城市链表,可以获取城市节点的交通状况,及时调整交通信号灯、交通流量等,以提高交通效率和减少拥堵。

3. 旅游规划城市链表可以帮助旅游部门进行旅游线路规划和推荐。

通过分析城市链表中城市节点之间的距离和交通工具,可以为游客提供最佳的旅游路线和交通方案。

4. 物流管理城市链表可以用于物流管理系统,帮助物流公司进行货物配送和仓储管理。

通过城市链表,可以确定不同城市节点之间的距离和交通工具,优化货物配送路线,提高物流效率。

四、城市链表的实现方法1. 数据结构城市链表可以使用图的数据结构来实现,每个城市节点可以用一个类或结构体来表示,节点之间的连接关系可以用邻接矩阵或邻接表来表示。

链表顺序表实验报告--数据结构与算法分析

链表顺序表实验报告--数据结构与算法分析
顺序表:
1.顺序表的定义
(1) 顺序存储方法
即把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。
(2) 顺序表(Sequential List)
用顺序存储方法存储的线性表简称为顺序表(Sequential List)。
2. 结点ai的存储地址
不失一般性,设线性表中所有结点的类型相同,则每个结点所占用存储空间大小亦相同。假设表中每个结点占用c个存储单元,其中第一个单元的存储地址则是该结点的存储地址,并设表中开始结点a1的存储地址(简称为基地址)是LOC(a1),那么结点ai的存储地址LOC(ai)可通过下式计算:
程序流程图
3.源程序清单:
//顺序表实现城市数据库
#include <iostream>
#include <string>
#include "stdlib.h"
#include <iomanip>
#include <fstream>
using namespace std;
#define LIST_INIT_SIZE 100
}
*q =e;
L.length++;
cout<<"插入成功"<<endl;
return;
}
cout<<"插入位置非法!"<<endl;
}
//按名字删除元素,并由e返回其值
void ListDelete_Name(SqList &L, string name, CityData &e)
{
if(L.length > 0)

数据结构链表课程设计

数据结构链表课程设计

数据结构链表课程设计一、课程目标知识目标:1. 理解链表的基本概念,掌握链表的存储结构及其特点。

2. 学会使用链表实现数据的插入、删除和查找等基本操作。

3. 了解链表在实际应用场景中的优势,如解决动态数据存储问题。

技能目标:1. 能够编写链表的初始化、插入、删除和查找等操作的代码。

2. 能够运用所学知识解决实际问题,如设计一个简单的链表应用系统。

3. 能够分析链表操作的时间复杂度和空间复杂度。

情感态度价值观目标:1. 培养学生独立思考、解决问题的能力,增强自信心。

2. 培养学生团队协作精神,学会在讨论和交流中共同进步。

3. 激发学生对数据结构学习的兴趣,提高自主学习能力。

分析课程性质、学生特点和教学要求,我们将课程目标分解为以下具体学习成果:1. 掌握链表的基本概念,能够用文字和图形描述链表结构。

2. 熟练编写链表相关操作代码,能够实现简单的链表应用。

3. 了解链表的优势和局限性,能够结合实际场景选择合适的数据结构。

4. 培养良好的编程习惯,注重代码的规范性和可读性。

5. 通过小组合作,培养学生的沟通协作能力和团队精神。

6. 提高学生对数据结构在计算机科学中重要性的认识,激发学习兴趣。

二、教学内容根据课程目标,本章节教学内容主要包括以下几部分:1. 链表基本概念:介绍链表的定义、分类(单向链表、双向链表、循环链表等),以及链表在数据结构中的重要性。

2. 链表的存储结构:讲解链表节点的定义,以及链表的内存存储方式。

3. 链表基本操作:- 初始化:介绍如何创建一个空链表。

- 插入:讲解链表节点插入的原理和实现方法,包括头插法和尾插法。

- 删除:阐述链表节点删除的原理,以及如何实现删除指定节点。

- 查找:介绍如何在链表中查找指定元素,并实现相关功能。

4. 链表应用案例分析:分析实际应用场景,如多项式表示、约瑟夫问题等。

5. 链表性能分析:讨论链表操作的时间复杂度和空间复杂度。

教学内容安排和进度如下:1. 第1课时:链表基本概念、存储结构。

城市链表实验报告汇总

城市链表实验报告汇总

2014-2015学年第一学期实验报告课程名称:算法与数据结构实验名称:城市链表一、实验目的本次实验的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。

同时,通过本次实验帮助学生复习高级语言的使用方法。

二、实验内容(一)城市链表:将若干城市的信息,存入一个带头结点的单链表。

结点中的城市信息包括:城市名,城市的位置坐标。

要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。

(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4(正确的结果应为6,1,4,7,2,3,5)。

三、实验环境VS2010 、win8.1四、实验结果(一)城市链表:(1)创建城市链表;(2)给定一个城市名,返回其位置坐标;(3)给定一个位置坐标P 和一个距离D,返回所有与P 的距离小于等于D 的城市。

(4)在已有的城市链表中插入一个新的城市;(5)更新城市信息;(6)删除某个城市信息。

(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4输出6,1,4,7,2,3,5。

五、附录城市链表:5.1 问题分析该实验要求对链表实现创建,遍历,插入,删除,查询等操作,故使用单链表。

5.2 设计方案该程序大致分为以下几个模块:1.创建城市链表模块,即在空链表中插入新元素。

故创建城市链表中包涵插入模块。

2.返回位置坐标模块。

3.计算距离模块4.插入模块。

5.更新城市信息模块6.删除信息模块。

5.3 算法5.3.1 根据中心城市坐标,返回在距离内的所有城市:void FindCityDistance(citylist *L){//根据距离输出城市……//输入信息与距离L=L->next;while(L != NULL){if(((L->x-x1)*(L->x-x1)+(L->y-y1)*(L->y-y1)<=dis*dis)&&(((L-> x-x1)+(L->y-y1))!=0 )){printf("城市名称%s\n",L->Name);printf("城市坐标%.2lf,%.2lf\n",L->x,L->y);}L=L->next;}}该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用横坐标差的平方+纵坐标差的平方 <= 距离的平方判定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计实验报告
实验一链表部分选题为:2.4.3—城市链表
1、需求分析
(1)创建一个带有头结点的单链表。

(2)结点中应包含城市名和城市的位置坐标。

(3)对城市链表能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。

(4)能够对每次操作后的链表动态显示。

2、概要设计
为了实现以上功能,可以从以下3个方面着手设计。

(1)主界面设计
为了实现城市链表相关操作功能的管理,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本程序。

本系统主控菜单运行界面如下所示。

(2)存储结构设计
本系统主要采用链表结构类型来表示存储在“城市链表”中的信息。

其中链表结点由4个分量组成:城市名name、城市的横坐标posx、城市的纵坐标posy、指向下一个结点的指针next。

(3)系统功能设计
本程序设计了9个功能子菜单,其描述如下:
①建立城市链表。

由函数creatLink()实现。

该功能实现城市结点的输
入以及连接。

②插入链表记录。

由函数insert()实现。

该功能实现按坐标由小到大
的顺序将结点插入到链表中。

③查询链表记录。

由searchName()函数和searchPos()函数实现。

其中searchName()实现按照城市名查询的操作,searchPos()实现按照城市坐标查询的操作。

④删除链表记录。

由delName()函数和delPos()函数实现。

其中
delName()函数实现按照城市名删除的操作,delPos()函数实现按照城市
坐标删除的操作。

⑤ 显示链表记录。

由printList ()函数实现。

该功能实现格式化的链
表输出操作,可以显示修改后的链表状态。

⑥ 更新链表信息。

由update ()函数实现。

该功能实现按照城市名更
新城市的坐标信息。

⑦ 返回城市坐标。

由getPos ()函数实现。

该功能实现给定一个已存
储的城市,返回其坐标信息的操作。

⑧ 查看与坐标P 距离小于等于D 的城市。

由getCity ()函数实现。


功能实现返回与给定坐标P 距离小于等于D 的城市名称。

⑨ 退出链表系统。

由exit (0)实现。

3、 模块设计
(1)模块设计
本程序包含两个模块:主程序模块和链表操作模块。

其调用关系如下图所示:
(2)系统子程序及功能设计
本系统共设置3个子程序,各程序的函数名及功能说明如下:
① Linklist creatLink()
城市名 2.按城市坐标 \t选择: ");
scanf("%d",&way);
if(way==1)
{
printf("\n请输入城市名:");
scanf("%s",name);
flag=searchName(L,name);
if(flag==0) printf("无此城市记录,查找失败!\n");
}
else if(way==2)
{
printf("请输入横坐标x: ");
scanf("%d",&px);
printf("请输入纵坐标y: ");
scanf("%d",&py);
flag=searchPos(L,px,py);
if(flag==0) printf("无此城市记录,查找失败!\n");
}
else printf("城市链表中无记录!\n");
}
break;
}
else printf("链表中无记录!\n");
break;
}
case 4:城市名称 2. 按城市坐标 \t选择: ");
scanf("%d",&way);
if(way==1)
{
printf("请输入城市名称: ");
scanf("%s",name);
flag=delName(L,name);
if(flag)
{
printf("删除%s城市后:\n",name);
printList(L);
}
else printf("无该名字的城市,删除失败!\n");
}
else if(way==2)
{
printf("请输入横坐标x: ");
scanf("%d",&px);
printf("请输入纵坐标y: ");
scanf("%d",&py);
flag=delPos(L,px,py);
if(flag)
{
printf("删除坐标为(%d,%d)的城市后:\n",px,py);
printList(L);
}
else printf("无该坐标的城市,删除失败!\n");
}
else printf("ERROR!!\n");
break;
}
case 5:xe”。

(2)进入本系统后,可以选择菜单功能项,首先选择功能1建立城市链表的基本数据后方可进行2-8的功能。

(3)在查询和删除链表记录中,均可以根据需要按照两种方式执行链表操作,一种是按照城市的名称,一种则是按照城市的坐标实现。

相关文档
最新文档