图的建立及输出课程设计源代码
(完整word版)数据结构图的建立与输出课程设计

计算机工程学院数据结构课程设计报告题目:图的建立与输出姓名:学号:专业班级:指导教师:设计时间:目录1课题任务与计划 (3)2设计方案及原理 (3)2.1 图有两种主要的存储结构 (3)2.2 图的邻接表存储表示 (4)2.3 有向图的十字链表存储表示法 (5)2.4无向图的邻接多重表存储表示 (5)2.5邻接矩阵表示法 (6)2.6邻接表表示法 (9)3各功能的程序流程 (10)3.1函数功能的实现 (10)3.2变量的定义 (12)4主函数程序流程 (12)5实验数据分析 (13)6附源代码 (16)7参考书目 (19)一课题任务与计划建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
数据结构课程设计是学习数据结构课程的一个重要环节。
能巩固和加深课堂教学内容,提高学生实际工作能力,培养科学作风,为学习后续课程和今后的系统开发奠定基础。
通过课程设计,使学生熟练掌握数据结构课程中所学的理论知识,并实际应用,通过综合运用数据结构的基本知识来解决实际问题,加强学生分析和解决问题的能力。
除了广义表和树以外,都可以有两类不同的存储结构,它们是由不同的映像方法(顺序映像和链式映像)得到的。
由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序映像的存储结构,但可以借助数组的数据类型表示元素之间的关系。
另一方面,用多重链表表示图是自然的事,它是一种最简单的链式映像结构,即以一数据域和多个指针域组成的结点表示图中一个顶点,其中数据域存储该顶点的信息,指针域存储指向其邻接点的指针,如图所示,有向图G1和无向图G2的多重链表。
但是,由于图中各个结点的度数不同,最大度数和最小度数可能相差很多,因此,若按度数最大的顶点设计结点结构,则会浪费很多存储单元;反之,若按每个顶点自己的度数设计不同的结点结构,又会给操作带来不便。
UML实验报告

中南民族大学管理学院学生实验报告课程名称:UML面向对象分析与设计教程年级:专业:信息管理与信息系统学号:姓名:指导教师:实验地点:管理学院综合实验室2013 学年至 2014 学年度第 2 学期目录实验一 UML建模基础实验二用例图实验三 UML类图实验四对象图实验五包图实验六动态模型图实验(一) UML建模基础实验时间:实验目的1.熟悉UML建模工具Rational Rose的基本菜单及操作。
2.掌握UML的三大组成部分及各部分作用。
3.掌握UML的可见性规则和构造型的作用。
实验内容1.练习使用建模工具建立各种UML图形,并对图形进行相应编辑和修改。
2.认识各种UML关系及可见性符号,并用工具表示出来。
答:各种UML关系如下:分析与讨论1.总结UML在软件工程中的作用以及使用UML建模的必要性。
答:统一建模语言(UML)是用来对软件密集系统进行可视化建模的一种语言,也是为面向对象开发系统的产品进行说明、可视化、构造和编制文档的一种语言。
UML作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现。
当模型建立之后,模型可以被UML工具转化成指定的程序语言代码。
UML可以贯穿软件开发周期中的每一个阶段,最适于数据建模、业务建模、对象建模、组件建模。
UML展现了一系列最佳工程实践,这些最佳实践在对大规模、复杂系统进行建模方面,特别是在软件架构层次方面已经被验证有效。
UML是一种功能强大的,面向对象的可视化系统分析的建模语言,它的各个模型可以帮助开发人员更好地理解业务流程,建立更可靠,更完善的系统模型,从而使用户和开发人员对问题的描述达到相同的理解,以减少语义差异,保障分析的正确性。
指导教师批阅:实验(二)用例图实验时间:实验目的1.掌握用例的概念、UML用例图的组成、作用以及使用场合。
2.掌握用例与用例之间的各种关系。
3.用Rational Rose工具练习教材中的用例图。
图的建立与输出

完全图
12/4/2010
B E D
稀疏图 e<nlogn
4
B
D
图的定义和术语
子图的定义
A E C
图G
B
A E
D
C
D
图G的子图 的子图
12/4/2010
5
图的相关术语
无向图顶点的度 无向图顶点的度等于依附于该顶点的边的 数目,例: TD(A)=3
A E C
无向图
12/4/2010 6
12/4/2010
13
图的建立与输出的功能
主要运用到的相关操作:
include<iostream>:包含函数 using namespace std:命名空间std内定义的所有标识符都有效 define Maxsize 200:定义大小 void Creatyes(Mgraph *G) :有向图的建立 void Creatno(Mgraph *G) : 无向图的建立
B
D
图的相关术语
有向图顶点的度 有向图中:分为入度ID(V)和出度OD(V) TD(V)= ID(V)+ OD(V) 例:TD(E)=3,其中出度为OD(E) 1,入度ID(E) 为2
A B E C
有向图
12/4/2010 7
D
图的相关术语
顶点的度和边的关系
n
e=1/2∑TD(Vi)
i=1
A E C
A 0
12/4/2010
10
邻接矩阵
无向图的邻接矩阵构造类型定义
#define MAXVEX 100 typedef int Datatype;/*图的顶点个数*/ typedef struct { Datatype vexs[MAXVEX];/*顶点信息表*/ int edges[MAXVEX] [MAXVEX];/*邻接矩阵*/ int n,e;/*顶点数和边数*/ }graph;
《信息资源管理》实验指导书

《信息资源管理》课程实验指导书《信息资源管理》实验指导书目录实验1 建立工资主文件及其程序 ................................................... - 2 - 实验2 工资管理系统模拟实验 ....................................................... - 1 - 实验3 科达电脑外部设备管理信息系统..................................... - 12 - 实验4 科达组装电脑管理信息系统 ............................................. - 25 - 实验5 客房管理信息系统 ............................................................. - 70 -实验1 建立工资主文件及其程序一、实验目的1、进一步熟悉VFP6.0程序设计语言在实际中的运用。
2、熟悉E-R图的设计过程。
二、实验要求:用VFP6.0完成教材(管理信息系统(高教版))87页实例3.2的设计。
三、实验步骤与内容:1、用VFP把工资主文件建立在硬盘上2、每输入一个记录后,能通过屏幕显示输入内容,提供校验。
只有当操作者回答“Y”时,才将数据存盘。
3、如果主文件中已有某人的数据,屏幕应提示:“该人已有数据!回车后重输!”提示:1、在建立主程序时尽量先不看书中的源程序。
复习与巩固VFP基本编程语句。
2、教程中的屏幕输出语句也可通过消息框加以实现。
实验2 工资管理系统模拟实验一、实验概述该实验采用的系统是由山东经济学院信通科技开发公司开发的工资管理系统。
该软件操作界面亲切直观,操作简便,操作人员无需具备专业计算机知识,便可正常工作。
工资核算系统主要是输入与职工工资计算和管理有关的原始数据,提供工资结算信息,及时处理企业职工调入、调出、调资结算等数据,并打印输出各种工资报表。
数据结构与算法课程设计报告---图的算法实现

数据结构与算法课程设计报告课程设计题目:图的算法实现专业班级:信息与计算科学1002班目录摘要 (1)1、引言 (1)2、需求分析 (1)3、概要设计 (2)4、详细设计 (4)5、程序设计 (10)6、运行结果 (18)7、总结体会 (19)摘要(题目): 图的算法实现实验内容图的算法实现问题描述:(1)将图的信息建立文件;(2)从文件读入图的信息,建立邻接矩阵和邻接表;(3)实现Prim、Kruskal、Dijkstra和拓扑排序算法。
关键字:邻接矩阵、Dijkstra和拓扑排序算法1.引言本次数据结构课程设计共完成图的存储结构的建立、Prim、Kruskal、Dijkstra 和拓扑排序算法等问题。
通过本次课程设计,可以巩固和加深对数据结构的理解,通过上机和程序调试,加深对课本知识的理解和熟练实践操作。
(1)通过本课程的学习,能够熟练掌握数据结构中图的几种基本操作;(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
使用语言:CPrim算法思想:从连通网N={V,E}中的某一顶点v0出发,选择与它关联的具有最小权值的边(v0,v),将其顶点加入到生成树的顶点集合V中。
以后每一步从一个顶点在V中,而另一个顶点不在V中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合V中。
如此继续下去,直到网中的所有顶点都加入到生成树顶点集合V中为止。
拓扑排序算法思想:1、从有向图中选取一个没有前驱的顶点,并输出之;2、从有向图中删去此顶点以及所有以它为尾的弧;重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。
没有前驱-- 入度为零,删除顶点及以它为尾的弧-- 弧头顶点的入度减1。
2.需求分析1、通过键盘输入建立一个新的有向带权图,建立相应的文件;2、对建立的有向带权图进行处理,要求具有如下功能:(1)用邻接矩阵和邻接表的存储结构输出该有向带权图,并生成相应的输出结果;(2)用Prim、Kruskal算法实现对图的最小生成树的求解,并输出相应的输出结果;(3)用Dijkstra算法实现对图中从某个源点到其余各顶点的最短路径的求解,并输出相应的输出结果;(4)实现该图的拓扑排序算法。
《数据结构课程设计》指导书

《数据结构》课程设计指导书沈阳理工大学.信息学院2013.11.1一.目的与意义软件设计能力对计算机专业的学生是很重要。
通过数据结构的学习,使学生对软件编程能力有一定的提高。
数据结构课程设计是锻炼学生在进一步掌握模块化、结构化程序设计的方法的同时,培养学生运用已学知识分析问题、解决问题及编写实用程序的能力,通过对线性化、层次化、网络化数据结构的了解进一步掌握自然数据的结构方式及组织方式,让学生深入体会存储在计算机中的数据及程序中如何运用数据实现编程。
主要目的如下:1.通过本课程设计使学生对面向对象的设计过程有初的认识,并对面向对象的高能语言的学习打下基础,2.通过不同类型的程序设计使学生进一步掌握数据的几种不同的组织和存储方式,为高级编程做准备,3.为专业课的深入学习和毕业设计打基础二.任务和要求分析每一组题目,按要求完成相应的题目:1.题目参照附录中《数据结构课程设计》题目选题。
2. 要求:1)对相应的题目进行算法设计2)编写源代码3)上机调试4)显示调试结果5)写出实验总结3.课程设计说明书设计完成后,将自己选定的题目按上述要求完成课程设计说明书。
课程设计说明书内容包含:题目、要求、初步设计(可以是流程图、功能模块图)、详细设计、程序代码、测试数据、运行结果、遇到的问题及总结几部分。
三.进度安排设计总学时为2周第一周:查阅资料、小组讨论、进行模块划分写出分析报告,画N-S结构化框图,编写程序清单,上机调试.第二周周四、五:验收(计算机机房),并将课程设计报告交上来.四.考核标准与成绩评定方式成绩评定有如下几项参考:1.初步设计内容的考核:是否有查阅资料能力?是否有设计思想?2.程序编码能力调试能力的考核:程序是否清晰、易读?在技算计上是否可独立完成程序的调试,是否熟练?3.说明书质量的考核:设计结构是否合理?叙述是否正确?方案是否可行?4.答辩:设计结果的调试能力,对自己设计是否熟练?5.出勤率极平时表现的考核:出勤超过2次不到者成绩为不及格。
数据结构课程设计(附代码)-数据结构设计

上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
4、删除功能:LinkList *Delete(LinkList *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。
5、插入功能:LinkList *Insert(LinkList *head);输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。
链表长度加一,重新存储。
(5) 程序的输入与输出描述输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;输出:调用void print(LinkList *head)函数,输出学生的记录。
(6) 程序测试主菜单:成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)(7) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。
《电子线路CAD》课程标准

《电⼦线路CAD》课程标准《电⼦线路CAD》课程标准课程名称:电⼦线路CAD 课程代码:5903025052课程类别:[公共课/专业基础课/专业课] 前导课程:模拟电⼦技术、数字电⼦技术、计算机应⽤基础学时:64 学分:开课时间:[⼤⼀上期] 适⽤专业:教研室:电⼦通信教研室开课院系:电⼦⼯程学院编制⼈:桑洪编制⽇期:⼀、课程性质与任务(⼀)课程性质本课程是⾼等院校电⼦信息技术,通信⼯程等相关专业的必修课程,是为培养学⽣的基础理论知识和基本技能训练⽽设置的。
通过本课程的学习与实践,使学⽣掌握原理图及印刷电路板图的编辑、输出、⽹表⽣成、检查、分析,打印及建⽴新原理图、印刷电路板图库等。
通过设计实验学⽣可以独⽴实现⼿动和⾃动布线印刷电路板的设计,为今后在⼯作中的实际应⽤打下较为坚实的基础。
(⼆)课程任务《电⼦电路CAD》是⼀门实践性要求很⾼的课程,学⽣需要通过实验和设计环节巩固所学知识,进⽽综合运⽤所学知识针对不同的⽤户需求设计开发,实践是⾮常重要的教学环节。
鉴于⽬前的设备及我国CAD软件的流通性,本课程以PROTEL99 SE 软件为主体,介绍其基础知识、设计流程及设计⽅法等问题。
学完本课程应使学⽣掌握原理图及印刷电路板图的编辑、输出、⽹表⽣成、检查、分析及建⽴新原理图、印刷电路板图库等。
通过设计实验学⽣可以独⽴实现⾃动布线印刷电路板的设计,为今后在⼯作中的实际应⽤打下较为坚实的基础。
(三)与后续课程的关系它是后续课程《电⼦装配及⼯艺》和《单⽚机原理及应⽤》的基础,是为后续的课程设计和毕业设计服务。
⼆、教学要求(⼀)教学总体⽬标1、了解电⼦产品设计与制作的⼀般过程。
2、能阅读电路原理图和PCB图。
3、掌握Protel软件的安装、使⽤⽅法。
4、能⽤Protel软件制作PCB图,在熟练作⽤的基础上掌握电路的原理图、印刷线路板的设计⽅法。
5、了解原理图设计过程中应注意的问题和⼀些特殊元器件的布局、散热、安装等设计时应注意的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int QueueFront(V sq, int *e); int QueueOut(V *sq); void main(void) //主函数 { MGraph g; MGraph *G = &g; CreateUDN(G); Print(G); DFSTraverse(g); BFSTraverse(g); } int CreateUDN(MGraph *G)//采用邻接矩阵表示法构造图 { int i,j,k,v1,v2,w; printf("----------------------------------\n"); printf("图的邻接矩阵的创建与深度、广度遍历\n"); printf("----------------------------------\n"); printf("输入顶点数和边数,用空格隔开:\n"); scanf("%d %d",&G->vexnum,&G->arcnum); for(i=0; i<G->vexnum; i++) { G->vexs[i] = i+1; } for(i=0; i < G->vexnum; i++) for(j=0; j < G->vexnum; j++) G->arcs[i][j].adj = INFINITY; for(k=0; k<G->arcnum; k++) { printf("输入弧的弧头和弧尾(1...%d)\n",G->vexnum); scanf("%d %d",&v1,&v2); G->arcs[v1-1][v2-1].adj = 1; G->arcs[v2-1][v1-1].adj = 1; } return OK;
#include <stdio.h> #define MAX 20 //定义最大值 #define VRType int//定义顶点信息类型 #define InfoType char//定义弧的信息 #define VertexType int//顶点类型设为整形 #define OK 1 #define INFINITY 0 #define MAX_VERTEX_NUM 20 //最大顶点数为20 typedef struct { int data[MAX]; int front,rear; //顶点数和边数 } V; typedef struct ArcCell { VRType adj; //顶点关系类型 //InfoType *info; //该弧的相关信息的指针 }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { VertexType vexs[MAX_VERTEX_NUM]; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧数 }MGraph; int CreateUDN(MGraph *G);//图的深度优先遍历 int Print(MGraph *G); void DFSTraverse(MGraph G); void DFS(MGraph G,int v); int visited[MAX]; void BFSTraverse(MGraph G);//图的广度优先遍历 void BFS(MGraph G,int v); void QueueInit(V *sq); int QueueIn (V *sq, int x); int QueueIsEmpty(V sq);
} int Print(MGraph *G) { int i,j; printf("图的邻接矩阵输出为:\n"); for(i=0; i<G->vexnum; i++) { for(j=0; j<G->vexnum;j++) { printf("%d ",G->arcs[i][j].adj); } printf("\n"); } return OK; } void DFSTraverse(MGraph G) //图的深度优先遍历 { int v; printf("\n图的深度遍历输出为:\n"); for(v=0; v<G.vexnum; v++) { visited[v] = 0; } for(v=0; v<G.vexnum; v++) { if(visited[v] == 0) { DFS(G,v); printf("\n"); } } } void DFS(MGraph G,int v)//图的深度遍历图G的各个节点 { int w; visited[v] = 1;
return 1; } } int QueueIn (V *sq, int x)//将元素x如队列sq的队尾 { if (sq->front==(sq->rear+1)%MAX) { printf("queue is full!\n"); return 0; } else { sq->data[sq->rear]=x; sq->rear=(sq->rear+1)%MAX; return 1; } } int QueueOut(V *sq)//将队列sq队首元素出队列 { if (QueueIsEmpty(*sq)) { printf("queue is empty!\n"); return 0; } else { sq->front=(sq->front+1)%MAX; return 1; } }
QueueOut(&q); for(v2=0; v2<G.vexnum; v2++) { if(G.arcs[v1][v2].adj != 0 && visited[v2] == 0) { QueueIn(&q,v2); visited[v2]=1; printf("%d ",G.vexs[v2]); } } } } void QueueInit(VБайду номын сангаас*sq) //初始化顺序循环列 { sq->front=0; sq->rear=0; } int QueueIsEmpty(V sq) //如果顺序循环队列为空,成功返回1,否则返回 0 { if (sq.rear==sq.front) return 1; else return 0; } int QueueFront(V sq, int *e)//将顺序循环队列sq的队头元素保存到e所指 地址 { if (QueueIsEmpty(sq)) { printf("queue is empty!\n"); return 0; } else { *e=sq.data[(sq.front)];
printf("%d ",G.vexs[v]); for(w=0; w<G.vexnum; w++) { if(G.arcs[v][w].adj ==1 && visited[w] == 0) { DFS(G,w); } } } void BFSTraverse(MGraph G)//图的广度优先遍历 { int v; printf("\n图的广度遍历输出为:\n"); for(v=0; v<G.vexnum; v++) { visited[v]=0; } for(v=0; v<G.vexnum; v++) { if(visited[v]==0) { BFS(G,v); printf("\n"); } } } void BFS(MGraph G,int v)//从v出发广度遍历图G的各个节点 { int v1,v2; V q; QueueInit(&q); QueueIn(&q,v); visited[v] = 1; printf("%d ",G.vexs[v]); while(QueueIsEmpty(q) == 0) { QueueFront(q,&v1);