山东建筑大学数据结构设计介绍

  • 格式:doc
  • 大小:318.34 KB
  • 文档页数:31

下载文档原格式

  / 31
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东建筑大学计算机科学与技术学院

课程设计说明书

题目:基于逆邻接表的有向图基本操作的实现课程:数据结构

院(部):计算机学院

专业:计科

班级:133

学生姓名:潘含笑

学号:20131111092

指导教师:李盛恩

完成日期:2015.07.03

目录

课程设计任务书.................................................. I 课程设计任务书................................................. II 逆邻接链表实现有向图.. (3)

一、问题描述 (3)

二、数据结构 (3)

三、逻辑设计 (3)

四、编码 (5)

五、测试数据 (14)

六、测试情况 (16)

逆邻接链表实现有向图 (17)

一、问题描述 (17)

二、数据结构 (17)

三、逻辑设计 (17)

四、编码 (18)

五、测试数据 (24)

七、测试情况 (24)

结论 (26)

课程设计指导教师评语 (28)

山东建筑大学计算机科学与技术学院

课程设计任务书

指导教师(签字):教研室主任(签字)

山东建筑大学计算机科学与技术学院

课程设计任务书

指导教师(签字):教研室主任(签字)

逆邻接链表实现有向图

二、数据结构

三、逻辑设计

1、总体思路

先实现Network类,通过队列实现BFS,通过堆栈实现DFS和拓扑排序。再构建Graph类,并继承Network类实现以逆邻接链表为存储结构的有向图。

2、模块划分(以图示的方法给出各个函数的调用关系)

3、函数或类的具体定义和功能Network类:

virtual int Begin(int i) = 0;//确定起始顶点

virtual int Nextvertex(int i) = 0;//下一个顶点

virtual int Edges()=0;//确定点

virtual int Vertices()=0;//确定边

virtual void Initializepos(int i)=0;//让迭代器等于链表的第i个顶点的第一个元素

virtual void Deactivatepos(int i)=0;//删除迭代器指的元素

void BFS(int v,int reach[],int label,int a[]);//宽度遍历

void DFS(int v,int reach[],int label,int a[]);//深度遍历

bool Topological(int v[]);//拓扑排序

virtual ~Network();//析构函数

Graph类:

virtual ~Graph();//析构函数

int InDegree(int node);//入度

int OutDegree(int node);//出度

Graph& Add(int node1, int node2);//添加点

Graph& Delete(int node1, int node2);//删除点

int Begin(int i);//确定起始顶点

int Nextvertex(int i);//下一个顶点

int Edges() {return e;}//确定点

int Vertices() {return n;}//确定边

void Initializepos(int i){pos=al[i].begin(); }////让迭代器等于链表的第i个顶点的第一个元素

void Deactivatepos(int i){al[i].erase(pos);}//删除迭代器指的元素

void Out();//输出函数

四、编码

//Network.h

#include

#include

#include

#include

using namespace std;

class Network {

public:

virtual int Begin(int i) = 0;

virtual int Nextvertex(int i) = 0;

virtual int Edges()=0;

virtual int Vertices()=0;

virtual void Initializepos(int i)=0;//让迭代器等于链表的第i点的第一个元素

virtual void Deactivatepos(int i)=0;//删除迭代器指的元素void BFS(int v,int reach[],int label,int a[]);//宽度遍历

void DFS(int v,int reach[],int label,int a[]);//深度遍历

bool Topological(int v[]);//拓扑排序

virtual ~Network();

};

//Network.cpp

#include "Network.h"

void Network::BFS(int v,int reach[],int label,int a[])

{

int n=Vertices(); //获取n的值,有几个顶点

queue Q; //创建一个队列

int k=0; //定义一个k来使元素得到保存

reach[v]=label; //标记点

a[k++]=v; //用数组记录BFS的遍历顺序

Q.push(v); //把一个元素加入队列 while(!Q.empty())

{

int x;

x=Q.front(); //获取队列中的第一个元素

Q.pop(); //让队列中的第一个元