城市链表实验报告完整资料.docx
《城市链表实验报告完整资料.docx》由会员分享,可在线阅读,更多相关《城市链表实验报告完整资料.docx(56页珍藏版)》请在冰豆网上搜索。
城市链表实验报告完整资料
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根据中心城市坐标,返回在距离内的所有城市:
voidFindCityDistance(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;
}
}
该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用
横坐标差的平方+纵坐标差的平方<=距离的平方判定.
因中心城市本身也在判定范围之内,所以添加了判定条件横纵坐标差的和不能为零.
5。
3。
2
主程序中循环条件判定:
for(;;){
ﻩprintf("请选择您的操作\n");
printf(”1.创建城市链表\n”);
ﻩprintf("2.根据名字查询城市\n");
ﻩﻩprintf("3。
插入\n");
ﻩﻩprintf(”4。
删除\n”);
printf(”5.更新城市信息\n");
ﻩﻩprintf("6。
根据离中心坐标距离查看城市\n");
ﻩprintf("7.退出系统\n");
ﻩscanf("%d",&choice);
switch(choice){
……//case语句
case7:
break;
}
if(choice ==7)
break;
ﻩﻩ}
若用户选择了退出系统选项,则首先跳出switch在跳出for循环结束程序。
是
5.4流程图
5.5程序源代码
typedefstructcitylist {
charName[20];
doublex,y;
citylist*next;
}citylist,*L;
voidInitList_SqCity(citylist*L){
//初始化节点
L->next=NULL;
}
voidInsert_sqCity(citylist*L){
//在链表中插入元素
ﻩcitylist*newNode;
ﻩnewNode=(citylist*)malloc(sizeof(citylist));
if(!
newNode)
ﻩﻩprintf(”存储分配失败");
ﻩprintf("请输入城市名\n");
ﻩscanf("%s",newNode—>Name);
printf("请输城市坐标x y\n");
scanf("%lf%lf”,&(newNode->x),&(newNode->y));
while(L->next!
= NULL){
ﻩL =L-〉next;
ﻩ}//如果非空,L指针的位置向后移
newNode—〉next=L—>next;
ﻩL-〉next=newNode;
}
void Create_sqCity(citylist*L){
//创建链表charch[100];
int i;
printf(”输入END退出,输入其余值继续\n”);//当输入END时,在任意输入,则退出此操作
ﻩscanf(”%s",ch);
for(;strcmp(ch,"END")!
=0; ){
Insert_sqCity(L);
printf("输入END退出,输入其余值继续\n”);
ﻩﻩscanf("%s",ch);
}
}
voidGet_sqCityCoord(citylist*L){
ﻩ//输入城市信息返回坐标
char ch[10];
ﻩprintf(”输入要查询的城市”);
ﻩscanf("%s”,ch);
while(L-〉next!
=NULL &&strcmp(L-〉next-〉Name,ch)){
L=L—>next;
}
if(L—〉next ==NULL)
printf("城市不存在");
else{
ﻩprintf("%。
2lf,%.2lf\n”,L->next—〉x,L->next-〉y);
ﻩ}
}
void Delete_sqCity(citylist*L){
//删除城市信息 ,按名称/坐标
printf("请输入城市名\n”);
charch[10];
ﻩscanf("%s",ch);
while(L-〉next!
=NULL&&strcmp(L-〉next->Name,ch)){
ﻩL=L->next;
}
if(L—〉next== NULL)
ﻩprintf("城市不存在");//删除位置不合理
L—>next=L—>next—>next;
printf("删除城市成功”);
}
voidFindCityDistance(citylist*L){
//根据距离输出城市
ﻩprintf(”输入中心城市坐标");
doublex1,y1;
scanf(”%lf%lf",&x1,&y1);
printf(”输入距离");
doubledis;
ﻩscanf(”%lf”,&dis);
ﻩ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;
}
}
void Update_sqCity(citylist*L){
//更新城市信息
charch[10];
printf(”请输入您要更新的城市名\n");
scanf("%s”,ch);
while(strcmp(L-〉next—〉Name,ch)){
L=L—>next;
ﻩ}
if(L-〉next == NULL)
printf("城市不存在\n”);
ﻩprintf("请输入城市新信息:
\n”);
ﻩprintf(”请输入城市新名\n");
ﻩscanf("%s",L-〉next-〉Name);
printf("请输入城市新坐标\n”); scanf(”%lf%lf”,&(L-〉next->x),&(L->next-〉y));
}
intmain(){
citylist *L;
L=(citylist*)malloc(sizeof(citylist));
ﻩInitList_SqCity(L);
for( ;;){
ﻩprintf("-—---—---——-——--—-—-—-———--—-----——\n");
printf("请选择您的操作\n");
printf("1。
创建城市链表\n");
printf(”2.根据名字查询城市\n”);
ﻩﻩprintf("3.插入\n”);
ﻩprintf(”4.删除\n”);
ﻩprintf(”5。
更新城市信息\n”);
ﻩﻩprintf("6.根据离中心坐标距离查看城市\n");
printf("7.退出系统\n”);ﻩprintf("-——--—--—--—---—---——--—--—-—--————\n”);
intchoice;
ﻩscanf(”%d”,&choice);
switch(choice){
case1:
ﻩﻩCreate_sqCity(L);
ﻩﻩgetchar();
break;
case2:
ﻩGet_sqCityCoord(L);
break;
case3:
ﻩﻩﻩInsert_sqCity(L);
break;
case4:
ﻩﻩDelete_sqCity(L);
break;
case5:
ﻩﻩUpdate_sqCity(L);
break;
case 6:
ﻩFindCityDistance(L);
break;
case7:
break;
ﻩﻩ}
if(choice==7)
break;
ﻩ}
}
5.6仿真结果
2.查询城市信息
3添加城市
4删除城市
5更新城市
6根据距离输出城市
5.7调试心得
5。
7。
1错误分析:
实验中出现的第一个问题是声明变量,从键盘中读入数据是显示变量未初始化,调试后发现是scanf的问题,以后的实验中应注意scanf中读入信息后是存到了地址里。
5.7。
2算法复杂度的分析:
所有程序 除了InitList_SqCity复杂度为O
(1),其余均为O(n)。
5.7.3 收获
对数据结构这门课地应用有了一定地了解,知道对线性表插入、删除等操作的实现,加深对课本地理解.
附录
约瑟夫环:
5。
1问题分析
该实验要求循环连续查找信息,并删除节点,故使用单项循环链表.
5。
2设计方案
1。
建立单循环链表
2。
产生Joseph环
3.输出顺序表
5.3算法
5.3。
1构成单链表
voidCreat_JoephLink(intnum){
Node*head,*q,*L;
L=(Node*)malloc(sizeof(Node));//申请第一个数的节点
head=L;
L->num=1;
printf("输入第一个人的值:
”);//输入第一个人的值
scanf("%d",&(L-〉value));
inti;
for(i=2;i〈=num;i++){
q=(Node*)malloc(sizeof(Node));
L—>next=q;
L=q;
printf(”输入第%d个人的值:
",i);//输入每个人的值
scanf("%d",&(L—>value));
L->num=i;
}
L->next=head;
L=head;//构成单向循环链表
}
5。
3.2查找并删除节点
StatusDelete_Node(Node*L){
for(j=1;j<=num;j++){
for(i=1;i<m;i++){//i做循环变量
L=L—〉next;
}
m=L—〉value;//将当前值设为m值
printf(”%d ”,L—〉num);//输出当前节点信息
//删除当前节点
L-〉num=L—>next—〉num;
L->value=L->next->value;
q=L->next;
L->next=L->next->next;
free(q);
}
}
5.4源程序代码
typedefstructNode{
intvalue;
Node*next;
intnum;
}Node;
voidCreat_JoephLink(intnum){
Node*head,*q,*L;
L=(Node*)malloc(sizeof(Node));//申请第一个数的节点
head=L;
L->num=1;
printf("输入第一个人的值:
”);//输入第一个人的值
scanf(”%d”,&(L—〉value));
inti;
for(i=2;i<=num;i++){
q=(Node*)malloc(sizeof(Node));
L->next=q;
L=q;
printf(”输入第%d个人的值:
”,i); //输入每个人的值
scanf("%d",&(L-〉value));
L—>num=i;
}
L->next=head;
L=head;//构成单向循环链表
int m;
intj;
printf(”输入初始值m的大小”);
scanf("%d",&m);
printf("结果是:
\n");
for(j=1;j<=num;j++){
for(i=1;iL=L—>next;
}
m=L->value;//将当前值设为m值
printf("%d",L->num);//输出当前节点信息
//删除当前节点
L—〉num=L-〉next->num;
L->value=L->next—〉value;
q=L—〉next;
L—>next=L->next-〉next;
free(q);
}
}
intmain(){
intnum;
printf(”输入人数:
"); /*输入测试人的数量*/
scanf("%d",&num);
Creat_JoephLink(num);
}
5.5运行结果
5.6调试心得
5.6。
1错误分析
查找到第m个节点删除时出错,显示有未处理的异常,是因为节点赋值的时候有问题.
5。
6。
2收获
从开始构建循环链表然后实现约瑟夫环功能的过程中,中途也遇见一些问题,但都逐一克服,整个过程进展不是很顺利,都是不停的调试,实验之后,我还对数据结构这门课有了一定的认识。
在解决一个具体问题时,常常需要从具体问题中抽象出一个模型,也就是抽象数据类型,然后设计一个解决这个模型的算法.再通过其算法编出程序,进行调试、调整直至得到最终解答.
城市轨道交通运营管理专业调研报告
一、专业人才的社会需求和预测分析
(一)预计区域人才需求量
从全国来看:
随着城市轨道交通线路的开通运营,对运营管理方面的专业人才需求将不断扩大。
从横向来看,城市轨道交通公司发布的职位大致有四类,分别是工程技术类、安全保障类、商务拓展类和运营管理类,而运用管理类的人才则需要有很强的专业性,需要具备一定专业技能、有经验的人士担任。
城市轨道交通是技术密集型行业,采用国内外当前最先进的设备和高新技术,从业人员必须具备专门理论知识和智能化的操作技能,经过专门教育的、高职层次的一线操作和管理人员将是未来几十年城市轨道交通运营管理人才培养的重点。
城市轨道交通运营管理类的职位不是传统意义上的企管,而是要对轨道交通领域的运输、组织、管理、调度等十分熟悉的专业技能型人才。
现有的城市轨道交通运营管理人才数量远远不能满足城市轨道交通产业发展的需要,而且相关人才的技能水平和职业能力与企业发展需求也存在较大差距。
通常平均每公里地铁线路所需的员工数为50到80人,到2020年,我国城市轨道交通累计营业里程将达到7395公里,照此计算,相关人才的需求量将为369750人至591600人.以现有的人才需求结构来看,其中60%为运营管理人员,故至2020年,城市轨道交通需要的运营管理人员将达到221850人至354960人.
(二)、我国城轨行业人才培养面临的主要难题 我国城市行业正处在蓬勃发展期,需要大量的专业、技术及技能人才,然而受制于人才成长的周期性长、资源稀缺等客观现实,我国城轨行业人才培养面临诸多难题。
1.人才培养需求与培训资源稀缺的矛盾日益突出 培训规模庞大.从2011年到2015年,我国城市轨道交通新线开通约1500公里,每年开通约300公里,需要新员工约18000人.这些新员工必须经过岗前培训,掌握必备的岗位技能才能上岗以满足新线开通的需求。
仅就这批人员而言,我国城市轨道的新员工技能培训总量达到1200万人*天,如再加上老员工必须持续不断地开展在岗技能培训。
我国城市轨道线网超常规的发展带来培训量大规模的增加. 培训资源稀缺。
与学校教育有所不同,城市轨道交通行业的技术实践特点,决定了它的实用型人才培养必须借助大量的培训设备、现场实践和跟岗作业等资源和手段。
由于大部分城市地铁处于规划和建设时期,各项培训资源都在储备阶段,培训资源严重缺乏,新建城市地铁不得不依赖北京、上海、广州等企业的培训资源,而成熟企业也面临培训设施不足、培训设备陈旧、培训资源超负荷使用等困难,培训设备设施的匮乏阻碍了地铁人才的培养和发展。
2.人才培养质量与培训方式陈旧的矛盾日益突出 培训质量要求高.培训质量的高低、培训效果的好坏,直接表现为员工知识理论与实际的结合,员工的实际动手能力以及处理故障的能力,这决定新线开通运营水平.随着轨道交通线网不断拓展,新技术、新工艺广泛使用,各城市对新线开通水平的要求越来越高,对培训质量的要求也逐步提高,加强员工理论培训的同时,更强调员工的实际操作技能和处理突发故障能力的培训。
传统培训方式的弊端。
传统的培训方式主要以知识发展为导向,重视人才理论知识的培养,忽视了职业技能和动手能力的培养。
面对全国轨道交通的高速发展,设备设施、技术工艺的不断更新,传统的培训方式、实施方法和运作模式难以满足城轨人才培养的要求,传统的培训体制已无法有效支撑城轨行业人才发展战略。
目前,由于我国尚未建立统一的城轨人才培训标准,导致不同城轨企业培养出来的人员水平参差不齐,培训质量难以保证,影响了新线的开通运营。
3。
人才培养速度与培训能力不足的矛盾日益突出 培训时间十分紧迫。
各城市新建城市轨道高速度和高密度的开通,要求人员培养时间越来越短,而传统的人才培养周期都比较长,以客车司机为例,过去培养一个司机,至少需要1年时间的培训才能达到上岗要求。
时间紧、任务重成为各新建城轨企业在人才培养方面所面临的普遍问题. 培训能力不足。
培训能力主要包括教授能力和课程开发能力,指针对学员需要提升的技能短板,有针对性地开发课程,并能通过科学合理地进行授课或辅导,有效地快速地提升学员的技能.目前,我国城市轨道交通企业的培训能力与培训需要差距很大。
究其原因,一是大多是城市轨道交通处于规划和建设期,基本没有具有现场实操经验的培训讲师;二是对于一个合格培训讲师来说,需要多年专业知识的积累和沉淀,但是由于城市轨道建设和开通运营的压力,导致绝大多数专业技术人员根本没有精力专门沉淀专业知识,从事培训讲师或专业课程开发的相关工作. (三)、解决我国城市轨道交通企业人才培养难题的主要途径 1。
企业加大自主培养人才的力度 我国城市轨道交通行业各企业均高度重视培训,不断地加强培训的力度和强度,在师资培养、经费等资源上都大力倾斜,成立培训学校或培训中心,专门负责培训的组织管理和教授等工作,如北京地铁、上海地铁、广州地铁等。
这种模式不仅可以紧密结合企业自身的实际需求,有针对性地培养人才,同时也能够“教学相长”,在培训学员的同时,促进培训讲师快速成长,不断地沉底企业自己的专业、技术及技能经验.不过,这需要企业员工在专业、技术及技能方面有一定的积累,方可自主快速地培养自己的人才。
2。
强化校企合作培养城轨专业、技术及技能人才 通过联合办学、委托培养、订单班培养等方式,高等院校同企业结合成合作伙伴关系,高校、企业共享师资、教学设施等资源,实现高校与企业资源互补、利益共赢、共同发展的人才培养模式.如上海地铁运营有限公司和上海工程技术大学共同成立城市轨道交通学院,合作培养专业技术人才。
这种模式对高校来说,可以构建品牌,吸引招生,促进学生就业,培养直接满足企业需求的技术技能人才。
对于企业来讲,通过提前介入学生在校学习,缩短培养期,同时通过企业文化的宣导,可缓解招聘的压力.总的来说,校企合作是高校和企业共赢的人才培养方式,在一定时期将是缓解轨道交通行业人才困境的重要手段。
但是,由于高校毕业生都很年轻,学习动力和意识相对不足,仅通过企业提前介入与学校合作培养,更多地还是知识层面的,学员比较难以积累实战经验。
因此,后续在工作中的学习和培训显得更加重要。
3。
“企企合作”培养实操性的技术及技能人才 为实现“工作学习化、学习工作化”,由某一行业或同一行业的企业通过共同出资、平等互利的方式,联合组建和发展的培训学员或企业大学,如UT斯达康大学,金蝶大学等。
这种模式可以通过整合行业企业员工教育与培训的师资、财力等资源,通过发挥行业培训中心的辐射功能,有效解决行业内一些企业领导培训意识差,培训经费匮乏、培训师资短缺,企业员工知识陈旧、技术技能素质不高等问题。
这种模式的关键在于要建立科学的管理体制,将“企企合作"中的企业各类资源有效整合和利用。
4。
搭建城轨行业内沟通交流的平台,不断地促进知识、经验共享 通过成立行业联合企业大学,搭建了一个行业内能够充分沟通交流的学习成长平台。
各股东单位员工,甚至行业内各城市轨道企业的员工,均可充分利用该平台学习其他企业的管理经验,交流企业值得推广的做法,促进行业综合管理水平,建设和管理城市轨道的经验、知识的沉淀和积累。
通过行业联合企业大学,各股东定期地进行交流学习,同时,通过这种平台,可以不断地促进,企业知识经验的共享,甚至专家、故障难点问题解决的共享。
行业联合企业大学将整合各股东的培训师、培训课程、培训设施(模拟培训设施)等资源,通过合理的配置,充分发挥各类资源的价值,促进构建在各股东单位内能充分利用的培训资源。
这种整合各股东企业培训资源的方式,能够最大可能地促进知识经验的共享。
这种共享知识的方式,是一种集约式的发展模式,可以充分发挥各自的优势,取长补短、各取所需.这种知识共享的核心是如何整合各类资源,特别是培训师的资源。
(四)系统构建培训课程管理体系,可集中优势开发精品专业技术课程 行业联合企业大学应按照市场化的运作方式,根据城市轨道的培训需求,有针对性地构建培训课程体系,同时根据各级特殊需求定制化地开发课程,提供定制化专业技术