拓扑排序课程设计报告 (2)
拓扑排序实验报告

数学与计算机学院数据结构实验报告年级09数计学号2009432125 姓名刘宝成绩专业数电实验地点主楼401 指导教师苗秀芬实验项目拓扑排序实验日期10年12月24日一、实验目的1掌握图的存储结构及其基本操作,学会定义图的邻接表存储结构,并能在实际问题中灵活运用。
2掌握拓扑排序算法。
3、通过本实验的具体应用实例,灵活运用拓扑排序并进一步巩固队列/栈的运用。
二、实验问题描述1简介:用邻接表形式存储实验中的有向无环图,此有向无环图称为:AOV网,若网中每一个顶点都在他的拓扑排序中,则说明不存在环。
2步骤:①从AOV网中选出一个没有前驱的结点,并输出他;②从网中删除此结点,并且删除从该顶点发出的所有有向边(邻接点的入度-1)③重复以上两步,直到途中不存在入度为0的顶点为止三、实验步骤1、实验问题分析(1)顶点表typedef struct//顶点表结点{int in;//入度int vertex;//顶点域edgenode * firstedge;//边表头指针}vertexnode;(2)边表typedef struct node //边表结点{int adjvex;//邻接点域struct node * next;//指向下一个邻接点的指针域}edgenode;(3)以邻接表类型存储的图类型typedef struct{Adjlist adjlist; //邻接表int vnum,Enum; //顶点数和边数}Algraph;2、功能(函数)设计(1)建立一个以邻接表存储的有向图函数原型:void creatalgraph(Algraph *G)(2)拓扑排序函数原型:void TopoSort(Algraph *G)四、实验结果(程序)及分析1、实验主要模块代码(带注释!)或模块的流程图(1)建立一个以邻接表存储的有向图void creatalgraph(Algraph *G)//创建邻接链表{int i,k,j;edgenode *s;cout<<"该AOV网的顶点数和边数:"<<endl;cin>>G->vnum>>G->Enum; //读入顶点数和边数cout<<"请输入顶点信息:"<<endl;for(i=0;i<G->vnum;i++) //建立有vnum个顶点的顶点表{cin>>G->adjlist[i].vertex; //读入顶点信息G->adjlist[i].in=0;G->adjlist[i].firstedge=NULL; //顶点的边表头指针设为空}cout<<"请输入边的信息:"<<endl; //for(k=0;k<G->Enum;k++) //建立边表{cout<<"依次输入每一条边:"<<endl;cout<<"从";cin>>i;cout<<"邻接到";cin>>j;cout<<endl;//读入边<vi,vj>的顶点对应的序号s=new edgenode; //生成新的边表结点s->adjvex=j; //邻接点的序号为js->next=G->adjlist[i].firstedge; //将新边表结点s插入到顶点vi的边表头部G->adjlist[i].firstedge=s;}}(2)拓扑排序int toposort(Algraph *G){int i,j,k;int m=0,top;edgenode *ptr;top=-1;for(i=0;i<G->vnum;i++)if(G->adjlist[i].in==0){ G->adjlist[i].in=top;top=i;}while(top!=-1){j=top;top=G->adjlist[top].in;cout<<G->adjlist[j].vertex<<endl;m++;ptr=G->adjlist[j].firstedge;while(ptr!=NULL){k=ptr->adjvex;G->adjlist[k].in--;if(G->adjlist[k].in==0){G->adjlist[k].in=top;top=k;}ptr=ptr->next;//头插入}}if(m<G->vnum){cout<<"此图中存在环!无法进行拓扑排序"<<endl;return 0;//返回错误代码0}elsereturn 1;//成功返回1}2、测试数据3、调试过程中出现的问题以及解决策略。
拓扑排序实验报告

实验题目:图的应用实验目的:(1)熟练掌握图的基本存储方法;(2)熟练掌握图的深度优先和广度优先搜索方法;(3)掌握AOV网和拓扑排序算法;(4)掌握AOE网和关键路径。
实验内容:拓扑排序。
任意给定一个有向图,设计一个算法,对它进行拓扑排序。
拓扑排序算法思想:a.在有向图中任选一个没有前趋的顶点输出;b.从图中删除该顶点和所有以它为尾的弧;c.重复上述a、b,直到全部顶点都已输出,此时,顶点输出序列即为一个拓朴有序序列;或者直到图中没有无前趋的顶点为止,此情形表明有向图中存在环。
设计分析:为实现对无权值有向图进行拓扑排序,输出拓扑序列,先考虑如何存储这个有向图。
拓扑排序的过程中要求找到入度为0的顶点,所以要采用邻接表来存储有向图,而要得到邻接表,则先要定义有向图的邻接矩阵结构,再把邻接矩阵转化成邻接表。
在具体实现拓扑排序的函数中,根据规则,当某个顶点的入度为0(没有前驱顶点)时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1,为了避免重复检测入度为0的顶点,设立一个栈St,以存放入度为0的顶点。
源程序代码:#include<stdio.h>#include<stdlib.h>#define MAXV 10 // 最大顶点个数typedef struct{int edges[MAXV][MAXV]; // 邻接矩阵的边数组int n; // 顶点数}MGraph;typedef struct ANode{int adjvex; // 该弧的终点位置struct ANode * nextarc; // 指向下一条弧的指针}ArcNode;typedef struct{int no; // 顶点信息int count; // 顶点入度ArcNode * firstarc; // 指向第一条弧}VNode, AdjList[MAXV];typedef struct{AdjList adjlist; // 邻接表int n; // 图的顶点数}ALGraph;void MatTolist(MGraph g, ALGraph * &G){int i, j, n=g.n;ArcNode * p;G = (ALGraph *)malloc(sizeof(ALGraph));for (i=0; i<n; i++)G->adjlist[i].firstarc = NULL;for (i=0; i<n; i++)for (j=n-1; j>=0; j--)if (g.edges[i][j]!=0){p=(ArcNode *)malloc(sizeof(ArcNode));p->adjvex = j;p->nextarc = G->adjlist[i].firstarc;G->adjlist[i].firstarc = p;}G->n=n;}void TopSort(ALGraph * G){int i,j,flag=0,a[MAXV];int St[MAXV], top = -1; // 栈St的指针为topArcNode * p;for (i=0; i<G->n; i++) // 入度置初值为0 G->adjlist[i].count = 0;for (i=0; i<G->n; i++) // 求所有顶点的入度{p=G->adjlist[i].firstarc;while (p!=NULL){G->adjlist[p->adjvex].count++;p=p->nextarc;}}for (i=0; i<G->n; i++)if (G->adjlist[i].count==0) // 入度为0的顶点进栈{top++; St[top] = i;}while (top>-1) // 栈不为空时循环{i = St[top]; top--; // 出栈a[flag++]=i; // 输出顶点p=G->adjlist[i].firstarc; // 找第一个相邻顶点while (p!=NULL){j = p->adjvex;G->adjlist[j].count--;if (G->adjlist[j].count==0){top++; St[top] = j; // 入度为0的相邻顶点进栈}p = p->nextarc; // 找下一个相邻顶点}}if (flag<G->n)printf("该图存在回路,不存在拓扑序列!\n");else{printf("该图的一个拓扑序列为:");for(i=0; i<flag; i++)printf("%d", a[i]);printf("\n");}}void main(){int i, j;MGraph g;ALGraph * G;G=(ALGraph *)malloc(sizeof(ALGraph));printf("请输入图的顶点数:");scanf("%d", &g.n);printf("请输入图的邻接矩阵:\n");for(i=0; i<g.n; i++)for(j=0; j<g.n; j++)scanf("%d", &g.edges[i][j]);MatTolist(g, G);TopSort(G);} 测试用例:对图7-1所示的有向图进行拓扑排序的测试结果如下:图7-1图7-2程序执行界面,提示输入图的顶点数,输入之后又提示输入其邻接矩阵,对图7-1所示的有向图的邻接矩阵输入如图7-2所示。
求拓扑序列排序课程设计

求拓扑序列排序课程设计一、教学目标本课程的教学目标是让学生掌握拓扑序列排序的基本概念、原理和应用,培养学生运用拓扑序列排序解决问题的能力。
具体包括以下三个方面的目标:1.知识目标:(1)理解拓扑序列排序的定义和性质;(2)掌握拓扑排序算法及其实现;(3)了解拓扑序列排序在实际应用中的重要性。
2.技能目标:(1)能够运用拓扑排序解决简单的问题;(2)能够运用图论知识分析和解决拓扑排序相关问题;(3)能够运用编程语言实现拓扑排序算法。
3.情感态度价值观目标:(1)培养学生对计算机科学的兴趣和热情;(2)培养学生团队合作、自主学习的能力;(3)培养学生运用所学知识解决实际问题的意识。
二、教学内容本课程的教学内容主要包括以下几个部分:1.拓扑序列排序的基本概念:图、顶点、边、度数、入度、出度等;2.拓扑排序的原理:拓扑排序的定义、拓扑排序的存在性、拓扑排序的算法;3.拓扑排序算法实现:深度优先搜索(DFS)算法、广度优先搜索(BFS)算法;4.拓扑排序的应用:任务调度、项目规划等实际问题。
三、教学方法为了达到本课程的教学目标,将采用以下几种教学方法:1.讲授法:通过讲解拓扑序列排序的基本概念、原理和应用,使学生掌握相关知识;2.讨论法:学生分组讨论拓扑排序算法实现和应用问题,培养学生的思考和表达能力;3.案例分析法:分析实际应用中的拓扑排序问题,让学生学会将理论知识应用于实际问题;4.实验法:安排拓扑排序算法的编程实验,培养学生的动手能力和实际问题解决能力。
四、教学资源为了支持本课程的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《图论与算法导论》;2.参考书:《计算机网络》、《数据结构与算法》;3.多媒体资料:PPT课件、教学视频;4.实验设备:计算机、网络设备。
通过以上教学资源的使用,丰富学生的学习体验,提高学生的学习效果。
五、教学评估本课程的教学评估将采取多元化、全过程的方式进行,以全面、客观、公正地评价学生的学习成果。
数据结构拓扑排序实验报告

数据结构拓扑排序实验报告正文:一、实验目的本实验旨在通过实现拓扑排序算法来加深对数据结构中图的相关概念的理解,掌握拓扑排序的具体步骤与实现方法。
二、实验原理拓扑排序是一种对有向无环图进行排序的算法,它可以将有向无环图的顶点按照线性的顺序排列出来,使得对于任何一个有向边(u, v),都有顶点 u 在排列中出现在顶点 v 之前。
拓扑排序常用于表示图中的依赖关系,如任务调度、编译顺序等场景。
三、实验步骤1. 构建有向图根据实际需求构建有向图,可以使用邻接表或邻接矩阵等数据结构来表示有向图。
2. 执行拓扑排序算法利用拓扑排序算法对构建的有向图进行排序,可选择使用深度优先搜索(DFS)或广度优先搜索(BFS)等算法实现。
3. 输出排序结果将排序后的顶点按照线性的顺序输出,得到拓扑排序的结果。
四、实验结果与分析1. 实验数据以图 G = (V, E) 的顶点集合 V 和边集合 E,构建了如下的有向图:V = {A, B, C, D, E, F}E = {(A, C), (B, C), (C, D), (D, E), (E, F)}2. 拓扑排序结果经过拓扑排序算法的处理,得到的拓扑排序结果如下: A, B, C, D, E, F3. 结果分析可以看出,根据有向图的依赖关系,拓扑排序算法能够将顶点按照合理的顺序进行排序。
拓扑排序的结果可以作为图中顶点的执行顺序,具有重要的应用价值。
五、实验总结通过本次实验,我们深入学习了拓扑排序算法,并成功实现了拓扑排序的过程。
拓扑排序在图论和数据结构中具有广泛的应用,对于理解和解决与图相关的问题具有重要意义。
六、附件本文档没有涉及附件内容。
七、法律名词及注释本文档没有涉及法律名词及注释。
拓扑排序课程设计报告

沈阳航空航天大学课程设计报告课程设计名称:数据结构课程设计课程设计题目:拓扑排序算法院(系):计算机学院专业:计算机科学与技术(嵌入式系统方向)班级:14010105班学号:2011040101221姓名:王芃然指导教师:丁一军目录1 课程设计介绍 (1)1.1课程设计内容 (1)1.2课程设计要求 (1)2 课程设计原理 (2)2.1课设题目粗略分析 (2)2.2原理图介绍 (2)2.2.1 功能模块图 (2)2.2.2 流程图分析 (3)3 数据结构分析 (7)3.1存储结构 (7)3.2算法描述 (7)4 调试与分析 (12)4.1调试过程 (12)4.2程序执行过程 (12)参考文献 (14)附录(关键部分程序清单) (15)1 课程设计介绍1.1 课程设计内容由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
若在图一的有向图上人为的加一个表示V2<=V3的弧(“<=”表示V2领先于V3)则图一表示的亦为全序且这个全序称为拓扑有序,而由偏序定义得到拓扑有序的操作便是拓扑排序。
在AOV网中为了更好地完成工程,必须满足活动之间先后关系,需要将各活动排一个先后次序即为拓扑排序。
编写算法建立有向无环图,主要功能如下:1.能够求解该有向无环图的拓扑排序并输出出来;2.拓扑排序应该能处理出现环的情况;3.顶点信息要有几种情况可以选择。
1.2 课程设计要求1.输出拓扑排序数据外,还要输出邻接表数据;2.参考相应的资料,独立完成课程设计任务;3.交规范课程设计报告和软件代码。
2 课程设计原理2.1 课设题目粗略分析本课设题目要求编写算法能够建立有向无环图,有向无环图,顾名思义,即一个无环的有向图,是一类较有向图更一般的特殊有向图。
其功能要求及个人在写程序时对该功能的实现作如下分析:1. 将图以合适的方式存储起来。
图有多种存储方式,其中最常用的存储方式有图的邻接矩阵和邻接表。
拓扑排序实验报告

拓扑排序实验报告一、引言拓扑排序是一种图论中重要的算法,用于对有向无环图(DAG)中的顶点进行排序。
在该实验中,我们将对拓扑排序的算法进行实现,并对其进行性能分析和评估。
二、实验目的1. 了解拓扑排序的基本概念和算法;2. 实现拓扑排序的算法;3. 进行性能分析和评估,探究其时间复杂度。
三、实验方法1. 根据给定的有向无环图构建邻接表;2. 使用深度优先搜索(DFS)算法实现拓扑排序;3. 对不同规模的图进行拓扑排序,并记录所用时间;4. 分析并评估算法的性能。
四、实验过程1. 构建邻接表:根据给定的有向无环图,我们首先构建它的邻接表表示。
邻接表中的每个节点表示一个顶点,其指针指向该顶点的所有后继节点。
2. 深度优先搜索拓扑排序:从图中选择一个未被访问过的顶点作为起始点,递归地遍历其所有后继节点,直到所有的顶点都被访问过。
通过递归的方式,可以得到一个拓扑排序的结果。
3. 性能分析和评估:我们使用不同规模的图进行拓扑排序,并记录所用的时间。
根据实验数据,分析算法的时间复杂度,并评估其性能。
五、实验结果我们使用了10个不同规模的有向无环图进行了拓扑排序,并记录了所用的时间。
实验结果表明,随着图规模的增加,算法的时间复杂度也随之增加。
具体结果如下:图规模时间(ms)5 0.00110 0.00350 0.012100 0.025250 0.067500 0.135750 0.2561000 0.3872000 0.8055000 2.016通过以上实验结果,我们可以看出,拓扑排序算法的时间复杂度约为O(n + m),其中n为图中的顶点数,m为图中的边数。
实验结果与理论分析相符。
六、实验总结在本次实验中,我们实现了拓扑排序的算法,并进行了性能分析和评估。
通过实验结果可以看出,随着图规模的增加,算法的时间复杂度也随之增加。
拓扑排序算法是一种非常有用的算法,广泛应用于各个领域,例如编译器的依赖关系分析和任务调度等。
拓扑排序实验报告(两篇)

引言概述:在计算机科学领域,拓扑排序是一个经典的算法问题,用于解决有向无环图中节点的依赖关系排序问题。
通过拓扑排序,可以确定节点之间的先后顺序,从而确保在执行某些操作时不会出现冲突。
本实验报告旨在探讨和分析拓扑排序算法的实现过程和应用场景,以及拓扑排序在解决任务调度、编译器优化等问题中的作用。
正文内容:1. 算法原理1.1 定义拓扑排序是指对于一个有向无环图(DAG)中的节点,按照它们之间的依赖关系进行排序的过程。
在拓扑排序中,如果存在一条从节点 A 到节点 B 的有向边,那么在排序结果中,节点 A 必须在节点 B 之前。
1.2 算法过程拓扑排序算法的基本思想是不断地选择没有前驱节点的节点,并将其添加到排序结果中。
具体实现过程可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法。
1.3 算法示例假设有一个任务调度图,其中每个节点表示一个任务,节点之间的有向边表示任务之间的依赖关系。
拓扑排序算法可以按照任务之间的依赖顺序将任务排序,以确定它们的执行顺序。
2. 拓扑排序的应用场景2.1 任务调度拓扑排序可以用于解决任务调度问题。
在一个任务调度系统中,每个任务可能有多个前置任务,拓扑排序可以帮助确定任务的执行顺序,确保没有任务在其前置任务完成之前执行。
2.2 编译器优化在编译器优化过程中,拓扑排序可应用于解决指令调度问题。
指令调度是指在一个指令流中对指令进行重新排序,以提高执行效率。
通过拓扑排序,可以确定指令之间的依赖关系,避免出现冲突,从而优化编译器生成的指令流。
2.3 依赖关系管理在软件开发中,模块之间可能存在依赖关系。
拓扑排序可以帮助开发人员管理这些依赖关系,确保模块的顺序正确,减少错误和冲突的发生。
2.4 数据流分析拓扑排序还可以应用于数据流分析的算法中。
数据流分析是指对程序中变量的使用和定义关系进行分析,以便进行性能优化或错误检测。
拓扑排序可以帮助确定变量之间的依赖关系,从而更准确地进行数据流分析。
拓扑排序实习报告

}
void BianLi(ALGraph g,int n) //通过已建立的邻接表来遍历图
{
int i;
Vertex *p;
printf("遍历图的结果如下:\n");
for(i=1;i<=n;i++)
{
printf("%d=>",i);//邻接表中的一个结点
p=g.vertices[i].link;//邻接表中一个结点的第一个邻接点
while(p!=NULL)//一个顶点的全部邻接点
{
if(p->next!=NULL)
printf("%d-->",p->adjvex);
else
printf("%d",p->adjvex);
p=p->next;//下一个邻接点
}
printf("^\n");//结束符号
}
}
void TuoPuPaiXu(ALGraph g,int n) //输出拓扑排序的结果
利用DFS求拓扑序列的抽象算法可描述为:
void DFSTopSort(G,i,T){
//在DisTraverse中调用此算法,i是搜索的出发点,T是栈
int j;
visited[i]=TRUE;//访问i
for(所有i的邻接点j)//即<i,j>∈E(G)
if(!visited[j])
DFSTopSort(G,j,T);
④一个DAG可能有多个拓扑序列。
【例】对图G9进行拓扑排序,至少可得到如下的两个(实际远不止两个)拓扑序列:C0,C1,C2,C4,C3,C5,C7,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《软件技术》课程设计
#define M 20 #define ERROR 0 #define NUM 15 typedef int Elem_T; char number1[NUM]; char number2[NUM]; typedef struct A_Node //定义表结点结构 { int adjvex; //与vi相邻接的顶点编号 struct A_Node *nextarc; //指向下一条弧(边)的指针 } A_Node; typedef struct V_Node //定义表头结点结构 { int data; A_Node *firstarc; //指向第一条弧(边)的指针 } V_Node, AdjList[MAX_NUM]; typedef struct //定义邻接表结构 { AdjList vertices; //表头结点数组 int vex_num, arc_num; //顶点和弧(边)的个数 } ALGraph; typedef struct //构件栈 { Elem_T *base; Elem_T *top; int stacksize; } Sq; void Init(Sq *); //函数声明 int Int(Sq *, Elem_T *); void Out(Sq *, Elem_T); int Stack(Sq *); void Creat_Graph(ALGraph *); void Find_InDegree(ALGraph, int *); void T_Sort(ALGraph); int main(void) //主函数 { char num='Y'; FILE *fp; fp=fopen("num1.txt","r");//打开num1文件 if(fp!=NULL) { for(int i=1;i<=NUM;i++) { fscanf(fp,"%d",&number1[i]);//将文件的内容读入number1数组中 } fclose(fp);//关闭文件 } fp=fopen("num2.txt","r");//打开文件num2 if(fp!=NULL) { for(int i=1;i<=NUM;i++) { fscanf(fp,"%d",&number2[i]);//读取文件的内容到number2中
中南民族大学计算机科学学院 专业 :自动化 学号:10064126 姓名 :杨玉斌 4
《软件技术》课程设计
{ int m, n, i,j; A_Node *p; printf("\n***************************************************\n"); printf("********* 欢迎使用拓扑排序 ***********\n"); printf("********* 制作者:杨玉斌 ***********\n"); printf("********* 学号:10064126 ***********\n"); printf("********* 退出:(Y) ***********\n"); printf("***************************************************\n"); printf("请输入顶点数和边数:10 15"); G->vex_num=10 ;//要构建的顶点个数 G->arc_num=15;//要构建的边数 for (i = 1; i <= G->vex_num; i++) { G->vertices[i].data = i;//构建顶点 G->vertices[i].firstarc = NULL; } j=1; for (i = 1; i <= G->arc_num; i++) //输入存在边的点集合 { if(j>15) { j=1;} n=number1[j];//起点数组 m=number2[j];//终点数组 printf("\n输入存在边的两个顶点的序号:"); printf("%d ",n);//打印构建的边 printf("%d",m); j++; //scanf("%d%d", &n, &m); while (n < 0 || n > G->vex_num || m < 0 || m > G->vex_num) { printf("输入的顶点序号不正确 请重新输入:"); scanf("%d%d", &n, &m); } p = (A_Node*) malloc(sizeof (A_Node));//构建空链表 if (p == NULL) { printf("memory allocation failed,goodbey"); exit(1); } p->adjvex = m;//表头指向终点 p->nextarc = G->vertices[n].firstarc; G->vertices[n].firstarc = p; } } void Find_InDegree(ALGraph G, int indegree[])//找入度为零的节点 { int i; for (i = 1; i <= G.vex_num; i++) { indegree[i] = 0; } for (i = 1; i <= G.vex_num; i++) { while (G.vertices[i].firstarc) { indegree[G.vertices[i].firstarc->adjvex]++; G.vertices[i].firstarc = G.vertices[i].firstarc->nextarc; } } } void T_Sort(ALGraph G) //进行拓扑排序 {
已将 AOV 网存入文件中,运行时从文件读取数据;对一个 AOV 网,应判断其是否是有 向无环图,若是则输出其任意一个拓扑排序序列,不是则进行相关的说明;构造图的邻接 表;输出所有顶点的入度。
三 概要设计
1、全局变量或类型说明
typedef struct A_Node //定义表结点结构 { int adjvex; //与vi相邻接的顶点编号 struct A_Node *nextarc; //指向下一条弧(边)的指针 } A_Node; typedef struct V_Node //定义表头结点结构 { int data; A_Node *firstarc; //指向第一条弧(边)的指针 } V_Node, AdjList[MAX_NUM]; typedef struct //定义邻接表结构 {
四 详细设计
源代码如下:
#include<STDIO.H> #include<STDLIB.H> #define MAX_NUM 20 //最大顶点个数#define M 20 #define STACK_SIZE 100 #define STACK_MENT 10 #define OK 1
中南民族大学计算机科学学院 专业 :自动化 学号:10064126 姓名 :杨玉斌 2
二 需求分析
题目描述:判断一个有向图是否存在回路,并求出有向无环图的拓扑序列。
1、输入数据
在工程文件中保存输入 2 个字符串数 TXT 文件。第一个为图按次序排列的所有边的前 顶点,第二个为相对应的第二个顶点。
2、输出数据
图的定点数,边数,每个顶点的信息及入度,构造的邻接表,图的拓扑排序。
3、程序功能
《软件技术》课程设计
拓扑排序
一 目的
通过课程设计,加深对《程序设计语言》和《软件技术基础》课程所学知识的理解, 熟练掌握和巩固 C 语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指 针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程 序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法 (自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本图形结构的逻 辑结构、存储结构以及相关运算和应用。 学会编制结构清晰、风格良好、数据结构适当的 C 语言程序,从而具备利用计算机编 程分析解决综合性实际问题的初步能力。
中南民族大学计算机科学学院 专业 :自动化 学号:10064126 姓名 :jList vertices; //表头结点数组 int vex_num, arc_num; //顶点和弧(边)的个数 } ALGraph; typedef struct //构件栈 { Elem_T *base; Elem_T *top; int stacksize; } Sq;
2、模块功能
1) void Init(Sq *S); 功能:初始化栈。构造一个空栈 S 参数:*S 待初始化的栈 2) int Stack(Sq *S) 功能:判断空栈 参数:S 待判断的栈 返回值:栈为空返回 1;栈非空返回 0 3) Void Int(Sq *S, Elem_T e) 功能:元素入栈 参数:*S 待操作的栈;插入元素 e 为新的栈顶元素 4) void Out(Sq *S, Elem_T e); 功能:元素出栈 参数:*S 待操作的栈;若栈不空,则删除 S 的栈顶元素,用 e 返回其值,并返回 1;否则 返回 0 5) void Creat_Graph(ALGraph *G) 功能:建立图。函数内包含了由用户输入顶点数、弧数、顶点以及弧的操作 参数:*G 待操作的图 返回值:图建立成功返回 1;图建立失败返回 0 6) void Find_InDegree(ALGraph G, int indegree[]) 功能:求顶点的入度 参数:G 待操作的图,indegree[]储存每个顶点的入度的数组 7) void T_Sort(ALGraph G); 功能:实现拓扑排序,并在图形界面上演示排序过程 参数:G 待进行拓扑排序的图 错误判断:包含有向图是否有环的判断