数据结构课程设计实验报告

发布 2022-10-05 19:59:28 阅读 8006

江苏大学计算机学院。

软件工程课程设计报告书。

课程名称数据结构课程设计总评成绩。

学生姓名、学号卢江涛3100608047

学生专业班级软件工程软件1002班。

指导教师姓名王新胜。

一、问题描述。

以邻接表的方式确定有向网,完成:1.建立并显示它的邻接链表;

2.以非递归的方式进行深度优先遍历,显示遍历的结果;

3.对该图进行拓扑排序,显示拓扑排序的结果,并随时显示入度域的变化情况;4.给出某一确定定点到所有其它顶点的最短路径。

二、程序的系统功能结构。

有向网。输出邻接表。

深度优先遍历。

拓扑排序。入度域变化。

最短路径。三、主要的算法思想。

1)、建立图类,建立相关成员函数,最后在主函数中实现,具体成员函数的实现请参看源程序。(2)、主要的数据结构设计说明。(3)、图邻接矩阵、邻接表的建立。

图的深度优先遍历、拓扑排序、顶点之间的最短路径。(4)程序的主要模板template class graph。

5)、程序的主要函数graph、link()、dftr**erse()、topologicalorder()、topologicalorder()、getvertexpos()、shortestpath

四、补充说明。

程序主要是通过建立一个图的模板类来调用相应的构造函数以及相应的成员函数来实现其功能,首先用结构体来存储边节点和顶点节点,用邻接矩阵来存储此有向图,遍历的过程采用双从循环来使得遍历达到最底端,最短路径采用了递归的思想循环调用最短路径函数来完成最短路径的查找,拓扑排序中首先优先输出入度为零的节点,然后通过删除该节点继续此过程进行排序。

五、源程序**。

#include

using namespace std;

const int maxvertexes=20; /最大的顶点数const int b=10000;

template class graph;struct arcnode};/构造函数。

template struct vertexnode;

template class graph //返回当前的顶点数int numberofarcs() 返回当前的边(或弧)数int *dist最短路径长度数组。

int *indegree入度数组,记录每个顶点的入度int *path最短路径的数组int *s最短路径终点数组void link输出邻接链表。

void dfs(const int v,int visited)深度优先搜索。

void dftr**erse深度遍历void topologicalorder拓扑排序void shortestpath(int n,int v);/最短路径};

templateint graph::

getvertexpos(const type &v )}p++;

indegree=new int[maxvertexes];

vtable=new vertexnode[maxvertexes];/创建顶点表for(i=0;i

cout<<"输入边的条数:";cin >>e;//输入边的条数cout

cout<<"输入第"<>tail>>head>>w输入一条边int j=getvertexpos(head);

while((t=getvertexpos(tail))=1)cout<<"输入的顶点(tail)不存在";while((h = getvertexpos(head ))1)cout<<"输入的顶点(head)不存在";

insertarc (t,h,w插入一条边indegree[j顶点j的入度加1cout

getvalue(intv取图中顶点v的值,如果顶点v不存在,则返回空if(v>=0&&vtemplateint graph::

getweight(int v1,int v2)elsep=p->nextarc; }

return null;}

templateint graph::

getfirstneighbor(int v)

return -1;}

templateint graph::getnextneighbor(intv1,intv2)}

return -1;//没有查到下一个邻接顶点返回-1}

templateint graph::insertarc(int v1,int v2,int w)

newnode->nextarc=p->nextarc;p->nextarc=newnode;return 1;}

vtable[v1].firstarc=newnode;return 1;}

return -1;}

templateint graph::invertex(type &v)

//在图中插入顶点,插入成功则返回1,否则返回0

if(currentnumvertexesvtable[currentnumvertexes].firstarc=null;currentnumvertexesreturn 1;}

return -1;}

/以下是实验要求的函数//输出邻接表。

templatevoid graph::link()/输出邻接表。

templatevoid graph ::dftr**erse ()

templatevoid graph::shortestpath(int n,int v)//求最短路径。

if(v!=i&&dist[i]!=10000&&v!=path[i])

cout

int m,w;

char a[20],c;

cout<<"请你输入顶点的数目:";cin>>m;

for(int i=0;icout<<"请输入第"<>a[i];cout

cout<<"深度遍历的结果为:"

w=六、课程设计遇到的问题及解决方法。

1.语法错误太多,由于大部分函数都是按照书上的思想进行设计的,思想是没问题的,可。

是书上存在印刷错误,语法错误比较容易,只需要根据说明逐个修改即可,此外还有大括号匹配错误。

2.出现了死循环,在输出邻接表的过程**现了死循环,主要是循环过程中的条件出现了。

问题,修改好之后虽然又出现了死循环,但是主要是由于自己的输入不正确造成的。3.对主函数进行了彻底的修改,尽量使得输出格式漂亮,条理清晰,同时对最短路径和邻。

接表的输出函数进行了修改,尽量使得函数简单易懂,同时又可实现其功能。4.此外在设计循环的过程中遇到许多麻烦,这要感谢老师以及同学。

七、输出结果显示。

七、个人心得体会。

通过这次的课程设计,对数据结构这门儿科目有了更深层次的认识,首先平时的学习毕竟只是理论上的学习,如果不拿来实践那就相当于白学,通过这次课程设计发现了好多小错。

误,这在平时作业中是无法发现的,真正的错误只有把它放到编译系统中才能明确的显示出来。其次,这次课程设计更加让我发现了自己编程能力的差劲,好像根本就离不开书本,离开书本以后仿佛大脑就不知道该做什么,让我清晰的认识到自己还处于一个井底之蛙的状态,对编程实在实践的太少了,虽然思想重要,但是最终编程总是要运用到实践中去的,接下来得好好的进行练习。

最后,无意中听了老师的一句话,说这个过程只需要半年就可完成,自己接下来会把大部分精力都放在编程实践上,从小程序编起,一步一步的慢慢练好,脱离书本,最后编出真正属于自己的程序。

总之,我相信,功夫不负有心人,只要坚持下去,肯定会有好结果的,我会努力并期待那一天的到来!!!

数据结构课程设计实验报告

数据结构。课程设计报告。xx大学计算机xxxx学院。计算机系 08级软件工程专业xx班。xxx学号 0823xxxxxx 班内序号 xx 2010年11月15日。任务 参加运动会有n个学校,学校编号为1 n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1 m,女子m 1 m w。不同的项目取...

数据结构课程设计实验报告

仲恺农业工程学院。课程设计报告。2010 2011年度第1学期 名称 数据结构 课程设计 题目 学生成绩管理系统 院系 计算科学学院 班级 信息与计算科学信计091,092 学号 200911314116 200911314214 学生姓名 许建城刘汉明 指导教师 吴东庆。设计周数1作者1 许建城贡...

数据结构课程设计实验报告

一 设计题目 单词 词组 检索 现在有一个英文字典 每个单词都是由小写的 a z 组成 单词量很大,达到 100多万的单词,而且还有很多重复的单词。此外,我们现在还有一些 document,每个 document 包含一些英语单词。针对这个问题,请你选择合适的数据结构,组织这些数据,使时间复杂度和空...