- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
.
.
1.引 言
数据结构是计算机科学与技术专业的一门核心专业基础课程,是一门理论性强、思维抽象、难度较大的课程。在软件工程专业的课程体系中起着承上启下的作用,学好数据结构对于提高理论认知水平和实践能力有着极为重要的作用。通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力。我认为学习数据结构的最终目的是为了获得求解问题的能力。对于现实世界中的问题,我们应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部用相应的数据结构来表示,然后设计一个解此数学模型的算法,再进行编程调试,最后获得问题的解答。
图是一种非常重要的数据结构,在《数据结构》中也占着相当大的比重。这个学期的数据结构课程中,我们学习了很多图的存储结构,有邻接矩阵、邻接表、十字链表等。其中邻接矩阵和邻接表为图的主要存储结构。图的邻接矩阵存储结构的主要特点是把图的边信息存储在一个矩阵中,是一种静态存储方法。图的邻接表存储结构是一种顺序存储与链式存储相结合的存储方法。从空间性能上说,图越稀疏邻接表的空间效率相应的越高。从时间性能上来说,邻接表在图的算法中时间代价较邻接矩阵要低。
本课程设计主要是实现使用邻接表存储结构存储一个图,并在所存储的图中实现深度优先和广度优先遍历以及其链表结构的输出。
2.需求分析
2.1 原理
当图比较稀疏时,邻接表存储是最佳的选择。并且在存储图的时候邻接表要比邻接矩阵节省时间。在图存储在系统中后,我们有时还需要对图进行一些操作,如需要添加一个顶点,修改一个顶点,或者删除一个顶点,而这些操作都需要一图的深度优先及广度优先遍历为基础。本系统将构建一个图,图的结点存储的是int型数据。运行本系统可对该图进行链式结构输出、深度优先及广度优先遍历。控制方法如下:
表2-1 控制键的功能
控制键
1
2
3
0
功能
输出链
表结构
深度优
先遍历
广度优
先遍历
退出
2.2 要求
(1)建立基于邻接表的图;
(2)对图进行遍历;
(3)输出遍历结果;
2.3 运行环境
(1)WINDOWS 7系统
(2)C++ 编译环境
2.4 开发工具
C++语言
3.数据结构分析
本课程设计是针对于图的,程序中采用邻接表进行数据存储。在计算机科学中,邻接表描述一种紧密相关的数据结构,用于表征图。在 邻接表的表示中,对于图中的每个顶点,我们将保存所有其它与之相连的顶点(即 “邻接表”)。 邻接表是一种顺序存储与链式存储相结合的存储方法,该存储方式在图比较稀疏是相对于图的邻接矩阵存储有明显优势。设计实现了图的邻接表结构输出、深度有新遍历和广度优先遍历操作的实现。
邻接表的结构:
、头结点结构
firstarcdata
firstarc
data
Firstarc:结点的指针域
、邻接点的结构
nextarcadjvex
nextarc
adjvex
Adjvex:邻接点的数据域;
Nextarc:邻接点的指针域,指向下一个邻接点;
在该程序中,除了邻接表结构以外,还有到了一个mark[]数组,它是用来标记结点Vi是否被访问。若Vi被访问,则mark[i]=1,否则为0;它是一个比较简单的一维数组。(注:在每次对图进行遍历之前mark[]都会被清零)
图的深度优先访问:从图中每个顶点V出发,访问此顶点,然后依次从V的未访问邻接点出发深度优先遍历图,直至所有与V有通路的顶点被访问,否则选择另外未访问点作为起点,重复上述过程。
图的广度优先遍历:从图中每个顶点V出发,访问此顶点,然后依次访问V的未访问邻接点,并保证先被访问的结点的邻接点先于后被访问的结点,直至所有与V有通路的顶点被访问,否则选择另外未访问点作为起点,重复上述过程。
4.算法设计
(1)首先,要定义头文件,在头文件中定义邻接点point、图的基本结点graph以及在广度优先搜索中会用到队列queue。具体如下:
struct point{
int n; //邻接点的序号
point *next; //指向下一条弧节点的地址
};
st
文档评论(0)