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

合集下载

完整word版数据结构课设报告word文档良心出品

完整word版数据结构课设报告word文档良心出品

西安邮电大学(计算机学院)数据结构课程设计报告题目:哈弗曼编/译码器计算机科学与技术专业名称:1505 计科级:班常昊学生姓名:04151160 学号(8位):指导教师:设计起止时间:日月年2016122612年日—2016月30一. 设计目的1.训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

二. 设计内容利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。

三.概要设计1.建立哈夫曼树:读入文件(*.souce),统计文件中字符出现的频度,并以这些字符的频度作为权值,建立哈夫曼树。

这一步需要做字符的统计所以考虑到大量数据的处理,需要考虑时间复杂度带来的影响。

所以采用牺牲一定的存储空间的方法,以哈希表的方法完成统计。

因为字符的ascll码是0~128不重复的整数,所以采用不散列的简单哈希表。

(例如:对于abcdabbccc的串的处理——遍历字符串,HZArray[char[i]].HZ++)。

在完成频数的统计后,下一步对整个128的数组中的频数非零的字符按照从小到大的顺序排序。

考虑到稳定/非稳定排序对于本题没有什么影响,而且对于128的排序总数来说各种排序的方法时间复杂度相对计算机的性能不会相差多少,所以采用简单冒泡排序,而且,每次的排序实际数量都不会很多,加上flag的优化以后排序效率还是不错的。

完成排序后,根据哈弗曼树的性质,直接依据有序序列建立哈弗曼树。

数据结构的课程设计

数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。

2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。

3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。

技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。

2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。

3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。

情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。

2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。

3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。

本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。

通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。

在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。

2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。

3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。

4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。

5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。

6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。

7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。

数据结构课程设计完整版

数据结构课程设计完整版

通讯录操作系统一.需求分析当今时代是飞速发展的信息时代。

在各行各业中离不开信息管理以及处理,这正是计算机被广泛应用于管理系统的原因。

计算机管理的好处在于利用它能够进行信息储存以及信息编辑。

用计算机储存和控制,大大提高了工作效率也减少了好多人的工作量。

通讯录信息系统不仅仅帮助了人们记忆,同时也为不少管理者提供了方便。

其设计理念较简单,将传统的纸张与笔录方式改为计算机自动化进行通讯录信息管理,既省时间又提高工作效率。

用c语言构建的通讯录系统设计,通过课上学到一些关于结构体、数组、指针、函数以及循环函数的运用和字符串的处理等基本知识可以初步的实现通讯录的输入、显示、查找、删除等简单实用功能,给人们带来更多的方便。

通讯录信息系统的主要功能清单如下:1) 建立通讯录链表;2) 通讯者结点的插入(按编号的次序插入有序通讯录表);3) 通讯者信息的查询(按编号或姓名查找通讯者信息);4) 通讯者信息的删除(按编号或姓名删除通讯者信息);5) 通讯录的显示(显示所有通讯者信息列表);6) 通讯录信息系统的退出测试数据见调试分析。

二.详细设计算法分析:↓↓↓↓↓↓主函数流程图:主函数流程图创建函数流程图:显示通讯录流程图:查找函数流程图(1)find函数:find函数流程图(2)search函数Search函数流程图删除操作流程图:插入函数流程图:退出函数流程图:图11退出函数流程图3)调试分析及测试结果进入系统后,系统会出现图所示菜单:在主菜单中输入1后,系统会给出提示,如图所示:在主菜单中输入3后,输入要找的姓名。

在系统没有要找信息时或链表为空时,系统会给出提示,确认用户是否继续查找,如图所示:(链表为空时的查找)若要继续查找则按1 ,不是则按0,如图所示:(链表非空的查找)在主菜单中输入0后,系统会给出提示,提示用户输入相关信息,如图所示:依次输入提示信息输入信息:1wuyifeinv139********Wuhan2wwnv132********Wuhan再在主菜单输入1后,程序显示如图所示:在主菜单中输入2后输入要删除的编号,系统便自动删除要删除的通讯录信息,如图15所示:按1显示查看是否删除如图:输入4进行插入操作,如图所示:插入信息如下2wyfnv12345678912wuhan按1进行显示如下图:现在如果没有其他的操作则可按5退出,操作如图所示:实验心得:通过这次课程设计,我熟练的掌握了结构体、数组、指针、函数以及循环函数的运用和字符串的处理,了解代码中出现错误寻找错误的方法,初步了解到了一个完整的应用程序,应该如何处理美观与实用之间的关系,如何处理实际需求与操作难度之间的关系,并让我深刻了解到数据结构这门课的重要性和实用性,在以后的学习中,我将更加努力的学习并动手实践这门课程。

数据结构课程设计报告样本(图的存储与遍历)

数据结构课程设计报告样本(图的存储与遍历)

这是最后提交的文档资料格式,必须包含几个部分完成要求不少于50页。

《数据结构》课程设计题目图的存储与遍历学生姓名指导教师学院专业班级完成时间目录(要求自动生成)第一章课程设计目的 (2)第二章课程设计内容和要求 (2)第三章课程设计分析 (3)第四章算法描述 (4)第五章源代码 (8)第六章运行结果分析 (13)第七章结束语 (15)第八章参考文献 (15)第一章课程设计目的本学期我们对《数据结构》这门课程进行了学习。

这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。

这次课程设计不但要求实习者掌握《数据结构》中的各方面知识,还要求实习者具备一定的C语言基础和编程能力。

具体说来,这次课程设计主要有两大方面目的。

一是让实习者通过实习掌握《数据结构》中的知识。

对于《图的存储与遍历》这一课题来说,所要求掌握的数据结构知识主要有:图的邻接表存贮结构、队列的基本运算实现、邻接表的算法实现、图的广度优先搜索周游算法实现、图的深度优先搜索周游算法实现。

二是通过实习巩固并提高实习者的C语言知识,并初步了解Visual C++的知识,提高其编程能力与专业水平。

第二章课程设计内容和要求2.1课程设计内容该课题要求以邻接表的方式存储图,输出邻接表,并要求实现图的深度、广度两种遍历。

2.1.1图的邻接表的建立与输出对任意给定的图(顶点数和边数自定),并且对有向图与无向图都应进行讨论,根据邻接表的存储结构建立图的邻接表并输出之。

尽量用图形化的方式输出邻接表。

2.1.2 图的遍历的实现图的遍历包括图的广度优先遍历与深度优先遍历。

对于广度优先遍历应利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)来实现。

首先建立一空队列,从初始点出发进行访问,当被访问时入队,访问完出队。

并以队列是否为空作为循环控制条件。

对于深度优先遍历则采用递归或非递归算法来实现。

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告课程设计报告数据结构系别计算机系专业年级⼆年级学⽣姓名学号任课教师⼆○⼀⼆年⼆⽉⼀、图的建⽴及输出(⼀)题⽬内容描述任务:建⽴图的存储结构(图的类型可以是有向图、⽆向图、有向⽹、⽆向⽹,学⽣可以任选两种类型),能够输⼊图的顶点和边的信息,并存储到相应存储结构中,⽽后输出图的邻接矩阵。

(⼆)解题分析⾸先为图定义⼀个结构体,其中包含图的各种信息,然后为图定义⼀个数组,每个数组元素就是⼀个图结构。

采⽤数组结构⼀⼤原因是,在图的输出时,容易查找出想输出的图。

最后设计⽂件保存,⽽且当开始运⾏程序时,⽂件中有数据时,应该提醒⽤户是否提取原⽂件的信息。

(三)数据结构描述typedef struct GRAPH //图的结构体{int gkind; //图的种类int vernum,arcnum; //图的顶点数和边数int arcs[MAX_VERTEX][MAX_VERTEX]; //图的邻接矩阵char vexname[MAX_VERTEX][MAX_NAME]; //各个顶点的名称char gname[MAX_NAME]; //图的名字}GRaph;typedef struct GG{GRaph g[MAX_G]; //图的数组int n; //图的个数}Graph;数据的逻辑结构:图形结构数据的存储结构:顺序存储结构(四)主要算法描述1.图的建⽴函数void creatG(Graph *G)函数功能:选择要建⽴图的种类函数参数:Graph结构体指针G,表⽰图表函数返回值:⽆void CreatGraph(Graph *G)函数功能:输⼊图的信息函数参数:Graph结构体指针G,表⽰图表函数返回值:⽆int hashG(char *name,Graph *G)函数功能:确定顶点在图中的位置函数参数:字符型指针name表⽰要确定的顶点的名字,Graph结构体指针G,表⽰图表函数返回值:返回该顶点在图的中位置1.⽂字描述调⽤creatG()函数开始建⽴图并确定图的种类,然后再⽤CreatGraph()输⼊图的信息,在输⼊图的顶点的名字时,要⽤hashG()函数确定顶点在图中的位置。

图的建立与输出

图的建立与输出
A A E C C
完全图
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;

(完整word版)数据结构课程设计(哈夫曼编码)

(完整word版)数据结构课程设计(哈夫曼编码)

目录目录 (1)1 课程设计的目的和意义 (3)2 需求分析 (5)3 系统设计 (6)(1)设计思路及方案 (6)(2)模块的设计及介绍 (6)(3)主要模块程序流程图 (9)4 系统实现 (14)(1)主调函数 (14)(2)建立HuffmanTree (14)(3)生成Huffman编码并写入文件 (18)(4)电文译码 (19)5 系统调试 (22)小结 (25)参考文献 (26)附录源程序 (27)1 课程设计的目的和意义在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。

哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。

哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。

树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0"码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1"的序列作为和各个对应的字符的编码,这就是哈夫曼编码。

通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。

电报通信是传递文字的二进制码形式的字符串。

但在信息传递时,总希望总长度尽可能最短,即采用最短码。

作为软件工程专业的学生,我们应该很好的掌握这门技术。

在课堂上,我们能过学到许多的理论知识,但我们很少有过自己动手实践的机会!课程设计就是为解决这个问题提供了一个平台。

在课程设计过程中,我们每个人选择一个课题,认真研究,根据课堂讲授内容,借助书本,自己动手实践。

这样不但有助于我们消化课堂所讲解的内容,还可以增强我们的独立思考能力和动手能力;通过编写实验代码和调试运行,我们可以逐步积累调试C程序的经验并逐渐培养我们的编程能力、用计算机解决实际问题的能力。

在课程设计过程中,我们不但有自己的独立思考,还借助各种参考文献来帮助我们完成系统。

更为重要的是,我们同学之间加强了交流,在对问题的认识方面可以交换不同的意见.同时,师生之间的互动也随之改善,我们可以通过具体的实例来从老师那学到更多的实用的知识。

《数据结构》课程设计报告范本(doc 8页)

《数据结构》课程设计报告范本(doc 8页)

《数据结构》课程设计报告范本(doc 8页)《数据结构》课程设计报告一、课程设计的内容、要求1 线性表的另一种实现。

对顺序表空间被耗尽问题的一个解决办法是:当数组溢出时,用一个更大的数组替换该数组。

一个较好的法则是:当出现溢出时,数组长度加长一倍具有较高的时间和空间效率。

参照教材中顺序表的有关内容,按上面的要求实现顺序表,并测试当数组溢出时你的实现的运作情况。

二、所采用的数据结构ADT List{数据对象: D = {a i|a i ∈ElemSet, i=1,2…n>=0}数据关系: R1={<a i-1, a i>|a i-1, a i∈D, i=1,2,…,n}基本操作:void IniList(SqList& L);void DestroyList(SqList& L);bool ListEmpty(SqList L);int ListLength(SqList L);void GetElem(SqList L, int i, Elem &e);bool PriorElem(SqList L, Elem cur_e, Elem &pre_e);bool NextElem(SqList L, Elem cur_e, Elem &next_e);void ListInsert(SqList &L, int i, Elem e);void ListDelete(SqList &L, int i);void ClearList(SqList& L);}三、主要模块(或函数)及其功能typedef struct LIST{ElemType *data;int size;int max_size;}LIST;void InitList(LIST *list)//初始化{list->data = (int*)malloc(sizeof(ElemType)*INIT_SIZE);list->size = 0;list->max_size = INIT_SIZE;}void DestroyList(LIST &list){}bool NextElem(LIST list,int cur_e,int &next_e)//后继{if(cur_e < 0 || cur_e > list.size) return false;else{next_e = cur_e + 1;return true;}}void Insert(LIST *list,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}list->data[list->size] = value;list->size++;}void Insert_Back(LIST *list,int idx,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}if(idx>list->size){list->data[list->size] = value;}else{int i;for(i=list->size;i>idx;i--){list->data[i] = list->data[i-1];}list->data[idx] = value;}list->size++;}void ListDelete(LIST *list,int i,ElemType *e)//删除一个元素{int j;*e=list->data[i];for(j=i+1;j<=list->size-1;j++)list->data[j-1]=list->data[j];list->size--;}void Print_list(LIST *list){int i;if(list->size == 0){cout<<"当前线性表内没有元素。

(完整版)《数据结构课程设计》指导书

(完整版)《数据结构课程设计》指导书

《数据结构课程设计》指导书一、实习目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。

本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

通过对给定问题的求解,使学生在运用《数据结构》、程序设计以及迄今为止所学课程中的各种基本技术和理论,在建立问题模型、构造求解算法、设计数据结构、编程及上机调试等方面得到全面的锻炼,从而能更深刻地理解《数据结构》的精髓,为后续软件课程的学习及软件设计能力的提高奠定良好的基础。

二、数据结构课程设计要求通过这次设计,要求在数据结构析逻辑特性和物理表示,数据结构的选择的应用、算法的设计及其实现等方面中深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

学生必须仔细阅读《数据结构》课程设计指导书,认真主动完成课设的要求。

有问题及时主动通过各种方式与教师联系沟通。

学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报.课程设计按照教学要求需要一周时间完成(1周共五天).三、实习基本内容本次课程设计完成如下模块(共5个模块,学生可以在其中至少挑选3—4个功能块完成)1.校园导游程序2.员工管理系统或者订票系统3。

哈夫曼编/译码器或者拓扑排序4。

八皇后问或者迷宫问题求解5.停车场管理或者修道士野人问题若学生对课题表以外的相关课题较感兴趣,希望选作课程设计的课题时,应征得指导教师的认可,并写出明确的设计要求和说明.四、上交相关内容要求上交成果的内容必须由以下四个部分组成,缺一不可1.上交源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);2.上交程序的说明文件:(保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;3.课程设计报告:按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;其中包括:需求分析:(2)在该部分中叙述,每个模块的功能要求(3)概要设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义.(4)详细设计各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现).源程序要按照写程序的规则来编写。

(完整word版)数据结构课设报告(word文档良心出品)

(完整word版)数据结构课设报告(word文档良心出品)

西安邮电大学(计算机学院)数据结构课程设计报告题目:哈弗曼编/译码器专业名称:计算机科学与技术班级:计科1505学生姓名:常昊学号(8位):04151160指导教师:设计起止时间:2016年12月26日—2016年12月30日一. 设计目的1.训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

二. 设计内容利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。

三.概要设计1.建立哈夫曼树:读入文件(*.souce),统计文件中字符出现的频度,并以这些字符的频度作为权值,建立哈夫曼树。

这一步需要做字符的统计所以考虑到大量数据的处理,需要考虑时间复杂度带来的影响。

所以采用牺牲一定的存储空间的方法,以哈希表的方法完成统计。

因为字符的ascll 码是0~128不重复的整数,所以采用不散列的简单哈希表。

(例如:对于abcdabbccc 的串的处理——遍历字符串,HZArray[char[i]].HZ++)。

在完成频数的统计后,下一步对整个128的数组中的频数非零的字符按照从小到大的顺序排序。

考虑到稳定/非稳定排序对于本题没有什么影响,而且对于128的排序总数来说各种排序的方法时间复杂度相对计算机的性能不会相差多少,所以采用简单冒泡排序,而且,每次的排序实际数量都不会很多,加上flag的优化以后排序效率还是不错的。

完成排序后,根据哈弗曼树的性质,直接依据有序序列建立哈弗曼树。

(完整版)数据结构详细教案——图

(完整版)数据结构详细教案——图

数据结构教案第七章图第7章图【学习目标】1.领会图的类型定义。

2.熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则。

3.熟练掌握图的两种遍历算法。

4.理解各种图的应用问题的算法.【重点和难点】图的应用极为广泛,而且图的各种应用问题的算法都比较经典,因此本章重点在于理解各种图的算法及其应用场合。

【知识点】图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、拓扑排序、关键路径【学习指南】离散数学中的图论是专门研究图性质的一个数学分支,但图论注重研究图的纯数学性质,而数据结构中对图的讨论则侧重于在计算机中如何表示图以及如何实现图的操作和应用等.图是较线性表和树更为复杂的数据结构,因此和线性表、树不同,虽然在遍历图的同时可以对顶点或弧进行各种操作,但更多图的应用问题如求最小生成树和最短路径等在图论的研究中都早已有了特定算法,在本章中主要是介绍它们在计算机中的具体实现。

这些算法乍一看都比较难,应多对照具体图例的存储结构进行学习。

而图遍历的两种搜索路径和树遍历的两种搜索路径极为相似,应将两者的算法对照学习以便提高学习的效益。

【课前思考】1。

你有没有发现现在的十字路口的交通灯已从过去的一对改为三对,即每个方向的直行、左拐和右拐能否通行都有相应的交通灯指明。

你能否对某个丁字路口的6条通路画出和第一章绪论中介绍的”五叉路口交通管理示意图”相类似的图?2。

如果每次让三条路同时通行,那么从图看出哪些路可以同时通行?同时可通行的路为:(AB,BC,CA),(AB,BC,BA),(AB,AC,CA),(CB,CA,BC)目录第7章图 (1)7.1图的定义和基本术语 (1)7.2图的存储和创建 (2)7.2.1 图的存储表示 (2)7。

2.2 图的创建 (5)7。

3图的遍历 (5)7。

3.1 深度优先搜索 (5)7.3.2 广度优先搜索 (6)7。

4遍历算法的应用 (8)7.4。

图的建立与输出课程设计

图的建立与输出课程设计

图的建立与输出课程设计一、教学目标本课程的教学目标是使学生掌握图的建立与输出的基本知识和技能,能够运用图的形式表达和传递信息,提高信息素养和审美能力。

具体目标如下:1.知识目标:了解图的基本概念、类型和作用;掌握图的建立与输出的基本方法和技术。

2.技能目标:能够运用图的形式表达和传递信息;熟练使用相关软件和工具进行图的建立与输出。

3.情感态度价值观目标:培养学生对图的兴趣和好奇心,提高审美能力;培养学生合作、创新的精神,使其在图的建立与输出过程中能够主动探究、解决问题。

二、教学内容本课程的教学内容主要包括图的基本概念、类型和作用,图的建立与输出的基本方法和技术。

具体安排如下:1.图的基本概念:介绍图的定义、特点和功能,使学生了解图在信息传递中的重要性。

2.图的类型:介绍常见的图的类型,如柱状图、折线图、饼图等,使学生熟悉不同类型的图及其应用场景。

3.图的建立与输出:讲解图的建立与输出的基本方法和技术,包括手绘图和计算机辅助绘图,使学生掌握图的制作技巧。

4.实践操作:安排一定的实践操作时间,让学生动手实践,熟练掌握相关软件和工具的使用。

三、教学方法为了实现本课程的教学目标,我们将采用以下教学方法:1.讲授法:通过讲解图的基本概念、类型和作用,使学生了解图的重要性和应用场景。

2.案例分析法:通过分析典型案例,使学生掌握图的建立与输出的方法和技巧。

3.实验法:安排实践操作环节,让学生动手实践,提高其实际操作能力。

4.讨论法:学生进行小组讨论,培养其合作精神和创新意识。

四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择合适的教材,为学生提供系统的学习资料。

2.参考书:提供相关参考书目,拓展学生的知识视野。

3.多媒体资料:制作课件、演示文稿等多媒体资料,提高课堂教学效果。

4.实验设备:准备计算机、绘图板等实验设备,为学生提供实践操作的机会。

五、教学评估本课程的教学评估将采用多种方式,以全面、客观、公正地评价学生的学习成果。

设计报告 题目13 图的建立及输出.doc

设计报告 题目13 图的建立及输出.doc

《数据结构》课程设计报告学生姓名:学号:0000000000000000000000000000000000000000 学院:班级:题目: 题目13 图的建立及输出指导教师:哈哈哈职称:讲师哈哈哈实验师哈哈哈讲师2012年12月28日目录目录 (I)一、选题背景 (1)1.1解决问题及技术要求 (1)1.2指导思想 (1)二、算法设计 (2)2.1算法及模块说明 (2)2.2主函数流程图 (3)三、程序及功能说明 (4)3.1 图的存储结构及队列存储结构...... (4)3.2 图的生成子程序...... .. (4)3.3 赋权无向图求最小生成树的算法...... .. (5)3.4 以下为遍历图 (6)3.5 有向赋权图的最短路径算法 (9)四、结果分析 (12)4.1截图及结果分析...... (12)五、总结 (19)六、课程设计心得体会 (20)参考文献 (22)源程序 (23)一、选题背景1.1 解决问题及技术要求我们的课题为图的建立及输出,图在很多领域中有着广泛的作用,其中我们的课题便是所有应用的基础,建立图和输出图的邻接矩阵虽然简单但是却是解决问题的源头,而且为了丰富我们的课程设计,我们又添加了,有向赋权图的最短路径的求法,无向赋权图最小生成树的求法,还有图的深度遍历和广度遍历的算法。

1.2指导思想图是一种非线性结构,它比树型结构复杂。

在图中,数据元素之间的多对多的关系,因此用于表示数据元素之间存在的复杂关系,我们称这种关系为2网状结构关系。

实际上,前面讨论的线性表和树都可以看成是简单的图。

图的应用十分广泛,在通信工程、社会科学、管理科学和计算机科学等领域中的很多问题否可以用图表示。

二、算法设计2.1 算法及模块说明1.模块说明:本算法的模块大致分为4个模块,其中有赋权有向图,赋权无向图,无向图以及有向图。

在每一个模块中我们都给该模块输出邻接矩阵,并且在赋权有向图中我们设计了求某个顶点到某个顶点的最短路径,在赋权无向图中设计了最小生成树的算法,在无向图中设计了广度和深度搜索算法。

(完整版)数据结构教案

(完整版)数据结构教案

(完整版)数据结构教案1. 引言本教案旨在介绍数据结构的基本概念和常用算法,并提供相应的教学资源和活动设计,以帮助学生掌握数据结构的核心知识和能力。

2. 教学目标- 了解数据结构的概念和作用;- 能够使用常见的数据结构(如链表、栈、队列、树、图等)进行问题建模和解决;- 掌握基本的数据结构算法(如排序、查找、遍历等);- 培养学生的编程能力和解决实际问题的能力。

3. 教学内容3.1 数据结构基础- 数据结构的定义和分类;- 数组和链表的比较与应用;- 栈和队列的概念及应用;- 树的基本概念和遍历方法;- 图的基本概念和遍历方法。

3.2 数据结构算法- 排序算法:插入排序、选择排序、冒泡排序、快速排序、归并排序;- 查找算法:顺序查找、二分查找;- 图的最短路径算法:Dijkstra算法、Floyd算法。

4. 教学方法- 讲授理论知识:通过讲解、示意图和实例等形式,向学生介绍数据结构的基本概念和算法;- 编程实践:让学生通过编写程序来实现常见的数据结构和算法,并解决相关问题;- 组织小组讨论和实践活动:让学生合作完成数据结构相关的实际案例分析和解决方案设计。

5. 教学评估为了评价学生的研究效果和能力,我们将采用以下评估方式:- 课堂作业:包括理论题和编程题,用于检查学生对数据结构的理解和应用能力;- 项目实践:学生需要独立或小组完成一个数据结构相关的实际项目,并进行展示和报告;- 期末考试:综合测试学生对数据结构知识的掌握情况。

6. 教学资源为了辅助教学和学生的研究,我们准备了以下教学资源:- 教材:精选的数据结构教材,供学生进行参考和深入研究;- 幻灯片:用于课堂讲解和学生研究的幻灯片,清晰呈现数据结构的概念和算法;- 编程实践指导:提供编程实践的指导和示例代码,帮助学生快速上手;- 练题和答案:提供大量的练题和详细答案,供学生巩固理论知识和算法思维。

7. 教学活动设计为了培养学生的研究兴趣和主动性,我们将设计以下教学活动:- 小组讨论:学生分组进行数据结构相关的主题讨论,分享思路和解决方案;- 编程比赛:组织学生参加数据结构编程比赛,以提高他们的编程能力和算法思维;- 实例分析:选取经典的数据结构实例,引导学生进行分析和实现,加深对数据结构的理解;- 视频讲解:录制有关数据结构的视频讲解,在线平台上供学生随时观看和研究。

图的建立及输出

图的建立及输出

《数据结构》课程设计说明书图的建立及输出系、部:学生姓名:指导教师:职称专业:信息与计算科学班级:0903班完成时间:2010·12·14摘要本设计主要是结合C语言和数据结构的知识对图进行建立和输出的操作,输入图相关信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

关键词课程设计;数据结构;图;无向图;存储结构;邻接矩阵目录1 设计内容及要求 (1)1.1 设计内容 (1)1.2 设计要求 (1)2 设计思想 (2)2.1 概要设计 (2)2.2 详细设计 (2)3 程序源代码 (4)4 调试分析 (6)5 课设总结 (8)参考文献 (9)1 设计内容和要求1.1设计内容图的建立及输出:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

1.2 设计要求1)源程序要有适当的注释,使程序容易阅读。

2)在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;2 设计思想2.1 概要设计2.1.1 图存储结构的建立本课题采用邻接矩阵的存储结构,即用两个数组分别存储元素(顶点)的信息和数据元素之间的关系(边或弧)的信息。

以二维数组表示有n个顶点的图时,需存放n个顶点信息和n*n个弧信息的存储量。

本次课程设计的是无向图(即无权值的图,由于对其认识不深,在此设图的权值为1)、无向网的邻接矩阵存储结构,所以在主函数中先申请图的内存空间。

在定义图的类型后即可输入图的相关信息,包括图的顶点数、边数、顶点信息以及边顶点信息和权值,并对邻接矩阵初始化。

2.1.2 图的邻接矩阵的输出本设计中,图的邻接矩阵的信息在void CreatMGraph(MGraph *G)中生成后,再在main()函数中以for()以数组的形式输出。

2.2 详细设计2.2.1 主程序中需要的全程量#define MAX 999 //定义无穷#define MaxVertexNum 100 // 定义最大顶点数2.2.2 定义图的类型typedef struct{char vexs[MaxVertexNum]; //顶点表int edges[MaxVertexNum][MaxVertexNum]; //邻接矩阵,可看作边表int n,e; //图中的顶点数n和边数e}MGraph; //用邻接矩阵表示的图的类型2.2.3 建立图的邻接矩阵建立函数,实现图的相关信息的输入,包括图的顶点数、边数、顶点信息、边的顶点信息和边的权值。

图的建立及输出(图的遍历)

图的建立及输出(图的遍历)

数据结构课程设计题目图的建立及输出学生姓名学号院系专业指导教师二O一O年12 月16 日目录一、设计题目 (2)二、运行环境(软、硬件环境) (2)三、算法设计的思想 (2)3.1邻接矩阵表示法 (2)3.2图的遍历 (4)3.3邻接矩阵的输出 (5)四、算法的流程图 (6)五、算法设计分析 (7)5.1无向网邻接矩阵的建立算法 (7)5.2无向图邻接矩阵的建立算法 (7)5.3图的深度优先遍历 (7)5.4图的广度优先遍历 (8)六、源代码 (8)七、运行结果分析 (14)八、收获及体会 (15)一、设计题目:图的建立及输出*问题描述:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

二、运行环境(软、硬件环境)*软件环境:Windows7、 Windows Vista、 Windows Xp等*硬件环境:处理器:Pentium4以上内存容量: 256M以上硬盘容量:40GB 以上三、算法设计的思想1、邻接矩阵表示法:设G=(V,E)是一个图,其中V={V1,V2,V3…,Vn}。

G的邻接矩阵是一个他有下述性质的n阶方阵:1,若(Vi,Vj)∈E 或<Vi,Vj>∈E;A[i,j]={0,反之图5-2中有向图G1和无向图G2的邻接矩阵分别为M1和M2:M1=┌0 1 0 1 ┐│ 1 0 1 0 ││ 1 0 0 1 │└0 0 0 0 ┘M2=┌0 1 1 1 ┐│ 1 0 1 0 ││ 1 1 0 1 │└ 1 0 1 0 ┘注意无向图的邻接是一个对称矩阵,例如M2。

用邻接矩阵表示法来表示一个具有n个顶点的图时,除了用邻接矩阵中的n*n个元素存储顶点间相邻关系外,往往还需要另设一个向量存储n个顶点的信息。

因此其类型定义如下:VertexType vertex[MAX_VERTEX_NUM]; // 顶点向量AdjMatrix arcs; // 邻接矩阵int vexnum, arcnum; // 图的当前顶点数和弧(边)数GraphKind kind; // 图的种类标志若图中每个顶点只含一个编号i(1≤i≤vnum),则只需一个二维数组表示图的邻接矩阵。

《数据结构》课程设计报告

《数据结构》课程设计报告

《数据结构》课程设计报告《数据结构》课程设计报告如下:一、课程设计分析在学习了数据结构课本理论知识后,为了检验自己所学知识的牢固性巩固大家的理论知识,调动大家的编程兴趣;同时为大家提供一个实践自己,检验自己的平台,以增加大家对将来工作的适应能力;也为了锻炼大家的动手实践能力,遂在学期末进行了本次课程设计。

“数据结构”在计算机科学中是一门综合性的专业基础课。

“数据结构”的研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有着密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。

在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。

因此,可以认为“数据结构”是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。

在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。

我们本着自己的兴趣及挑战自己的态度,也为检验我们理论知识的熟练度,锻炼我们动手实践能力,我们选择了小型图书管理系统的编写。

因为我们生活在大学,图书馆是我们学习的天堂,借书和还书又是必不可少的,一个好的图书管理系统对于我们学生和管理人员都会为大家提供很多便利。

本着挑战和创新的思想,我们进行了此次课程设计程序编写及报告撰写。

二、课程设计基本理论运用所学的数据结构相关内容,设计一个小型图书馆管理系统,我们将运用到的原理有:链表的操作,包括插入,删除等;还有数据的排序;文件的操作等;遍历查找,插入排序等原理。

也运用了c语言的基本图形界面,使用户使用界面更加人性化,更加美观。

数据结构的创建是本课程设计的一个重要内容,我们这里使用的是单链表的数据结构,结合c语言语言特点、实际的图书馆管理系统的基本操作实现了一个简单的图书管理系统的正常运行,实现一些简单的功能。

三、课程算法设计通过对图书管理系统内的图书进行添加和删除操作,实现同学借书和还书的记录工作,通过对图书的查找和按指定方式排序,更有利于同学们挑选自己所需要的图书,借阅借书所需时间。

数据结构课程设计完整版

数据结构课程设计完整版

西安郵電學院数据结构课程设计报告题目:魔王语言翻译/多项式相乘系部名称:专业名称:班级:学号:学生姓名:指导教师:时间:一、课程设计目的通过本次课程设计,强化上机动手能力,使我们在理论和实践的基础上进一步巩固《C语言程序设计》、《数据结构——使用C语言》课程学习的内容,初步掌握工程软件设计的基本方法,熟知链表,栈,队以及文件的使用方法,学会将知识应用于实际,提高分析和解决问题的能力,为毕业设计和以后工作打下基础。

二、课程设计内容【1】、魔王语言问题描述有一个魔王总是使用自己的一种非常精炼的而抽象的语言讲话,没有人能听懂。

但他的语言是能够逐步解释成人能听懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(1)α→β1β2 ……βm(2)(θδ1δ2 ……δn)→θδnθδn-1 …… θδ1 θ在这两种形式中,从左到右均表示解释;从右到左均表示抽象。

试写一个魔王语言的解释系统,把他的话解释成人能听懂的话。

基本规则现在有以下三种规则,设大写字母表示魔王语言解释的词汇,小写字母表示人的语言的词汇;希腊字母表示可以用大写或小写替换的变量。

魔王语言可含人的词汇。

(1)B->tAdA(2)A->sae(3)示例:魔王说:B(ehnxgz)B解释成人的语言:tsaedsaeezegexenehetsaedsae若每个小写字母含义如下表示:t d s a e z g x n h天地上一只鹅追赶下蛋恨则魔王说的话是:天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅【2】、多项式相乘问题描述用带头结点的动态单链表来表示多项式,在此基础上完成多项式的乘法运算。

三、需求分析对所开发系统功能、性能的描述,想要实现的目标。

【1】魔王语言有一个魔王总是使用自己的一种非常精炼的而抽象的语言讲话,没有人能听懂。

但他的语言是能够逐步解释成人能听懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机工程学院数据结构课程设计报告题目:图的建立与输出姓名:学号:专业班级:指导教师:设计时间:目录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的多重链表。

但是,由于图中各个结点的度数不同,最大度数和最小度数可能相差很多,因此,若按度数最大的顶点设计结点结构,则会浪费很多存储单元;反之,若按每个顶点自己的度数设计不同的结点结构,又会给操作带来不便。

因此,和树类似,在实现应用中不宜采用这种结构,而应该根据具体的图的需要进行的操作,设计恰当的结点结构和表结构。

常用的就有我们熟悉的邻接表、邻接多重表和十字链表。

所以,我们打算采用邻接表的方法设计图的存储结构,包括图的建立与存储。

二设计方案及工作原理1.图有两种主要的存储结构,它们是邻接矩阵表示法和邻接表表示法。

设图A= (V, E)是一个有n 个顶点的图, 图的邻接矩阵是一个二维数组A.edge[n][n],用来存放顶点的信息和边或弧的信息。

(1)无向图的邻接矩阵是对称的;有向图的邻接矩阵可能是不对称的。

(2)在有向图中, 统计第i 行1 的个数可得顶点i 的出度,统计第j 行 1 的个数可得顶点j 的入度。

在无向图中, 统计第i 行(列) 1 的个数可得顶点i的度。

图的邻接表(Adjacency List)存储表示法邻接表是图的一种链式存储结构,它对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对有向图是以顶点vi为尾的弧),每个结点由三个域组成:邻接点域(adjvex)指示与顶点vi邻接的点在图中的位置,链域(nextarc)指示下一条边或弧的结点,数据域(info)存储和边或弧相关的信息(如权值)。

每个链表上附设一个表头结点,包含数据域(data)和链域(firstarc)指向链表中的第一个结点,这些表头结点通常以顺序结构的形式存储,以便随机访问任一顶点的链表。

在无向图的邻接表中,顶点vi的度等于第i个链表中的结点数;在有向图的邻接表中,顶点vi的出度等于第i个链表中的结点数,求入度必须遍历整个邻接表,为便于求vi的入度需建立有向图的逆邻接表(是以顶点vi为头的弧所建立的邻接表)。

2.图的邻接表存储表示:#define MAX_VERTEX_NUM 20typedef struct ArcNode {int adjvex; // 该弧所指向的顶点的位置struct ArcNode *nextarc; // 指向下一条弧的指针InfoType *info; // 该弧相关信息的指针} ArcNode;typedef struct VNode {VertexType data; // 顶点信息ArcNode *firstarc; // 指向第一条依附该顶点的弧} VNode, AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices;int vexnum, arcnum; // 图的当前顶点数和弧数int kind; // 图的种类标志} ALGraph;3.有向图的十字链表存储表示法十字链表(Orthogonal List)是有向图的另一种链式存储结构,可以看成是将有向图的邻接表和逆邻接表结合起来得到的一种链表。

#define MAX_VERTEX_NUM 20typedef struct ArcBox {int tailvex, headvex; // 该弧的尾和头顶点的位置struct ArcBox *hlink, *tlink; // 分别指向下一个弧头相同和弧尾相同的弧的指针域InfoType *info; // 该弧相关信息的指针} ArcBox;typedef struct VexNode {VertexType data;ArcBox *firstin, *firstout; // 分别指向该顶点第一条入弧和出弧} VexNode;typedef struct {VexNode xlist[MAX_VERTEX_NUM]; // 表头向量int vexnum, arcnum; // 有向图的当前顶点数和弧数} OLGraph;4.无向图的邻接多重表存储表示#define MAX_VERTEX_NUM 20typedef emnu {unvisited, visited} VisitIf;typedef struct Ebox {VisitIf mark; // 访问标记int ivex, jvex; // 该边依附的两个顶点的位置struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条边InfoType *info; // 该边信息指针} EBox;typedef struct VexBox {VertexType data;EBox *firstedge; // 指向第一条依附该顶点的边} VexBox;typedef struct {VexBox adjmulist[MAX_VERTEX_NUM];int vexnum, edgenum; // 无向图的当前顶点数和边数} AMLGraph;5.邻接矩阵表示法设G=(V,E)是一个图,其中V={V1,V2,V3…,Vn}。

G的邻接矩阵是一个他有下述性质的n阶方阵:1,若(Vi,Vj)∈E 或<Vi,Vj>∈E;A[i,j]={0,反之图5-2中有向图G1和无向图G2的邻接矩阵分别为M1和M2:M1=┌0 1 0 1 ┐│ 1 0 1 0 ││ 1 0 0 1 │└0 0 0 0 ┘M2=┌0 1 1 1 ┐│ 1 0 1 0 ││ 1 1 0 1 │└ 1 0 1 0 ┘注意无向图的邻接是一个对称矩阵,例如M2。

用邻接矩阵表示法来表示一个具有n个顶点的图时,除了用邻接矩阵中的n*n个元素存储顶点间相邻关系外,往往还需要另设一个向量存储n个顶点的信息。

因此其类型定义如下:const vnum=…;{图的顶点数}type adj=0..1;adjmatrix=arry[1..vnum,1..vnum]of adj;{邻接矩阵}graph=recordvexs:array[1..vnum]of vextype;{顶点向量}arcs:adjmatrix;{邻接矩阵}end;若图中每个顶点只含一个编号i(1≤i≤vnum),则只需一个二维数组表示图的邻接矩阵。

此时存储结构可简单说明如下:type adjmatrix=array[1..vnum,1..vnum]of adj;利用邻接矩阵很容易判定任意两个顶点之间是否有边(或弧)相联,并容易求得各个顶点的度。

对于无向图,顶点Vi的度是邻接矩阵中第i行元素之和,即n nD(Vi)=∑A[i,j](或∑A[i,j])j=1 i=1对于有向图,顶点Vi的出度OD(Vi)为邻接矩阵第i行元素之和,顶点Vi 的入度ID(Vi)为第i列元素之和。

即n nOD(Vi)=∑A[i,j],OD(Vi)=∑A[j,i])j=1j=1用邻接矩阵也可以表示带权图,只要令Wij, 若<Vi,Vj>或(Vi,Vj)A[i,j]={∞, 否则。

其中Wij为<Vi,Vj>或(Vi,Vj)上的权值。

相应地,网的邻接矩阵表示的类型定义应作如下的修改:adj:weightype ; {weightype为权类型} 图5-6列出一个网和它的邻接矩阵。

┌∞31∞∞┐│∞∞51∞││∞∞∞∞∞││∞∞6∞∞│└∞322∞┘(a)网(b)邻接矩阵图5-6 网及其邻接矩阵对无向图或无向网络,由于其邻接矩阵是对称的,故可采用压缩存贮的方法,仅存贮下三角或上三角中的元素(但不含对角线上的元素)即可。

显然,邻接矩阵表示法的空间复杂度O(n2)。

无向网邻接矩阵的建立方法是:首先将矩阵A的每个元素都初始化成∞。

然后,读入边及权值(i,j,wij),将A的相应元素置成Wij。

无向网邻接矩阵的建立算法如下:procedure build-graph(var ga:graph); {建立无向网的邻接矩阵}beginfor i:=1 to n do read(ga.vexs[i]);{读入n个顶点的信息}for i:=1 to n dofor j:=1 to e doga.arcs[i,j]:=maxint;{将邻接矩阵的每个元素初始化成maxint,计算机内∞用最大事数maxint表示} for k:=1 to e do {e为边的数目}[ read(i,j,w) {读入边<i,j>和权}ga.arcs[i,j]:=w; ga.arcs[j,i]:=w] end;该算法的执行时间是O(n+n2+e),其中消耗在邻接矩阵初始化操作上的时间是O(n2),而e<n2,所以上述算法的时间复杂度是O(n2)。

图的邻接矩阵存储表示:#define INFINITY INT_MAX // 最大值∞#define MAX_VERTEX_NUM 20 // 最大顶点个数typedef enum {DG, DN, AG, AN} GraphKind; //{有向图,有向网,无向图,无向网} typedef struct ArcCell {VRType adj; // VRType是顶点关系类型。

相关文档
最新文档