1、北华航天工业学院课程报告 《数据结构》课程设计报告 报告(论文)题目:交通系统系统设计及一元 高次多项式的加减乘运算 作者所在系部: 计算机系 作者所在专业: 计算机科学与技术 目 录 第1章 问题描述 4 1.1题目内容 4 1.1.1交通咨询系统设计 4 1.1.2一元高次多项式的加、减、乘运算 4 1.2基本要求 5 1.2.1交通咨询系统设计 5 1.2.2一元高次多项式的加、减、乘运算 5 1.3 测试数据 5 1.3.1交通咨询系统设计 5 1.3.2一
2、元高次多项式的加、减、乘运算 5 第2章 需求分析 6 2.1功能说明 6 2.1.1交通咨询系统设计 6 2.1.2一元高次多项式的加、减、乘运算 6 2.2输入说明 6 2.2.1交通咨询系统设计 6 2.2.2一元高次多项式的加、减、乘运算 6 2.3输出说明 6 2.3.1交通咨询系统设计 6 2.3.2一元高次多项式的加、减、乘运算 7 2.4测试数据 7 2.4.1交通咨询系统设计 7 2.4.2一元高次多项式的加、减、乘运算 7 第3章 概要设计 8 3.1抽象数据类型定义 8 3.1.1交通咨询系统设计 8 3.1.2一元高次多项式的加、减、乘
3、运算 9 3.2程序模块结构 9 3.2.1交通咨询系统设计 9 3.2.2一元高次多项式的加、减、乘运算 10 第4章 详细设计 11 4.1定义的数据类型 11 4.1.1交通咨询系统设计 11 1.元素类型、结点类型和指针类型 11 4.1.2一元高次多项式的加、减、乘运算 20 1.元素类型、结点类型和指针类型 20 4.2函数间的调用关系 23 4.2.1交通咨询系统设计 23 4.2.2一元高次多项式的加、减、乘运算 24 第5章 调试分析 25 5.1调试过程分析 25 5.1.1交通咨询系统设计 25 5.1.2一元高次多项式的加、减、乘运算 2
4、5 5.2算法的时空分析 25 5.2.1交通咨询系统设计 25 5.2.2一元高次多项式的加、减、乘运算 25 第6章 使用说明 26 6.1交通咨询系统设计 26 6.2一元高次多项式的加、减、乘运算 26 第7章 测试结果 27 7.1交通咨询系统设计 27 7.2一元高次多项式的加、减、乘运算 29 参考文献 33 附 录 34 第1章 问题描述 1.1 题目内容 1.1.1 交通咨询系统设计 设计一个交通咨询系统,能让旅客咨询从任一城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。对
5、于不同咨询要求,可输入城市间的路程或所需时间或所需费用。 1.1.2 一元高次多项式的加、减、乘运算 用链表表示一元高次多项式,实现两个多项式的加、减、乘运算。 1.2 基本要求 1.2.1 交通咨询系统设计 1.创建图的存储结构使用邻接矩阵。 2.查询分为两类。一类是能让旅客咨询从一个城市到另外所有城市的最短路径(要求使用迪杰斯特拉算法),显示出所有路径,按升序排列。第二类是任意两个城市间的最短路径(要求使用弗洛伊德算法),显示最短路径。 3.按给定交通地图完成以上功能。 1.2.2一元高次多项式的加、减、乘运算 1.描述多项式时,将每个子项看成是由系数和指数两部分组成。
6、 2.输入并创建一元多项式,以链表作为存储结构。 3.实现两个多项式的相加、相减和相乘运算。 4.显示多项式,查看运算结果。 5.用户界面包括以下功能:创建 加法 减法 乘法 显示 退出 1.3 测试数据 1.3.1 交通咨询系统设计 任意输入所需要查找的一个或两个城市,然后查找最短距离、最少花费和最短时间。 1.3.2 一元高次多项式的加、减、乘运算 2X^4+3X^4=5X^4 6X^3+3X^5=6X^3+3X^5 7X^9*4X^5=28X^45 第2章 需求分析 2.1 功能说明 2.1.1 交通咨询系统设计 查询分为两类。一类是能让旅客咨询从一个
7、城市到另外所有城市的最短路径,显示出所有路径,按升序排列。第二类是任意两个城市间的最短路径,显示最短路径。 2.1.2 一元高次多项式的加、减、乘运算 描述多项式时,将每个子项看成是由系数和指数两部分组成。 输入并创建一元多项式,以链表作为存储结构。 实现两个多项式的相加、相减和相乘运算。 显示多项式,查看运算结果。 2.2 输入说明 2.2.1 交通咨询系统设计 用户根据自己所需要的利用交通系统查询的功能自己进行查询。 2.2.2 一元高次多项式的加、减、乘运算 程序运行后显现提示信息,由用户输入两个多项式,由用户自行选择加减乘功能进行运算。 2.3 输出说明 2.3
8、1 交通咨询系统设计 根据用户不同的选择功能输出不同。 2.3.2 一元高次多项式的加、减、乘运算 用户输入数据完毕,程序将输出运算结果。 2.4 测试数据 2.4.1 交通咨询系统设计 用户自行选择功能,可进行按序号查找和按名称查找。 2.4.2 一元高次多项式的加、减、乘运算 测试数据应为两组整数,正负都没有关系。 第3章 概要设计 3.1 抽象数据类型定义 3.1.1 交通咨询系统设计 为实现上程序功能,应创建图的存储结构并使用邻接矩阵表示集合。 1.建图的存储结构 typedef struct { int vexs[max]; string
9、 name[max]; int cost[max][max]; int distance[max][max]; int time[max][max]; 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.vexs[i]=i; //对应数组下标即为城市代号 for(i=1;i<=g.vnm;i++)
10、 {//初始化 for(j=1;j<=g.vnm;j++) { if(i==j) { g.distance[i][j]=0; g.cost[i][j]=0; g.time[i][j]=0; } else { g.distance[i][j]=MAX; g.cost[i][j]=MAX; g.time[i][j]=MAX; } } } 3.1.2 一元高次多项式的加、减、乘运算 链表和数组的使用,下面是链表的定义
11、 typedef struct{ double xishu; double zhishu; }LNode,*LinkList; 数组的定义: LNode a[2],b[3]; 3.2 程序模块结构 3.2.1 交通咨询系统设计 本程序包含主程序、最少花费、最短距离、最少时间模块和迪杰斯特拉算法、弗洛伊德算法模块等三个模块。 最少花费、最短距离、最少时间模块实现判断两城市之间信息。 迪杰斯特拉算法、弗洛伊德算法模块实现两城市之间的各种信息的具体计算。 三个模块间的调用关系如图3-1所示。 图3-1 模块间的调用关系图 3.2.2 一元高次多项式的加、减、
12、乘运算 本程序包含主程序、加减乘运算函数模块显示模块三个模块。 加减乘模块是用来计算一元高次多项式的加减乘的核心模块。 显示模块是用来显示计算结果的模块。 三个模块间的调用关系如图3-2所示。 图3-2 模块间的调用关系图 第4章 详细设计 4.1 定义的数据类型 4.1.1 交通咨询系统设计 1.元素类型、结点类型和指针类型 typedef struct { int vexs[max]; string name[max]; int cost[max][max]; int distance[max][max]; int time[max][ma
13、x]; 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.vexs[i]=i; //对应数组下标即为城市代号 for(i=1;i
14、<=g.vnm;i++) {//初始化 for(j=1;j<=g.vnm;j++) { if(i==j) { g.distance[i][j]=0; g.cost[i][j]=0; g.time[i][j]=0; } else { g.distance[i][j]=MAX; g.cost[i][j]=MAX; g.time[i][j]=MAX; } } } 3.迪杰斯特拉算法和弗洛伊德算
15、法 利用迪杰斯特拉算法和弗洛伊德算法计算最少花费、最短距离、最少时间。 其基本操作的伪码算法如下: 迪杰斯特拉一城至诸城最少花费 void shortestcost(mgraph g,int v0) { int i,v,pre,w,min,k,j; int final[max]; int p[max]; save d[max]; int m,n; for(v=1;v<=g.vnm;v++) { final[v]=0; d[v].spend=g.cost[v0][v]; d[v].sign=v; p[v0]=-1;
16、
if(d[v].spend 17、
for(w=1;w<=g.vnm;w++)
{//修改d中存放的最短距离和前驱结点
if(!final[w]&&(min+g.cost[v][w] 18、 k=j;
if(k!=i)
{
n=d[k].sign;
d[k].sign=d[i].sign;
d[i].sign=n;
m=d[k].spend;
d[k].spend=d[i].spend;
d[i].spend=m;
}
}
for(i=1;i<=g.vnm;i++)
{
if(d[i].sign!=v0)
{
cout<<" 从"< 19、[i].spend<<" ";
cout<<" 所经过的路径:";
cout< 20、x];
int p[max];
save d[max];
int m,n;
for(v=1;v<=g.vnm;v++)
{
final[v]=0;
d[v].hour=g.time[v0][v];
d[v].sign=v;
p[v0]=-1;
if(d[v].hour 21、
min=MAX;
for(w=1;w<=g.vnm;w++)
if(!final[w])
if(d[w].hour 22、gn=w;
p[w]=v;
}
}
}
//选择排序法
for(i=1;i 23、}
for(i=1;i<=g.vnm;i++)
{
if(d[i].sign!=v0)
{
cout<<" 从"< 24、e];
}
cout< 25、
if(d[v].len 26、1;w<=g.vnm;w++)
{//修改d中存放的最短距离和前驱结点
if(!final[w]&&(min+g.distance[v][w] 27、 if(k!=i)
{
n=d[k].sign;
d[k].sign=d[i].sign;
d[i].sign=n;
m=d[k].len;
d[k].len=d[i].len;
d[i].len=m;
}
}
for(i=1;i<=g.vnm;i++)
{
if(d[i].sign!=v0)
{
cout<<" 从"< 28、 cout<<" 所经过的路径:";
cout< 29、交通咨询系统------------------------ "< 30、沈阳 17:深圳 18:天津 19:武汉"< 31、); break;
case 2: twocity(g); break;
case 3: cout<<" 退出系统成功!"< 32、];
2.加减乘的运算
下面是加法运算的伪代码:
void jia() //加法
{
if(a[0].zhishu==a[1].zhishu) //如果指数相等,让两系数相加
{
b[0].xishu=a[0].xishu+a[1].xishu; // b[0].xishu是两系数之和
if(a[0].zhishu==0&&a[1].zhishu==0)
{
if(a[0].xishu==0&&a[1].xishu==0)
cout<<"0"< 33、)
cout< 34、xishu!=0)
cout< 35、ishu==0&&a[1].zhishu!=0)
{
if(a[0].xishu==0&&a[1].xishu==0)
cout<<"0"<






