资源描述
数据结构课程设计报告报告(论文)题目:交通系统系统设计及一元 高次多项式的加减乘运算 作者所在系部: 计算机系 作者所在专业: 计算机科学与技术 目 录第1章 问题描述41.1题目内容41.1.1交通咨询系统设计41.1.2一元高次多项式的加、减、乘运算41.2基本要求51.2.1交通咨询系统设计51.2.2一元高次多项式的加、减、乘运算51.3 测试数据51.3.1交通咨询系统设计51.3.2一元高次多项式的加、减、乘运算5第2章 需求分析62.1功能说明62.1.1交通咨询系统设计62.1.2一元高次多项式的加、减、乘运算62.2输入说明62.2.1交通咨询系统设计62.2.2一元高次多项式的加、减、乘运算62.3输出说明62.3.1交通咨询系统设计62.3.2一元高次多项式的加、减、乘运算72.4测试数据72.4.1交通咨询系统设计72.4.2一元高次多项式的加、减、乘运算7第3章 概要设计83.1抽象数据类型定义83.1.1交通咨询系统设计83.1.2一元高次多项式的加、减、乘运算93.2程序模块结构93.2.1交通咨询系统设计93.2.2一元高次多项式的加、减、乘运算10第4章 详细设计114.1定义的数据类型114.1.1交通咨询系统设计111元素类型、结点类型和指针类型114.1.2一元高次多项式的加、减、乘运算201元素类型、结点类型和指针类型204.2函数间的调用关系234.2.1交通咨询系统设计234.2.2一元高次多项式的加、减、乘运算24第5章 调试分析255.1调试过程分析255.1.1交通咨询系统设计255.1.2一元高次多项式的加、减、乘运算255.2算法的时空分析255.2.1交通咨询系统设计255.2.2一元高次多项式的加、减、乘运算25第6章 使用说明266.1交通咨询系统设计266.2一元高次多项式的加、减、乘运算26第7章 测试结果277.1交通咨询系统设计277.2一元高次多项式的加、减、乘运算29参考文献33附 录34第1章 问题描述1.1 题目内容1.1.1 交通咨询系统设计设计一个交通咨询系统,能让旅客咨询从任一城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。对于不同咨询要求,可输入城市间的路程或所需时间或所需费用。1.1.2 一元高次多项式的加、减、乘运算用链表表示一元高次多项式,实现两个多项式的加、减、乘运算。1.2 基本要求1.2.1 交通咨询系统设计1创建图的存储结构使用邻接矩阵。2查询分为两类。一类是能让旅客咨询从一个城市到另外所有城市的最短路径(要求使用迪杰斯特拉算法),显示出所有路径,按升序排列。第二类是任意两个城市间的最短路径(要求使用弗洛伊德算法),显示最短路径。3按给定交通地图完成以上功能。1.2.2一元高次多项式的加、减、乘运算1.描述多项式时,将每个子项看成是由系数和指数两部分组成。2.输入并创建一元多项式,以链表作为存储结构。3.实现两个多项式的相加、相减和相乘运算。4.显示多项式,查看运算结果。5.用户界面包括以下功能:创建 加法 减法 乘法 显示 退出1.3 测试数据1.3.1 交通咨询系统设计 任意输入所需要查找的一个或两个城市,然后查找最短距离、最少花费和最短时间。1.3.2 一元高次多项式的加、减、乘运算2X4+3X4=5X46X3+3X5=6X3+3X57X9*4X5=28X45 第2章 需求分析2.1 功能说明2.1.1 交通咨询系统设计查询分为两类。一类是能让旅客咨询从一个城市到另外所有城市的最短路径,显示出所有路径,按升序排列。第二类是任意两个城市间的最短路径,显示最短路径。2.1.2 一元高次多项式的加、减、乘运算描述多项式时,将每个子项看成是由系数和指数两部分组成。输入并创建一元多项式,以链表作为存储结构。实现两个多项式的相加、相减和相乘运算。显示多项式,查看运算结果。2.2 输入说明2.2.1 交通咨询系统设计用户根据自己所需要的利用交通系统查询的功能自己进行查询。2.2.2 一元高次多项式的加、减、乘运算程序运行后显现提示信息,由用户输入两个多项式,由用户自行选择加减乘功能进行运算。2.3 输出说明2.3.1 交通咨询系统设计根据用户不同的选择功能输出不同。2.3.2 一元高次多项式的加、减、乘运算用户输入数据完毕,程序将输出运算结果。2.4 测试数据2.4.1 交通咨询系统设计用户自行选择功能,可进行按序号查找和按名称查找。2.4.2 一元高次多项式的加、减、乘运算测试数据应为两组整数,正负都没有关系。第3章 概要设计3.1 抽象数据类型定义3.1.1 交通咨询系统设计为实现上程序功能,应创建图的存储结构并使用邻接矩阵表示集合。1建图的存储结构typedef structint vexsmax; string namemax; int costmaxmax;int distancemaxmax;int timemaxmax; int vnm,enm; mgraph; 2邻接矩阵void create(mgraph &g,int n,int e) int i,j; g.vnm=n; g.enm=e; for(i=1;i=g.vnm;i+)g.vexsi=i; /对应数组下标即为城市代号for(i=1;i=g.vnm;i+) /初始化for(j=1;j=g.vnm;j+) if(i=j) g.distanceij=0; g.costij=0; g.timeij=0; else g.distanceij=MAX; g.costij=MAX;g.timeij=MAX; 3.1.2 一元高次多项式的加、减、乘运算链表和数组的使用,下面是链表的定义:typedef structdouble xishu;double zhishu;LNode,*LinkList;数组的定义:LNode a2,b3;3.2 程序模块结构3.2.1 交通咨询系统设计本程序包含主程序、最少花费、最短距离、最少时间模块和迪杰斯特拉算法、弗洛伊德算法模块等三个模块。最少花费、最短距离、最少时间模块实现判断两城市之间信息。迪杰斯特拉算法、弗洛伊德算法模块实现两城市之间的各种信息的具体计算。三个模块间的调用关系如图3-1所示。图3-1 模块间的调用关系图3.2.2 一元高次多项式的加、减、乘运算本程序包含主程序、加减乘运算函数模块显示模块三个模块。加减乘模块是用来计算一元高次多项式的加减乘的核心模块。显示模块是用来显示计算结果的模块。三个模块间的调用关系如图3-2所示。图3-2 模块间的调用关系图第4章 详细设计4.1 定义的数据类型4.1.1 交通咨询系统设计1元素类型、结点类型和指针类型typedef structint vexsmax; string namemax; int costmaxmax;int distancemaxmax;int timemaxmax; int vnm,enm; mgraph; st;2图和邻接矩阵的定义/图的有关信息typedef struct int sign; int len; int hour;int spend;save; /存放城市代号和距离void create(mgraph &g,int n,int e) int i,j; g.vnm=n; g.enm=e; for(i=1;i=g.vnm;i+)g.vexsi=i; /对应数组下标即为城市代号for(i=1;i=g.vnm;i+) /初始化for(j=1;j=g.vnm;j+) if(i=j) g.distanceij=0; g.costij=0; g.timeij=0; else g.distanceij=MAX; g.costij=MAX;g.timeij=MAX; 3迪杰斯特拉算法和弗洛伊德算法利用迪杰斯特拉算法和弗洛伊德算法计算最少花费、最短距离、最少时间。其基本操作的伪码算法如下:迪杰斯特拉一城至诸城最少花费void shortestcost(mgraph g,int v0) int i,v,pre,w,min,k,j; int finalmax; int pmax; save dmax; int m,n; for(v=1;v=g.vnm;v+) finalv=0;dv.spend=g.costv0v; dv.sign=v; pv0=-1; if(dv.spendMAX&v!=v0) pv=v0; if(dv.spend=MAX) pv=-2; dv0.spend=0; finalv0=-1; for(i=2;i=g.vnm;i+) min=MAX; for(w=1;w=g.vnm;w+) if(!finalw) if(dw.spendmin) v=w; min=dw.spend; finalv=1; for(w=1;w=g.vnm;w+) /修改d中存放的最短距离和前驱结点if(!finalw&(min+g.costvwdw.spend) dw.spend=min+g.costvw; dw.sign=w; pw=v; /选择排序法for(i=1;ig.vnm;i+) k=i; for(j=i+1;j=g.vnm;j+) if(dj.spenddk.spend) k=j; if(k!=i) n=dk.sign;dk.sign=di.sign;di.sign=n; m=dk.spend;dk.spend=di.spend;di.spend=m; for(i=1;i=g.vnm;i+) if(di.sign!=v0) cout 从setw(2)v0到setw(2)di.sign城市最少花费:setw(4)di.spend ; cout 所经过的路径:; cout0) cout-g.namepre; pre=ppre; coutendl; /迪杰斯特拉一城至诸城最短时间void shortesttime(mgraph g,int v0) int i,v,pre,w,min,k,j; int finalmax; int pmax; save dmax; int m,n; for(v=1;v=g.vnm;v+) finalv=0;dv.hour=g.timev0v; dv.sign=v; pv0=-1; if(dv.hourMAX&v!=v0) pv=v0; if(dv.hour=MAX) pv=-2; dv0.hour=0; finalv0=-1; for(i=2;i=g.vnm;i+) min=MAX; for(w=1;w=g.vnm;w+) if(!finalw) if(dw.hourmin) v=w; min=dw.hour; finalv=1; for(w=1;w=g.vnm;w+) /修改d中存放的最短距离和前驱结点if(!finalw&(min+g.timevwdw.hour) dw.hour=min+g.timevw; dw.sign=w; pw=v; /选择排序法for(i=1;ig.vnm;i+) k=i; for(j=i+1;j=g.vnm;j+) if(dj.hourdk.hour) k=j; if(k!=i) n=dk.sign;dk.sign=di.sign;di.sign=n; m=dk.hour;dk.hour=di.hour;di.hour=m; for(i=1;i=g.vnm;i+) if(di.sign!=v0) cout 从setw(2)v0到setw(2)di.sign城市最短时间:setw(2)di.hour ; cout 所经过的路径:; cout0) cout-g.namepre; pre=ppre; coutendl; /迪杰斯特拉算法void shortestdistance(mgraph g,int v0) int i,v,pre,w,min,k,j; int finalmax; int pmax; save dmax; int m,n; for(v=1;v=g.vnm;v+) finalv=0;dv.len=g.distancev0v; dv.sign=v; pv0=-1; if(dv.lenMAX&v!=v0) pv=v0; if(dv.len=MAX) pv=-2; dv0.len=0; finalv0=-1; for(i=2;i=g.vnm;i+) min=MAX; for(w=1;w=g.vnm;w+) if(!finalw) if(dw.lenmin) v=w; min=dw.len; finalv=1; for(w=1;w=g.vnm;w+) /修改d中存放的最短距离和前驱结点if(!finalw&(min+g.distancevwdw.len) dw.len=min+g.distancevw; dw.sign=w; pw=v; /选择排序法for(i=1;ig.vnm;i+) k=i; for(j=i+1;j=g.vnm;j+) if(dj.lendk.len) k=j; if(k!=i) n=dk.sign;dk.sign=di.sign;di.sign=n; m=dk.len;dk.len=di.len;di.len=m; for(i=1;i=g.vnm;i+) if(di.sign!=v0) cout 从setw(2)v0到setw(2)di.sign城市最短路径:setw(4)di.len ; cout 所经过的路径:; cout0) cout-g.namepre; pre=ppre; coutendl; 4主函数的伪码算法void main() mgraph g; create(g,25,30); int num; string name; do cout -交通咨询系统- endl; cout +城市名称及代码+ endl; cout 1 :北京 2 :长春 3 :成都 4 :大连 5 :福州 6 :广州 7 :贵阳endl; cout 8 :哈尔滨 9 :呼和浩特 10:昆明 11:兰州 12:柳州 13:南昌endl; cout 14:南宁 15:上海 16:沈阳 17:深圳 18:天津 19:武汉endl; cout 20:乌鲁木齐 21:西安 22:西宁 23:徐州 24:郑州 25:株州endl; cout +endl; coutendl; cout * 1一城至诸城 2任意两城 3退出系统*endl; coutnum; switch(num) case 1: onecity(g); break; case 2: twocity(g); break; case 3: cout 退出系统成功!endl;break; default: cout 无此选项!请重新输入:endl; break; while(num!=3);return; 4.1.2 一元高次多项式的加、减、乘运算1元素类型、结点类型和指针类型typedef structdouble xishu;double zhishu;LNode,*LinkList;LNode a2,b3;2.加减乘的运算下面是加法运算的伪代码:void jia() /加法if(a0.zhishu=a1.zhishu) /如果指数相等,让两系数相加b0.xishu=a0.xishu+a1.xishu; / b0.xishu是两系数之和if(a0.zhishu=0&a1.zhishu=0)if(a0.xishu=0&a1.xishu=0)cout0endl;if(a0.xishu=0&a1.xishu!=0)couta1.xishuendl;if(a0.xishu!=0&a1.xishu=0)couta0.xishuendl;if(a0.xishu!=0&a1.xishu!=0) coutb0.xishuendl;if(a0.zhishu!=0&a1.zhishu!=0)if(a0.xishu=0&a1.xishu=0)cout0endl;if(a0.xishu=0&a1.xishu!=0)couta1.xishuXa1.zhishuendl;if(a0.xishu!=0&a1.xishu=0)couta0.xishuXa0.zhishuendl;if(a0.xishu!=0&a1.xishu!=0) coutb0.xishuXa0.zhishuendl;if(a0.zhishu!=a1.zhishu) /指数不等if(a0.zhishu=0&a1.zhishu!=0)if(a0.xishu=0&a1.xishu=0)cout0endl;if(a0.xishu=0&a1.xishu!=0)couta1.xishuXa1.zhishuendl;if(a0.xishu!=0&a1.xishu=0)couta0.xishuendl;if(a0.xishu!=0&a1.xishu!=0) couta0.xishu+a1.xishuXa1.zhishuendl;if(a1.zhishu=0&a0.zhishu!=0)if(a0.xishu=0&a1.xishu=0)cout0endl;if(a0.xishu=0&a1.xishu!=0)couta1.xishuendl;if(a0.xishu!=0&a1.xishu=0)couta0.xishuXa0.zhishuendl;if(a0.xishu!=0&a1.xishu!=0) couta0.xishuXa0.zhishu+a1.xishuendl;if(a0.zhishu!=0&a1.zhishu!=0)if(a0.xishu=0&a1.xishu=0)cout0endl;if(a0.xishu=0&a1.xishu!=0)couta1.xishuXa1.zhishuendl;if(a0.xishu!=0&a1.xishu=0)couta0.xishuXa0.zhishuendl;if(a0.xishu!=0&a1.xishu!=0) couta0.xishuXa0.zhishu+a1.xishuXa1.zhishuendl;3. 主函数的伪代码:void main()LNode L;int d;cout 欢迎使用一元高次多项式的加、减、乘运算系统endl;cout 请先创建之后进行其他操作:endlendl;for(d=1;d!=0;) cout endl; cout 1创建 endl; cout 2加法 endl; cout 3减法 endl; cout 4乘法 endl; cout 5显示 endl; cout 0退出 endl; cout endl; cout 请选择您所需要的服务:endld; switch(d) case 1:chuangjian(L);break; case 2:jia();break; case 3:jian();break; case 4:cheng();break;case 5:xianshi();break;case 0:break;default:cout输入有误,请重新输入:endl; cout谢谢使用!endl;4.2 函数间的调用关系4.2.1 交通咨询系统设计函数间的调用关系如图4-1所示。. 图4-1函数间的调用关系4.2.2 一元高次多项式的加、减、乘运算函数间的调用关系如图4-2所示。图4-1函数间的调用关系第5章 调试分析5.1 调试过程分析5.1.1 交通咨询系统设计程序主要是通过各种程序的调用关系运行,只要按着系统提示进行录入就可以了。5.1.2 一元高次多项式的加、减、乘运算程序主要以链表建立一元高次多项式,以数组的形式存储一元高次多项式,只要按着系统提示进行录入就可以了。5.2 算法的时空分析5.2.1 交通咨询系统设计(1)由于有序表采用带头结点的有序单链表,并增设尾指针和表的长度两个标识,各种操作的算法时间复杂度比较合理,shortestdistance2,shortestcost2,shortesttime2等操作的时间复杂度均为O(n),其中n为链表的长度。(2)构造有序集算法Create读入n个元素,逐个用for循环输入元素后,在直接初始化各个路径花费和城市名称,所以时间复杂度也是O(n)。5.2.2 一元高次多项式的加、减、乘运算(1)由于有序表采用带头结点的有序单链表,并增设a2,b3两个数组链表,并且有一个for循环语句,所以时间复杂度是O(n)。(2)构造时的chuangjian直接由手工录入,没有涉及到任何的循环语句,则时间复杂度是O(0)。第6章 使用说明6.1 交通咨询系统设计程序运行后用户根据提,按照自己所需要的查找方式示输入即可。6.2 一元高次多项式的加、减、乘运算程序运行后用户根据提示输入即可。第7章 测试结果7.1 交通咨询系统设计图7-1 交通系统的初始界面图7-2 一城到诸城的最短路径图7-3一城到诸城的最少花费.图7-4 两城之间的最短路径查询 图7-5 两城之间最少花费查询7.2 一元高次多项式的加、减、乘运算 图7-6初始化界面 图7-8 创建界面 图7-9 加法 图7-10 减法 图7-11 乘法图7-12显示加法图7-12显示乘法图7-13 显示减法总 结本设计使用当今较为流行的可视化编程工具通过课程设计不仅学习了VC+,而且技术素质和实践能力有了进一步的提高,对提出问题、思考问题与解决问题有了进一步的深刻认识。同时对软件开发也有了更为全面的了解,通过自己的努力思考、学习研究与指导老师的认真指导,使自己的能力得到了进一步锻炼与提高。通过课程设计不仅学习了数据结构,而且技术素质和实践能力有了进一步的提高,对提出问题、思考问题与解决问题有了进一步的深刻认识。同时对软件开发也有了更为全面的了解,通过自己的努力思考、学习研究与指导老师的认真指导,使自己的能力得到了进一步锻炼与提高。通过这次课设,对于程序中用到的自己又积累了不少编程的经验。程序十进制四则运算计算器应用到了二叉链表的存储方式、栈、中缀后缀表达式、遍历等知识点。由于表达式中存在字符和数字,因此采用了字符和数字的共用体来作为数据的存储方式。对于表达式可能输入有误的问题,程序中加入了许多判断,减少了程序执行错误表达式的情况。参考文献1 王立柱C/C+与数据结构北京:清华大学出版社,2002_22 刘振鹏,张小莉,郑艳娟数据结构(第二版)北京:中国铁道出版社,2007_43 唐宁九数据结构与算法分析成都:四川大学出版社,2006_84 李春葆,金晶数据结构教程北京:清华大学出版社,2006_115 周霭如,林伟健C+程序设计基础北京:电子工业出版社,2003_86 严蔚敏,吴伟民,米宁数据结构题集(C语言版)北京:清华大学出版社,2009.4 7 斯庆巴拉.数据结构(C语言描述).北京:中国水利水电出版社,2005.附 录交通系统源代码:#include #include #include using namespace std; const int max=100; const int MAX=20000;typedef structint vexsmax; string namemax; int costmaxmax;int distancemaxmax;int timemaxmax; int vnm,enm; mgraph; /图的有关信息typedef struct int sign; int len; int hour;int spend;save; /存放城市代号和距离void create(mgraph &g,int n,int e) int i,j; g.vnm=n; g.enm=e; for(i=1;i=g.vnm;i+)g.vexsi=i; /对应数组下标即为城市代号for(i=1;i=g.vnm;i+) /初始化for(j=1;j=g.vnm;j+) if(i=j) g.distanceij=0; g.costij=0; g.timeij=0; else g.distanceij=MAX; g.costij=MAX;g.timeij=MAX; /对城市名称赋值g.name1=北京; g.name2=长春; g.name3=成都; g.name4=大连; g.name5=福州; g.name6=广州; g.name7=贵阳;g.name8=哈尔滨; g.name9=呼和浩特; g.name10=昆明; g.name11=兰州;g.name12=柳州; g.name13=南昌; g.name14=南宁; g.name15=上海;g.name16=沈阳; g.name17=深圳;g.name18=天津; g.name19=武汉;g.name20=乌鲁木齐; g.name21=西安; g.name22=西宁; g.name23=徐州;g.name24=郑州; g.name25=株洲; /花费的赋值g.cost2011=450; g.cost1120=450; g.cost911=370; g.cost119=370; g.cost124=250; g.cost241=250; g.cost1823=220; g.cost2318=220; g.cost162=90; g.cost216=90; g.cost213=270; g.cost321=270; g.cost712=210; g.cost127=210;g.cost1225=230; g.cost2512=230; g.cost2315=232; g.cost1523=232; g.cost625=225; g.cost256=225; g.cost2211=70; g.cost1122=70; g.cost91=230; g.cost19=230; g.cost2423=95; g.cost2324=95; g.cost1816=240; g.cost1618=240; g.cost82=72; g.cost28=72; g.cost103=380; g.cost310=380;g.cost1412=74; g.cost1214=74; g.cost1924=185; g.cost2419=185; g.cost1315=260; g.cost1513=260; g.cost513=215; g.cost135=215; g.cost1121=210; g.cost2111=210; g.cost2421=190; g.cost2124=190; g.cost1225=230; g.cost2512=230; g.cost2315=232; g.cost1523=232; g.cost625=225; g.cost256=225; g.cost2211=70; g.cost1122=70; g.cost91=230; g.cost19=230; g.cost2423=95; g.cost2324=95; g.cost1816=240; g.cost1618=240; g.cost82=72; g.cost28=72; g.cost103=380; g.cost310=380; g.cost1412=74; g.cost1214=74; g.cost1924=185; g.cost2419=185; g.cost1315=260; g.cost1513=260;g.cost513=215; g.cost135=215; g.cost1121=210; g.cost2111=210; g.cost2421=190; g.cost2124=190; g.cost118=55; g.cost181=55; g.cost164=160; g.cost416=160; g.cost73=330; g.cost37=330; g.cost710=225; g.cost107=225; g.cost725=310; g.cost257=310; g.cost1925=145; g.cost2519=145; g.cost1325=105; g.cost2513=105; g.cost617=265; g.cost176=265; /时间的赋值g.time118=1; g.time181=1;g.time124=13; g.time241=13;g.time513=10; g.time135=10; g.time625=11; g.time256=11;g.time617=14; g.time176=14;g.time73=21; g.time37=21; g.time710=11; g.time107=11;g.time712=10; g.time127=10; g.time725=20; g.time257=20; g.time82=2; g.time28=2; g.time91=12; g.time19=12; g.time911=24; g.time119=24;g.time103=23; g.time310=23;g.time1121=5; g.time2111=5; g.time1225=11; g.time2512=11;g.time1325=4; g.time2513=4; g.time1315=14; g.time1513=14; g.time1412=2; g.time1214=2;g.time162=3; g.time216=3; g.time1816=13; g.time1618=13; g.time1823=5; g.time2318=5; g.time213=15; g.time321=15;g.time1924=4; g.time2419=4;g.time2315=12; g.time1523=12; g.time2211=2; g.time1122=2; g.time2423=3; g.time2324=3; g.time2421=11; g.time2124=11; g.time164=7; g.time416=7; g.time1925=3; g.time2519=3;g.time2011=32; g.time1120=32; /里程的赋值g.distance19=668; g.distance91=668;g.distance118=137; g.distance181=137;g.distance124=695; g.distance241=695; g.distance28=242; g.distance82=242; g.distance216=305; g.distance162=305;g.distance37=967; g.distance73=967; g.distance310=1100; g.distance103=1100; g.distance416=397; g.distance164=397;g.distance513=622; g.distance135=622;g.distance617=140; g.distance176=140;g.distance625=675; g.distance256=675;g.distance710=639; g.distance107=639; g.distance712=607; g.distance127=607; g.distance725=902; g.distance257=902; g.distance911=1145; g.distance119=1145;g.distance1120=1892; g.distance2011=1892; g.distance1121=676; g.distance2111=676;g.distance1225=672; g.distance2512=672;g.distance1325=367; g.distance2513=367;g.distance1315=825; g.distance1513=825;g.distance1412=255; g.distance1214=255;g.distance1816=70
展开阅读全文