欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    山东建筑大学数据结构课程设计报告.docx

    • 资源ID:9112377       资源大小:34.84KB        全文页数:29页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    山东建筑大学数据结构课程设计报告.docx

    1、山东建筑大学数据结构课程设计报告山东建筑大学计算机科学与技术学院课程设计说明书题 目: 基于逆邻接表的有向图基本操作的实现课 程: 数据结构院 (部): 计算机学院 专 业: 计科班 级: 133学生姓名: 潘含笑学 号: 20131111092 指导教师: 李盛恩完成日期: 2015.07.03山东建筑大学计算机科学与技术学院课程设计任务书设计题目基于逆邻接表的有向图基本操作的实现已知技术参数和设计要求题目三、实现类NetWork,实现BFS、DFS、拓扑排序,并实现采用逆邻接表作为存储结构的有向图,要继承NetWork。逆邻接表要使用STL提供的List和Vector等实现。设计内容与步骤

    2、1、 设计存储结构2、 设计算法3、 编写程序,进行调试4、 总结并进行演示、讲解设计工作计划与进度安排2015.6.172015.6.23,实现基类Network和有向图Graph,实现逆邻接链表的存储结构。2015.6.232015.7.1,编写测试代码。2015.7.12015.7.3,改正一些错误,完成实验。设计考核要求1、 考勤20%2、 课程设计说明书50%3、 成果展示30%指导教师(签字): 教研室主任(签字)山东建筑大学计算机科学与技术学院课程设计任务书设计题目双向循环链表已知技术参数和设计要求实现双向循环链表。设计内容与步骤5、 设计存储结构6、 设计算法7、 编写程序,进

    3、行调试8、 总结并进行演示、讲解设计工作计划与进度安排2015.4.222015.4.35,实现双向循环链表2015.4.252015.4.29,编写测试代码。设计考核要求4、 考勤20%5、 课程设计说明书50%6、 成果展示30%指导教师(签字): 教研室主任(签字)逆邻接链表实现有向图6一、问题描述5二、数据结构三、逻辑设计1、总体思路先实现Network类,通过队列实现BFS,通过堆栈实现DFS和拓扑排序。再构建Graph类,并继承Network类实现以逆邻接链表为存储结构的有向图。2、模块划分(以图示的方法给出各个函数的调用关系)Network类Initializepos虚函数 Ed

    4、ges虚函数Begin虚函数BFS函数DFS函数Topological函数Deactivatepos虚函数Vertices虚函数Nextvertex虚函数Begin函数Out函数Deactivatepos函数Initializepos函数Vertices函数 Edges函数Nextvertex函数Graph类3、函数或类的具体定义和功能Network类:virtual int Begin(int i) = 0;/确定起始顶点virtual int Nextvertex(int i) = 0;/下一个顶点virtual int Edges()=0;/确定点virtual int Vertices

    5、()=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(i

    6、nt 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=ali.begin(); /让迭代器等于链表的第i个顶点的第一个元素void Deactivatep

    7、os(int i)ali.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;/让迭代器等于链表的

    8、第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.hvoid Network:BFS(int v,int reach,int label,int a) int n=Vertices(); /

    9、获取n的值,有几个顶点 queue Q; /创建一个队列 int k=0; /定义一个k来使元素得到保存 reachv=label; /标记点 ak+=v; /用数组记录BFS的遍历顺序 Q.push(v); /把一个元素加入队列 while(!Q.empty() int x; x=Q.front(); /获取队列中的第一个元素 Q.pop(); /让队列中的第一个元素出队 for(int i=1;i=n;i+) /寻找x的下一个节点 int u=Begin(i); if(u=x)&(!reachi) /因为是逆邻接链表 Q.push(i); reachi=label; ak+=i; /把标记

    10、的元素放入遍历数组 while(u) /看后面是不是还有节点 u=Nextvertex(i); if(u=x)&(!reachi) Q.push(i); reachi=label; ak+=i; for(int i=v;in;i+) /输出BFS的运行结果 if(reachi=label) cout执行完BFS后第i个元素被标记 endl; else cout执行完BFS后第i个元素没有被标记 endl; cout从节点v开始BFS遍历的顺序是; for(int i=1;in;i+) /输出BFS的遍历顺序 coutai-1 ; ; coutendl;void Network:DFS(int

    11、v,int reach,int label,int a) stack S; /创建一个堆栈 int n=Vertices(); /获取n的值 int k=0; S.push(v); /把元素v加入堆栈 while(!S.empty() int x=S.top(); /获取堆栈的栈顶元素 if(!reachx) /如果元素没被标记,就把元素标记 reachx=label; ak+=x; S.pop(); /把堆栈的栈顶弹出 for(int i=1;i=n;i+) /获取节点的下一个元素 int u=Begin(i); if(u=x)&(!reachi) S.push(i); /把元素加入堆栈 w

    12、hile(u) u=Nextvertex(i); if(u=x)&(!reachi) S.push(i); else S.pop(); /如果被标记元素就弹出 for(int i=v;in;i+) /输出DFS的运行结果 if(reachi=label) cout执行完DFS后第i个元素被标记 endl; else cout执行完DFS后第i个元素没有被标记 endl; cout从节点1开始DFS遍历的顺序是; for(int i=1;in;i+) /输出DFS的遍历顺序 coutai-1ends; ; coutendl;bool Network:Topological(int v)int n

    13、=Vertices(); /获取n的值vector a(n+1);stack S; /创建一个堆栈for(int i=1;i=n ;i+) /初始化数组a,使每个点的a等于0,用来记录点的入度 ai=0;for(int i=1;i=n;i+) /遍历整个邻接链表,有入度的节点增加a的值 int x=Begin(i); while(x) ai+; x=Nextvertex(i); /后面有元素,则入度加1 for( int i=1;i=n;i+) /如果a=0,把元素加入堆栈 if(ai=0) S.push(i);int k=1;while(!S.empty() int y; y=S.top()

    14、; /拿出第一个元素 S.pop(); vk+=y; /弹出获取值的元素 for(int i=1;i=n;i+) /遍历整个邻接链表,使有y的元素的入度减一 int u=Begin(i); if(u=y&ai!=0) ai-; if(ai=0) S.push(i); /如果有入度等于0的元素,把元素加入堆栈 while(u) u=Nextvertex(i); if(u=y&ai!=0) ai-; if(ai=0) S.push(i); if(k=n+1) return true;else return false;Network:Network() /Graph.h#include #incl

    15、ude #include #include #includeNetwork.husing namespace std;class Graph:public Network public: Graph(int); 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() retu

    16、rn e; int Vertices() return n; void Initializepos(int i)pos=ali.begin(); void Deactivatepos(int i)ali.erase(pos); void Out(); private: int n; int e; vectorlist al; list:iterator pos; ;/Graph.cpp#include Graph.hGraph:Graph(int num) e=0; /初始化边,顶点 n=num; al.resize(n+1); /开空间Graph:Graph() int Graph:InDe

    17、gree(int node) return alnode.size();int Graph:OutDegree(int node) list:iterator q; /开链表的迭代器 int i=0; for(int p=1;p=n;p+) q=find(alp.begin(),alp.end(),node); if(q!=alp.end() i+; return i;Graph& Graph:Add(int node1, int node2) if(node1 n | node2 n) return *this; list:iterator p; p = find(alnode2.begin

    18、(), alnode2.end(), node1); /寻找有没有node1 if (p != alnode2.end() return *this; /如果有,返回 else alnode2.push_back(node1); e+; return *this;Graph& Graph:Delete(int node1, int node2) if(node1 n | node2 n) return *this; list:iterator p; p = find(alnode2.begin(), alnode2.end(), node1); if (p =alnode2.end() ret

    19、urn *this; else alnode2.erase(p); /删除要删除的元素 e-; return *this;void Graph:Out() for(int i = 1; i =n; i+) list:iterator p; cout逆邻接链表中第i行元素有; for(p = ali.begin(); p != ali.end(); p+) cout *p ; cout endl; return;int Graph:Begin(int i) if(in) cout无该点; Initializepos(i); if(pos=ali.end() return 0; else retu

    20、rn *pos;int Graph:Nextvertex(int i) if(in) cout无该点; pos+; if(pos!=ali.end() return *pos; else return 0;五、测试数据#includeGraph.h#includeNetwork.hint b20;int b120;int c20;int a20;int a120;int main(void) int n=6; int label=2; Graph g(n); /创建对象 g.Add(1,4).Add(1,3).Add(2,4).Add(2,5).Add(3,4).Add(3,6).Add(4,

    21、6).Add(5,6); g.Out(); g.BFS(1,b,label,b1); coutendl; g.DFS(1,a,label,a1); for(int i=1;i=n;i+) cout节点i的入度为:; coutg.InDegree(i),; cout节点i的出度为:; coutg.OutDegree(i)endl; g.Topological(c); /执行拓扑排序 for(int i=1;i=n;i+) cout拓扑排序的第i个元素是 ciendl;coutendl;g.Delete(4,6);g.Out(); 6、测试情况双向循环链表1、问题描述实现双向循环链表。二、数据结构

    22、a3 三、逻辑设计1、总体思路先构造双向循环链表的节点类,再逐步实现双向循环链表的基本函数。2、模块划分(以图示的方法给出各个函数的调用关系)DoubleCircularNode节点类DoubleCircular类DoubleCircular类DoubleCircular类DoubleCircular类DoubleCircular类DoubleCircular类DoubleCircular类DoubleCircular类3、函数或类的具体定义和功能templateclass DoubleCircularpublic: DoubleCircular();/构造函数 DoubleCircular(

    23、);/析构函数 bool IsEmpty() const;/判断是否为空 int length() const;/计算长度 bool Find(int k,T& x) const;/判断节点是否存在 int Search(const T& x) const;/查找节点 DoubleCircular& Insert(int k,const T& x);/插入节点 DoubleCircular& Delete(int k, T& x);/删除节点 void Output(ostream & out) const;/输出函数private: DoubleCircularNode *first;四、编

    24、码/DoubleCircular.htemplateclass DoubleCircularNode;#includeusing namespace std;templateclass DoubleCircularpublic: DoubleCircular(); DoubleCircular(); bool IsEmpty() const; int length() const; bool Find(int k,T& x) const; int Search(const T& x) const; DoubleCircular& Insert(int k,const T& x); Double

    25、Circular& Delete(int k, T& x); void Output(ostream & out) const;private: DoubleCircularNode *first;templateclass DoubleCircularNode friend class DoubleCircular; private: T data; DoubleCircularNode *left, *right;templateclass DoubleCircularIteratorpublic: T *Intialize(const DoubleCircular& c) location = c.first-right; if(location) return &location-data; return 0; T *Next(const DoubleCircular& c) if(!location) return 0; location =location-right; if (location-right!=c.first-right) return &location-data;


    注意事项

    本文(山东建筑大学数据结构课程设计报告.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开