收藏 分享(赏)

数据结构--图的实验报告.doc

上传人:精品资料 文档编号:10651336 上传时间:2019-12-15 格式:DOC 页数:10 大小:98.50KB
下载 相关 举报
数据结构--图的实验报告.doc_第1页
第1页 / 共10页
数据结构--图的实验报告.doc_第2页
第2页 / 共10页
数据结构--图的实验报告.doc_第3页
第3页 / 共10页
数据结构--图的实验报告.doc_第4页
第4页 / 共10页
数据结构--图的实验报告.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、图的实验报告班级:电子 091 学号:0908140620 姓名:何洁 编号:19(一)实验要求创建一个图。能够实现图的输入,插入顶点和边,利用队列进行深度和广度遍历。(二)需求分析功能:1,输入图的信息;2,插入一个顶点;3 插入一个边;4,删除一个顶点;5,删除一个边;6,深度优先遍历;7,广度优先遍历;8 退出。(三)概要设计本程序采用的是模板类,抽象数据类型有:T,E。类:template class Graphmtx friend istream friend ostream /输出public: Graphmtx(int sz=30, E max=0); /构造函数Graphmtx

2、 () /析构函数 delete VerticesList; delete Edge; T getValue (int i) /取顶点 i 的值, i 不合理返回 0return i = 0 const int DefaultVertices=30; /最大顶点数(=n)const int maxWeight=50;其中顺序队列的实现:templateclass SeqQueue/循环队列的类的定义public:SeqQueue(int sz=10); /构造函数SeqQueue()delete elements; /析构函数bool EnQueue(const T/若队列不满,则将 X 进队

3、,否则队溢出处理bool DeQueue(T/若队列不为空,则函数返回 TRUE 及对头元素的值,否则返回 FALSEvoid makeEmpty()front=rear=0;/置空操作:对头指针和队尾指针置 0bool IsEmpty()constreturn(front=rear)?true:false;/判队列空否,若队列空,则函数返回 TRUE,否则返回 FALSEbool IsFull()constreturn(rear+1)%maxSize=front)?true:false;/判队列满否,若队列满,则函数返回 TRUE,否则返回 FALSEprotected:int rear,f

4、ront; /对头和队尾指针T *elements; /存放队列元素的数组int maxSize; /队列最大可容纳元素个数;templateSeqQueue:SeqQueue(int sz):front(0),rear(0),maxSize(sz)/建立最大具有 Maxsize 个元素的空队列elements=new TmaxSize; /创建队列空间assert(elements!=NULL); /断言:动态存储分配成功与否 templatebool SeqQueue:EnQueue(const T /队列满则插入失败,返回elementsrear=x; /按照队尾指针指示位置插入rear

5、=(rear+1)%maxSize; /队尾指针加 1return true; /插入成功templatebool SeqQueue:DeQueue(T /若队列空则删除失败,返回x=elementsfront;front=(front+1)%maxSize; /对头指针加 1return true; /删除成功类的实现:template Graphmtx:Graphmtx(int sz, E max):maxWeight(max) /构造函数maxVertices=sz; numVertices=0; numEdges=0;int i, j;VerticesList = new TmaxVe

6、rtices; /创建顶点表Edge = (int *) new int *maxVertices;for (i = 0; i int Graphmtx:getFirstNeighbor (int v) /给出顶点位置为 v 的第一个邻接顶点的位置, /如果找不到, 则函数返回-1if (v != -1) for (int col = 0; col int Graphmtx:getNextNeighbor (int v, int w) /给出顶点 v 的某邻接顶点 w 的下一个邻接顶点 if (v != -1 col istreamT e1,e2;E weight;innm;for(i=0;i

7、e1;G.insertVertex(e1);i=0;while(ie1e2weight;j=G.getVertexPos(e1);k=G.getVertexPos(e2);if(j=-1|k=-1)coutg1;coutbool Graphmtx:insertVertex(const T /顶点表满,不插入VerticesListnumVertices+=vertex;return true;case 2:coutv1;g1.insertVertex (v1);coutbool Graphmtx:insertEdge (int v1,int v2,E cost)/插入边(v1,v2), 权值为

8、 costif(v1-1coutcost;g1.insertEdge (e1,e2,cost);cout void DFS(Graphmtxn=G.NumberOfVertices(); /顶点个数bool *visited=new booln; /创建辅助数组for (i = 0; i void DFS(Graphmtxcout void BFS(Graphmtxint n = G.NumberOfVertices(); /图中顶点个数bool *visited = new booln;for (i = 0; i Q; Q.EnQueue (loc); /顶点进队列, 实现分层访问while

9、 (!Q.IsEmpty() ) /循环, 访问所有结点Q.DeQueue (loc);w = G.getFirstNeighbor (loc); /第一个邻接顶点while (w != -1) /若邻接顶点 w 存在if (!visitedw) /若未访问过cout v1;coutbool Graphmtx:removeVertex (int v)/删去顶点 v 和所有与它相关的边if(v=numVertices)return false; if(numVertices=1)return false;int i,j;VerticesListv=VerticesListnumVertices-1;for(i=0;ie1;g1.removeVertex(e1);coutbool Graphmtx:removeEdge (int v1,int v2)/在图中删除边(v1,v2)if(v1-1g1.removeEdge(e1,e2);coutg1;break;界面显示:Case8 的操作是退出case 8:return 0;break;界面显示:(五)调试与测试在调试过程中遇到很多问题,在定义变量的时候遇到一些问题,对于全局变量还是局部变量要区分一下。还有,对于出现某种错误,如函数重载等,都可以解决了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报