山东建筑大学数据结构课程设计报告课案.docx
- 文档编号:3576770
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:26
- 大小:34.93KB
山东建筑大学数据结构课程设计报告课案.docx
《山东建筑大学数据结构课程设计报告课案.docx》由会员分享,可在线阅读,更多相关《山东建筑大学数据结构课程设计报告课案.docx(26页珍藏版)》请在冰豆网上搜索。
山东建筑大学数据结构课程设计报告课案
山东建筑大学计算机科学与技术学院
课程设计说明书
题目:
基于逆邻接表的有向图基本操作的实现
课程:
数据结构
院(部):
计算机学院
专业:
计科
班级:
133
学生姓名:
潘含笑
学号:
20131111092
指导教师:
李盛恩
完成日期:
2015.07.03
山东建筑大学计算机科学与技术学院
课程设计任务书
设计题目
基于逆邻接表的有向图基本操作的实现
已知技术参数和设计要求
题目三、实现类NetWork,实现BFS、DFS、拓扑排序,并实现采用逆邻接表作为存储结构的有向图,要继承NetWork。
逆邻接表要使用STL提供的List和Vector等实现。
设计内容与步骤
1、设计存储结构
2、设计算法
3、编写程序,进行调试
4、总结并进行演示、讲解
设计工作计划与进度安排
2015.6.17~2015.6.23,实现基类Network和有向图Graph,实现逆邻接链表的存储结构。
2015.6.23~2015.7.1,编写测试代码。
2015.7.1~2015.7.3,改正一些错误,完成实验。
设计考核要求
1、考勤20%
2、课程设计说明书50%
3、成果展示30%
指导教师(签字):
教研室主任(签字)
山东建筑大学计算机科学与技术学院
课程设计任务书
设计题目
双向循环链表
已知技术参数和设计要求
实现双向循环链表。
设计内容与步骤
5、设计存储结构
6、设计算法
7、编写程序,进行调试
8、总结并进行演示、讲解
设计工作计划与进度安排
2015.4.22~2015.4.35,实现双向循环链表
2015.4.25~2015.4.29,编写测试代码。
设计考核要求
4、考勤20%
5、课程设计说明书50%
6、成果展示30%
指导教师(签字):
教研室主任(签字)
逆邻接链表实现有向图
6
一、问题描述
5
二、数据结构
三、逻辑设计
1、总体思路
先实现Network类,通过队列实现BFS,通过堆栈实现DFS和拓扑排序。
再构建Graph类,并继承Network类实现以逆邻接链表为存储结构的有向图。
2、模块划分(以图示的方法给出各个函数的调用关系)
Network类
Initializepos虚函数
Edges虚函数
Begin
虚函数
BFS函数
DFS函数
Topological函数
Deactivatepos虚函数
Vertices虚函数
Nextvertex
虚函数
Begin函数
Out函数
Deactivatepos函数
Initializepos函数
Vertices函数
Edges函数
Nextvertex函数
Graph类
3、函数或类的具体定义和功能
Network类:
virtualintBegin(inti)=0;//确定起始顶点
virtualintNextvertex(inti)=0;//下一个顶点
virtualintEdges()=0;//确定点
virtualintVertices()=0;//确定边
virtualvoidInitializepos(inti)=0;//让迭代器等于链表的第i个顶点的第一个元素
virtualvoidDeactivatepos(inti)=0;//删除迭代器指的元素
voidBFS(intv,intreach[],intlabel,inta[]);//宽度遍历
voidDFS(intv,intreach[],intlabel,inta[]);//深度遍历
boolTopological(intv[]);//拓扑排序
virtual~Network();//析构函数
Graph类:
virtual~Graph();//析构函数
intInDegree(intnode);//入度
intOutDegree(intnode);//出度
Graph&Add(intnode1,intnode2);//添加点
Graph&Delete(intnode1,intnode2);//删除点
intBegin(inti);//确定起始顶点
intNextvertex(inti);//下一个顶点
intEdges(){returne;}//确定点
intVertices(){returnn;}//确定边
voidInitializepos(inti){pos=al[i].begin();}////让迭代器等于链表的第i个顶点的第一个元素
voidDeactivatepos(inti){al[i].erase(pos);}//删除迭代器指的元素
voidOut();//输出函数
四、编码
//Network.h
#include
#include
#include
#include
usingnamespacestd;
classNetwork{
public:
virtualintBegin(inti)=0;
virtualintNextvertex(inti)=0;
virtualintEdges()=0;
virtualintVertices()=0;
virtualvoidInitializepos(inti)=0;//让迭代器等于链表的第i点的第一个元素
virtualvoidDeactivatepos(inti)=0;//删除迭代器指的元素
voidBFS(intv,intreach[],intlabel,inta[]);//宽度遍历
voidDFS(intv,intreach[],intlabel,inta[]);//深度遍历
boolTopological(intv[]);//拓扑排序
virtual~Network();
};
//Network.cpp
#include"Network.h"
voidNetwork:
:
BFS(intv,intreach[],intlabel,inta[])
{
intn=Vertices();//获取n的值,有几个顶点
queue
intk=0;//定义一个k来使元素得到保存
reach[v]=label;//标记点
a[k++]=v;//用数组记录BFS的遍历顺序
Q.push(v);//把一个元素加入队列
while(!
Q.empty())
{
intx;
x=Q.front();//获取队列中的第一个元素
Q.pop();//让队列中的第一个元素出队
for(inti=1;i<=n;i++)//寻找x的下一个节点
{
intu=Begin(i);
if((u==x)&&(!
reach[i]))//因为是逆邻接链表
{
Q.push(i);
reach[i]=label;
a[k++]=i;//把标记的元素放入遍历数组
}
while(u)//看后面是不是还有节点
{
u=Nextvertex(i);
if((u==x)&&(!
reach[i]))
{
Q.push(i);
reach[i]=label;
a[k++]=i;
}
}
}
}
for(inti=v;i { if(reach[i]==label) cout<<"执行完BFS后第"< else cout<<"执行完BFS后第"< }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东 建筑 大学 数据结构 课程设计 报告