当前位置:文档之家› 哈工大数据结构课件第4章图结构及其应用算法

哈工大数据结构课件第4章图结构及其应用算法

数据结构应用设计设计报告

数据结构应用设计设计报告题目名称:___基于哈夫曼编码的文件压缩器_ 设计环境:____ __VC6.0 ____________ 指导教师:_____ _蔡茂蓉______________ 专业班级:______软件工程0601班__ ___ 姓名:__ _ __杨文辉_____________ 学号:___ ____ _____ 联系电话:_ _ 电子邮件: 设计日期:年月日至年月日 设计报告日期:年月日

1 .题目................................................................................................... 错误!未定义书签。 2 .需求分析........................................................................................... 错误!未定义书签。 2.1文件压缩过程:......................................................................... 错误!未定义书签。 2.2文件解压过程:......................................................................... 错误!未定义书签。 2.3压缩文件的存储结构设计图:................................................. 错误!未定义书签。 2.4HAF文件示例:...................................................................... 错误!未定义书签。 3 .详细设计........................................................................................... 错误!未定义书签。 3.1压缩流程图:............................................................................. 错误!未定义书签。 3.2解压流程图:............................................................................. 错误!未定义书签。 3.3节点类设计:............................................................................. 错误!未定义书签。 3.4编码和译码时的控制结构的实现............................................. 错误!未定义书签。 4.调试分析........................................................................................... 错误!未定义书签。 6 .测试结果........................................................................................... 错误!未定义书签。 6.1文件压缩..................................................................................... 错误!未定义书签。 6.2文件解压..................................................................................... 错误!未定义书签。 7.实验总结........................................................................................... 错误!未定义书签。 8 .参考文献........................................................................................... 错误!未定义书签。

数据结构图的应用报告

数据结构课程设计图的应用个人报告 1979:Red and Black 第一、题目理解 有一个长方形的房间,覆盖平方米瓷砖。每一层的颜色或是红色或黑色。一名男子正站在一个黑色的瓷砖。从瓷砖,他可以转移到四个相邻瓷砖。但是他不能进入红色瓷砖,他只能移动黑砖。写程序的数量黑色瓦片,他可以达到通过重复上述动作。 题目要求只能走黑格子而不能走红格子,从其中一块黑格子开始求出可以到达的黑格子数。 第二、算法思想 用图的深度优先遍历可以解决问题,从开始的位置探索四个方向的格子,用递归直到走完所有黑格子。 建图结构,图的每一个顶点表示瓦片,如果两个相邻顶点都表示黑瓦,则在两个顶点间连线,表示可以从一片黑瓦移到另一片上;对建好的图从给定的起始点开始调用深度优先遍历算法,能访问几个顶点表示重复移动能达到的黑瓦的数目. 第三、如何实现 用一个二维数组来表示房间格子的分布。用变量count来记录可行黑格子的个数。用深度优先遍历算法来遍历整个二维数组。 search(int k,int t){ // Search函数,递归调用. if(k>=0 && k=0 && t

1915: Knight Moves 第一、题目理解 题目要求要计算国际象棋中骑士从一个指定位置到目的位置的最少步数。因为每一次都有八种走法,要把可行的走法记录下来,直到走到终点为止。输出最少的步数。 第二、算法思想 此问题可利用广度优先遍历算法,用一个数组来记录可行的走法,然后再用另一个数组来记录数组中的每一种情况的可行走法,重复以上步骤,当终点出现在第n数组中则结束。数组的数量n就是最小的步数。 第三、如何实现 数据结构: typedef struct { //定义顶点的结构 int x, y; int direction; }VRType; typedef struct { int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int length; }MGraph; typedef VRType QElemType; //队列定义 #define MAXQSIZE 1000 typedef struct { QElemType *base; int front; int rear; }SqQueue;

数据结构课程设计报告,含菜单

算法与数据结构课程设计 报告 系(院):计算机科学学院 专业班级:计科11005 姓名:张林峰 学号: 201003784 指导教师:詹泽梅 设计时间:2012.6.11 - 2012.6.18 设计地点:12教机房

目录 一、课程设计目的 (2) 二、设计任务及要求 (2) 三、需求分析 (2) 四、总体设计 .............. 错误!未定义书签。 五、详细设计与实现[含代码和实现界面].. 8 六、课程设计小结 (15)

一.设计目的 1.能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 3.初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。 4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 5.培养根据选题需要选择学习书籍,查阅文献资料的自学能力。二.设计任务及要求 根据《算法与数据结构》课程的结构体系,设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。比如,主界面是大项,主要是学过的各章的名字诸如线性表、栈与队列、串与数组及广义表等,子菜单这些章中的节或者子节。要求所有子菜单退出到他的父菜单。编程实现时,要用到C++的面向对象的功能。 三.需求分析 菜单运用极其广泛,应用于各行各业。菜单运用起来极其方便。随着社会的发展,社会的行业出现多样化,也就需要各式

数据结构线性表的应用实验报告

实验报告 课程名称____数据结构上机实验__________ 实验项目______线性表的应用____________实验仪器________PC机___________________ 系别_____电子信息与通信学院___ 专业________ ___ 班级/学号______ __ 学生姓名______ ___________ 实验日期_______________________ 成绩_______________________ 指导教师_______________________

实验一.线性表的应用 1.实验目的:掌握线性链表的存储、运算及应用。利用链 表实现一元多项式计算。 2.实验内容: 1)编写函数,实现用链表结构建立多项式; 2)编写函数,实现多项式的加法运算; 3)编写函数,实现多项式的显示; 4)测试:编写主函数,它定义并建立两个多项式,显示 两个多项式,然后将它们相加并显示结果。变换测试用的多项式,检查程序的执行结果。 选做内容:修改程序,选择实现以下功能: 5)多项式求值:编写一个函数,根据给定的x值计算并 返回多项式f(x)的值。测试该函数(从终端输入一个x的值,调用该函数并显示返回结果)。 6)多项式相减:编写一个函数,求两个多项式相减的多 项式。 7)多项式相乘:编写一个函数,求两个多项式的乘积多 项式。 3.算法说明: 1)多项式的建立、显示和相加算法见讲义。可修改显示 函数,使输出的多项式更符合表达规范。

2)多项式减法:同次项的系数相减(缺项的系数是0)。 例如a(x)=-5x2+2x+3,b(x)= -4x3+3x,则a(x)-b(x) =4x3-5x2-x+3。提示:a(x)-b(x) = a(x)+(-b(x))。 3)多项式乘法:两个多项式的相乘是“系数相乘,指数 相加”。算法思想是用一个多项式中的各项分别与另 一个多项式相乘,形成多个多项式,再将它们累加在 一起。例如,a(x)=-5x2+2x+3,b(x)=-4x3+3x,则 a(x)*b(x) = (-4x3)*(-5x2+2x+3)+(3x)*(-5x2+2x+3) = (20x5-8x4-12x3) + (-15x3+6x2+9x) = 20x5-8x4-27x3+6x2+9x。 4.实验步骤: 根据实验报告的要求,我对文件夹里的C文件进行了丰 富和修改,步骤如下: 链表结构建立多项式: typedef struct polynode { float coef; //系数 int exp; //指数 struct polynode *next; //下一结点指针 } PNode; 编写函数,实现多项式的加法运算; PNode * PolyAdd (PNode *f1, PNode *f2) //实现加法功能。

算法与数据结构图的应用实验报告

编号:XH03JW024-05/0 实训(验)报告 班级:姓名:座号:指导教师:成绩: 课程名称:算法与数据结构实训(验):实验六图的应用2011年12月9 日 一、实验目的: 1、掌握图的两种存储结构; 2、掌握图深度优先遍历的基本思想; 3、掌握图广度优先遍历的基本思想。 二、实训(验)内容、记录和结果(含数据、图表、计算、结果分析等) 1、程序源代码: // (以下为邻接表的队操作) void init1(linkqueue *q) { q->front=q->rear=(queue)malloc(sizeof(node)); q->front->next=NULL; } void ENQUEUE1(linkqueue *q, int v) { queue P; P=(queue)malloc(sizeof(node)); P->data=ga[v].vertex; P->next=NULL; q->rear->next=P; q->rear=P; } int DEQUEUE(linkqueue *q) { int k=0,u; queue P; P=q->front->next; while(ga[k].vertex!=P->data) k++; u=k; q->front->next=P->next; if(q->rear==P) q->rear=q->front; return u; } int isempty1(linkqueue *q)

{ if(q->front==q->rear) return 1; else return 0; } void CREATADJLIST(VerNode ga[]) /*建立无向图的邻接表*/ { int i,j,k; EdgeNode *s; getchar(); for(i=0;iadjvex=j; s->next=ga[i].firstedge; ga[i].firstedge=s; } } DFSL(int i) /*以Vi为出发点对邻接表存储的图G进行DFS搜索*/ { EdgeNode *p; printf("node:%c\n",ga[i].vertex);/*访问顶点Vi*/ visited1[i]=1; /*标记Vi已访问*/ p=ga[i].firstedge; /*取Vi边表的头指针*/ while(p) /*依次搜索Vi的邻接点Vj*/ { /*若Vj尚未访问,则以Vj为出发点向纵深搜索*/ if(!visited1[p->adjvex]) DFSL(p->adjvex); p=p->next; /*找Vi的下一个邻接点*/ } } BFSL(int k) //广度优先搜索邻接表表示的图 { int i; EdgeNode *p;

数据结构实验报告图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif #include using namespace std; #include "" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0;

数据结构图及其应用实验报告+代码

附件2: 北京理工大学珠海学院实验报告 ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 实验题目图及其应用实验时间 2011.5.10 一、实验目的、意义 (1)熟悉图的邻接矩阵(或邻接表)的表示方法; (2)掌握建立图的邻接矩阵(或邻接表)算法; (3)掌握图的基本运算,熟悉对图遍历算法; (4)加深对图的理解,逐步培养解决实际问题的编程能力 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: (1)建立图的邻接矩阵(或邻接表); (2)对其进行深度优先及广度优先遍历。 三、实验所涉及的知识点 1.创建一个图: CreateUDN(MGraph &G) 2.查找v顶点的第一个邻接点: FirstAdjVex(MGraph G,int v) 3. 查找基于v顶点的w邻接点的下一个邻接点: NextAdjVex(MGraph G,int v,int w) 4.图的矩阵输出: printArcs(MGraph G) 5:顶点定位: LocateVex(MGraph G,char v) 6. 访问顶点v输出: printAdjVex(MGraph G,int v) 7. 深度优先遍历: DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 8. 广度优先遍历BFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 9. DFS,从第v个顶点出发递归深度优先遍历图G: DFS(MGraph G,int v) 四、实验记录 1.对顶点的定位其数组下标,利用了找到之后用return立即返回,在当图顶点 多的情况下节省了搜索时间,程序如下 //对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1 int LocateVex(MGraph G,char v){ for (int i=0;i

数据结构图实验报告

数据结构教程 上机实验报告 实验七、图算法上机实现 一、实验目的: 1.了解熟知图的定义和图的基本术语,掌握图的几种存储结构。 2.掌握邻接矩阵和邻接表定义及特点,并通过实例解析掌握邻接 矩阵和邻接表的类型定义。 3.掌握图的遍历的定义、复杂性分析及应用,并掌握图的遍历方 法及其基本思想。 二、实验内容: 1.建立无向图的邻接矩阵 2.图的深度优先搜索 3.图的广度优先搜索 三、实验步骤及结果: 1.建立无向图的邻接矩阵: 1)源代码: #include "" #include "" #define MAXSIZE 30 typedef struct

{ char vertex[MAXSIZE]; ertex=i; irstedge=NULL; irstedge; irstedge=p; p=(EdgeNode*)malloc(sizeof(EdgeNode)); p->adjvex=i; irstedge; irstedge=p; } } int visited[MAXSIZE]; ertex); irstedge;

ertex=i; irstedge=NULL; irstedge;irstedge=p; p=(EdgeNode *)malloc(sizeof(EdgeNode)); p->adjvex=i; irstedge; irstedge=p; } } typedef struct node { int data; struct node *next; }QNode; ertex); irstedge;ertex); //输出这个邻接边结点的顶点信息 visited[p->adjvex]=1; //置该邻接边结点为访问过标志 In_LQueue(Q,p->adjvex); //将该邻接边结点送人队Q }

数据结构应用设计设计报告

数据结构应用设计设计报告 题目名称:___基于哈夫曼编码的文件压缩器_ 设计环境:____ __VC6.0 ____________ 指导教师:_____ _蔡茂蓉______________ 专业班级:______软件工程0601班__ ___ 姓名:__ _ __杨文辉_____________ 学号:___ ____ _____ 联系电话:_ _ 电子邮件: 设计日期:年月日至年月日 设计报告日期:年月日 1 .题目................................................................................................... 错误!未定义书签。

2 .需求分析........................................................................................... 错误!未定义书签。 2.1文件压缩过程:......................................................................... 错误!未定义书签。 2.2文件解压过程:......................................................................... 错误!未定义书签。 2.3压缩文件的存储结构设计图:................................................. 错误!未定义书签。 2.4HAF文件示例:...................................................................... 错误!未定义书签。 3 .详细设计........................................................................................... 错误!未定义书签。 3.1压缩流程图:............................................................................. 错误!未定义书签。 3.2解压流程图:............................................................................. 错误!未定义书签。 3.3节点类设计:............................................................................. 错误!未定义书签。 3.4编码和译码时的控制结构的实现............................................. 错误!未定义书签。 4.调试分析........................................................................................... 错误!未定义书签。 6 .测试结果........................................................................................... 错误!未定义书签。 6.1文件压缩..................................................................................... 错误!未定义书签。 6.2文件解压..................................................................................... 错误!未定义书签。 7.实验总结........................................................................................... 错误!未定义书签。 8 .参考文献........................................................................................... 错误!未定义书签。

数据结构实验—图实验报告

精品文档数据结构 实 验 报 告

目的要求 1.掌握图的存储思想及其存储实现。 2.掌握图的深度、广度优先遍历算法思想及其程序实现。 3.掌握图的常见应用算法的思想及其程序实现。 实验内容 1.键盘输入数据,建立一个有向图的邻接表。 2.输出该邻接表。 3.在有向图的邻接表的基础上计算各顶点的度,并输出。 4.以有向图的邻接表为基础实现输出它的拓扑排序序列。 5.采用邻接表存储实现无向图的深度优先递归遍历。 6.采用邻接表存储实现无向图的广度优先遍历。 7.在主函数中设计一个简单的菜单,分别调试上述算法。 源程序: 主程序的头文件:队列 #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int QElemType; typedef struct QNode{ //队的操作 QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; void InitQueue(LinkQueue &Q){ //初始化队列 Q.front =Q.rear =(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(OVERFLOW); //存储分配失败 Q.front ->next =NULL; } int EnQueue(LinkQueue &Q,QElemType e) //插入元素e为Q的新的队尾元素{ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(OVERFLOW); p->data=e;

数据结构实验———图实验报告

数据结构 实 验 报 告

目的要求 1.掌握图的存储思想及其存储实现。 2.掌握图的深度、广度优先遍历算法思想及其程序实现。 3.掌握图的常见应用算法的思想及其程序实现。 实验内容 1.键盘输入数据,建立一个有向图的邻接表。 2.输出该邻接表。 3.在有向图的邻接表的基础上计算各顶点的度,并输出。 4.以有向图的邻接表为基础实现输出它的拓扑排序序列。 5.采用邻接表存储实现无向图的深度优先递归遍历。 6.采用邻接表存储实现无向图的广度优先遍历。 7.在主函数中设计一个简单的菜单,分别调试上述算法。 源程序: 主程序的头文件:队列 #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int QElemType; typedef struct QNode{ //队的操作 QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; void InitQueue(LinkQueue &Q){ //初始化队列 Q.front =Q.rear =(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(OVERFLOW); //存储分配失败 Q.front ->next =NULL; } int EnQueue(LinkQueue &Q,QElemType e) //插入元素e为Q的新的队尾元素{ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(OVERFLOW); p->data=e;

数据结构与算法课程学习总结报告

数据结构与算法课程学习总结报告 数据结构与算法是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。通过学习,先报告如下: 一、数据结构与算法知识点 本学期学的《数据结构与算法》这本书共有十一个章节: 第一章的内容主要包括有关数据、数据类型、数据结构、算法、算法实现、C语言使用中相关问题和算法分析等基本概念和相关知识。其中重点式数据、数据类型、数据结构、算法等概念;C语言中则介绍了指针、结构变量、函数、递归、动态存储分配、文件操作、程序测试与调试问题等内容。 第二章主要介绍的是线性逻辑结构的数据在顺序存储方法下的数据结构顺序表(包括顺序串)的概念、数据类型、数据结构、基本运算及其相关应用。其中重点一是顺序表的定义、数据类型、数据结构、基本运算和性能分析等概念和相关知识。二是顺序表的应用、包括查找问题(简单顺序查找、二分查找、分块查找)、排序问题(直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、归并排序)、字符处理问题(模式匹配)等内容。本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。 第三章主要介绍的是线性逻辑结构的数据在链接存储方法下数据结构链表的相关知识。主要是单链表、循环链表的数据类型结构、数据结构、基本运算及其实现以及链表的相关应用问题,在此基础上介绍了链串的相关知识。在应用方面有多项式的相加问题、归并问题、箱子排序问题和链表在字符处理方面的应用问题等。本章未完全掌握的是循环链表的算法问题和C的描述。 第四章介绍在两种不同的存储结构下设计的堆栈,即顺序栈和链栈的相关知识,了解堆栈的相关应用,掌握应用堆栈来解决实际问题的思想及方法。本章主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。本章堆栈算法思想较为简单,所以能较好掌握。 第五章主要介绍顺序存储和链接存储方法下的两种队列、顺序(循环)队列和链队列的数据结构、基本运算及其性能分析以及应用。顺序队列(重点是循环队列)和链队列的概念、数据类型描述、数据结构和基本运算算法及其性能分析等。本章同堆栈有点类似,算法思想较为简单,所以能较好掌握;但难点重在循环队列队空、队满的判断条件问题。 第六章“特殊矩阵、广义表及其应用”将学习数组、稀疏矩阵和广义表的基本概念,几种特殊矩阵的存储结构及其基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。本章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。 第七章“二叉树及其应用”的知识结构主要是:非线性结构数据二叉树的定义、性质、逻辑结构、存储结构及其各种基本运算算法,包括二叉树的建立、遍历、线索化等算法。在此基础上,介绍二叉树的一些应用问题,包括哈夫曼编码问题、(平衡)二叉排序树问题和堆排序问题等。 第八章“树和森林及其应用”介绍树和森林的数据结构、基本算法及其性能分析,树和森林与二叉树之间的转换算法等,在此基础上介绍树的应用---B-树,应用B-树来实现数据元素的动态查找。本章基本掌握树和森林的概念和性质、数据结构、树的基本算法及性能

数据结构图实验报告汇总

一、实验目的和要求 (1)掌握图的相关概念,包括图,有向图,无向图,完全图,子图,连通图,度,入度,出度,简单回路和环等定义。 (2)重点掌握图的各种存储结构,包括邻接矩阵和邻接表等。 (3)重点掌握图的基本运算,包括创建图,输出图,深度优先遍历,广度优先遍历等。 (4)掌握图的其他运算 ,包括最小生成树,最短路径,拓扑排序和关键路径等算法。 (5)灵活运用图这种数据结构解决一些综合应用问题。 二、实验内容和方法 (1)实验内容: 1、编写一个程序algo8-1.cpp ,实现不带权图和带权图的邻接矩阵与邻接表的相互转换算法、输出邻接矩阵与邻接表的算法,并在此基础上设计一个程序exp8-1.cpp 实现如下功能: ①建立如图1所示的有向图G 的邻接矩阵,并输出; ②由有向图G 的邻接矩阵产生邻接表,并输出; ③再由②的邻接表产生对应的邻接矩阵,并输出。 图1 2、编写一个程序algo8-2.cpp ,实现图的遍历运算,并在此基础上设计一个程序exp8-2.cpp 完成如下功能: ①输出图1所示的有向图G 从顶点0开始的深度优先遍历序列(递归算法); ②输出图1所示的有向图G 从顶点0开始的深度优先遍历序列(非递归算法); ③输出图1所示的有向图G 从顶点0开始的广度优先遍历序列。 3、设计一个程序exp8-3.cpp,采用邻接表存储图,并输出图8.1(a )中从指定顶点1出发的所有深度优先遍历序列。 1 5 6 9 7 5 8 4 5 3 0 1 5 2 4 3

(2)实验方法: 1、综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 2、结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。 3、根据实验内容,编译程序。 三、实验环境: Windows 7,Visual C++6.0 三、实验过程描述 文件graph.h中定义了图的邻接矩阵表示类型和邻接表表示类型,该头文件在以下三个实验中都会使用到。其代码如下: #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED typedef int InfoType; #define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示无限大 //以下定义邻接矩阵类型 typedef struct { int no; InfoType info; }VertexType; typedef struct { int edges[MAXV][MAXV]; int n,e; VertexType vexs[MAXV]; }MGraph; //以下定义邻接表类型 typedef struct ANode { int adjvex; struct ANode* nextarc; InfoType info; }ArcNode; typedef int Vertex; typedef struct VNode { Vertex data;

《数据结构》习题汇编07第七章图试题课件.doc

第七章图试题 一、单项选择题 1. 在无向图中定义顶点的度为与它相关联的()的数目。 A. 顶点 B. 边 C. 权 D. 权值 2. 在无向图中定义顶点v i 与v j 之间的路径为从v i 到达v j 的一个()。 A. 顶点序列 B. 边序列 C. 权值总和 D. 边的条数 3. 图的简单路径是指()不重复的路径。 A. 权值 B. 顶点 C. 边 D. 边与顶点均 4. 设无向图的顶点个数为n,则该图最多有()条边。 A. n-1 B. n(n-1)/2 C. n(n+1)/2 D. n(n-1) 5. n 个顶点的连通图至少有()条边。 A. n-1 B. n C. n+1 D. 0 6. 在一个无向图中,所有顶点的度数之和等于所有边数的( ) 倍。 A. 3 B. 2 C. 1 D. 1/2 7. 若采用邻接矩阵法存储一个n 个顶点的无向图,则该邻接矩阵是一个( ) 。 A. 上三角矩阵 B. 稀疏矩阵 C. 对角矩阵 D. 对称矩阵 8. 图的深度优先搜索类似于树的()次序遍历。 A. 先根 B. 中根 C. 后根 D. 层次 9. 图的广度优先搜索类似于树的()次序遍历。 A. 先根 B. 中根 C. 后根 D. 层次 10. 在用Kruskal 算法求解带权连通图的最小(代价)生成树时,通常采用一个()辅助结构, 判断一条边的两个端点是否在同一个连通分量上。 A. 位向量 B. 堆 C. 并查集 D. 生成树顶点集合 11. 在用Kruskal 算法求解带权连通图的最小(代价)生成树时,选择权值最小的边的原则是该边不能 在图中构成()。 A. 重边 B. 有向环 C. 回路 D. 权值重复的边 12. 在用Dijkstra 算法求解带权有向图的最短路径问题时,要求图中每条边所带的权值必须是 ()。 A. 非零 B. 非整 C. 非负 D. 非正 13. 在一个连通图中进行深度优先搜索得到一棵深度优先生成树,树根结点是关节点的充要条件是它至少 有()子女。

数据结构实验报告

实验报告手册 课程名称:数据结构指导教师: 专业:计算机科学与技术20年—20年第学期 姓名:学号: 年级:级班级:

实验报告内容 实验题目:线性表及其应用 实验目的:掌握线性表的定义,掌握不同存储结构及基本运算 实验要求:实现约瑟夫(Joseph)问题描述:约瑟夫(Joseph)问题描述为:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,从第s个人开始从1报数,数到第m的人出列;然后从它在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计一个程序求出列顺序。 实验器材:计算机 实验电路图/程序流程图: (1)利用链表 (2)利用数组

实验步骤/程序源代码: //利用链表 #include #include #include typedef int ElemType; typedef struct SingleNode { ElemType data; struct SingleNode *next; }SLL,*LinkList; int main() { SLL *head ,*use,*temp; int i,n,m,k,a=0; printf("请输入总人数n:"); scanf("%d",&n); printf("从第m个人开始数起,请输入m:");

scanf("%d",&m); printf("数到第k个人,该人出列,请输入k:"); scanf("%d",&k); head = use = (SLL *) malloc(sizeof(SLL));//建立链表,形成链表头 head->data = 1; for (i = 2; i <= n; i++)//形成其余的n-1个 { use->next = (SLL *) malloc(sizeof(SLL)); use = use->next; use->data = i;//第i个置编号i } use->next = head;//末首相连,形成环 printf("人员序号为:"); //输出人员的序号 temp=head; for(i=0;idata); temp=temp->next; } printf("\n"); for(i=0;inext; } printf("人员出列顺序为:"); while (n) { for (i = 1; i < k; i++)//掠过k-1个 use = use->next; temp = use->next;//temp指向第k个 use->next = temp->next;//第k个从环中脱钩 printf("%d ", temp->data); free(temp);//释放第k个表元占用的空间 n--; } printf("\n"); return 0; } //利用数组 #include #include int main() { int i,k,m,n,num[50],*p;

数据结构 图的遍历 实验报告

实验项目名称:图的遍历 一、实验目的 应用所学的知识分析问题、解决问题,学会用建立图并对其进行遍历,提高实际编程能力及程序调试能力。 二、实验内容 问题描述:建立有向图,并用深度优先搜索和广度优先搜素。输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。 三、实验仪器与设备 计算机,Code::Blocks。 四、实验原理 用邻接表存储一个图,递归方法深度搜索和用队列进行广度搜索,并输出遍历的结果。 五、实验程序及结果 #define INFINITY 10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include typedef struct ArCell{ int adj; }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char name[20]; }infotype; typedef struct

{ infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; int LocateVex(MGraph *G,char* v) { int c = -1,i; for(i=0;ivexnum;i++) if(strcmp(v,G->vexs[i].name)==0) { c=i; break;} return c;} MGraph * CreatUDN(MGraph *G)//初始化图,接受用户输入{ int i,j,k,w; char v1[20],v2[20]; printf("请输入图的顶点数,弧数:"); scanf("%d%d",&G->vexnum,&G->arcnum); printf("结点名字:\n"); for(i=0;ivexnum;i++){ printf("No.%d:",i+1); scanf("%s",G->vexs[i].name);} for(i=0;ivexnum;i++) for(j=0;jvexnum;j++) G->arcs[i][j].adj=INFINITY; printf("请输入一条边依附的两个顶点和权值:\n"); for(k=0;karcnum;k++) {printf("第%d条边:\n",k+1); printf("起始结点:"); scanf("%s",v1); printf("结束结点:"); scanf("%s",v2); //printf("边的权值:"); //scanf("%d",&w); i=LocateVex(G,v1); j=LocateVex(G,v2); if(i>=0&&j>=0){ //G->arcs[i][j].adj=w; G->arcs[j][i]=G->arcs[i][j]; }} return G; } int FirstAdjVex(MGraph *G,int v) { int i; if(v<=0 && vvexnum){ //v合理 for(i=0;ivexnum;i++) if(G->arcs[v][i].adj!=INFINITY) return i;

相关主题
文本预览
相关文档 最新文档