- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验- 图
实验7 图
1 实验要求
编写图输入输出的重载操作,深度优先遍函数,广度优先遍历函数,取顶点的第一个邻接顶点函数,取顶点的邻接顶点的下一个邻接顶点函数,顶点的插入函数,边的插入函数,顶点的删除函数,边的删除函数。
2 简单的需求分析
1,该程序的描述是:建立一个循环队列类,一个用邻接矩阵表示的图类,最后在主函数中调用图的输入重载操作建立一个图的对象,并且分别调用深度优先遍历函数,广度优先遍历函数,取顶点的第一个邻接顶点函数,取顶点的邻接顶点的下一个邻接顶点函数,顶点的插入函数,边的插入函数,顶点的删除函数,边的删除函数,以及图的输出重载操作,输出各自对应的结果。
2,程序运行后,首先要求用图的邻接矩阵表示建立图,即逐步输入图的顶点数,图的边数,图的顶点信息,图的端点信息,之后会出现所建立的图的信息,并出现一个界面,要求用户选择自己所要做的操作。然后程序会输出各个操作所对应的内容:
选择1,程序输出请输入要从哪个顶点开始深度优先遍历:,用户输入顶点后,程序会输出图的深度优先遍历,之后继续提示用户选择上面的选项(1~9)。
选择2,程序输出请输入要从哪个顶点开始广度优先遍历:,用户输入顶点后,程序会输出图的广度优先遍历,之后继续提示用户选择上面的选项(1~9)。
选择3,程序输出输入所要操作的顶点:,用户输入顶点后,程序会输出该顶点的第一个邻接顶点,之后继续提示用户选择上面的选项(1~9)。
选择4,程序输出输入所要操作的顶点:,用户输入顶点后,程序会输出该顶点的邻接顶点的下一个邻接顶点,之后继续提示用户选择上面的选项(1~9)。
选择5,程序输出输入所要操作的顶点:,用户输入顶点后,程序会输出顶的插入后图的情况,之后继续提示用户选择上面的选项(1~9)。
选择6,程序输出输入所要操作的边:,用户输入边的两个顶点已经权值后,程序会输出插入边后图的情况,之后继续提示用户选择上面的选项(1~9)。
选择7,程序输出输入所要删去的顶点:,用户输入顶点后,程序会输出删去顶点后图的情况,之后继续提示用户选择上面的选项(1~9)。
选择8,程序输出输入所要删去的边:,用户输入边的两个顶点后,程序会输出删去边后图的情况,之后继续提示用户选择上面的选项(1~9)。
选择9,则程序退出。
3 概要设计
1、所用的抽象数据类型:
(1)//循环队列的类定义
templateclass T
class SeqQueue{
public:
SeqQueue(int sz=10); //构造函数
~SeqQueue(){delete[] elements;} //析构函数
bool EnQueue(const T x); //进队
bool DeQueue(T x); //出队
void input(); //建立循环队列
void output(); //遍历
bool IsEmpty()const{return(front==rear)?true:false;}
protected:
int rear,front; //队头与队尾指针
T* elements; //存放队列元素的数组
int maxSize; //队列最大容纳元素的个数
};
(2)//用邻接矩阵表示的图的类定义
templateclass T,class E
class Graphmtx
{
friend istream operator (istream in,GraphmtxT, E G);//输入
friend ostream operator (ostream out, GraphmtxT, E G);//输出
public:
Graphmtx(int sz=DefaultVertices); //构造函数
~Graphmtx() //析构函数
{delete[]VerticesList;delete []Edge;}
T getValue(int i) //取顶点i的值,i不合理返回0
{return i=0i=numVertices?VerticesList[i]:NULL;}
E getWeight(int v1,int v2) //取边(v1,v2)的权值
文档评论(0)