拓扑排序-数据结构实验

拓扑排序-数据结构实验
拓扑排序-数据结构实验

拓扑排序

问题描述:

若用有向网表示教学计划,其中顶点表示某门课程,有向边表示课程之间的先修关系(如果A课程是B课程的先修课程,那么A到B之间有一条有向边从A指向B)。试设计一个教学计划编制程序,获取一个不冲突的线性的课程教学流程。(课程线性排列,每门课上课时其先修课程已经被安排)。

基本要求:

(1)输入参数:课程总数,每门课的课程号(固定占3位的字母数字串)和直接先修课的课程号。

(2)若根据输入条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。

需求分析:(测试数据加强版)

1、输入形式:

第一行是是个整数t,表示有t组测试数据;

每一组测试数据的第一行是一个整数n,表示结点数目

接下来的n行是n个顶点的信息

接下来的一行是一个整数m,表示有向边的数目

接下来是m行数据每一行是一条有向边的起止结点信息

2、输出形式:

如果可以实现拓扑排序,输出其得到的合法线性序列

否则,输出“Input Error!”;

3、功能描述:

帮助判断当前的课程是否可以安排得当;

如果得当,输出一个合法的修读顺序;

4、样例输入输出:

输入:

2

5

Math

English

Physics

Chinese

Music

5

Math English

Math Physics

English Chinese

Physic Chinese

Chinese Music

5

Math

English

Physics

Chinese

Music

4

Math English

Math Physics

English Chinese

Physic Chinese

输出:

Input Error!

Math English Physics Chinese Music 抽象数据结构类型描述(ADT):

采用邻接表的方式来存储数据:

抽象数据类型描述:

Typedef struct Arc * link;

struct Arc{

Int adjvex;//邻接点编号

Char info[15];//存储结点信息

Link nextarc;//指向下一个邻接点

};

Struct Vex{

Char info; //顶点信息

Int indgree;//顶点的入度

Link firstarc; //指向下一个邻接点

};

概要设计:

算法主题思想:

<1>、在有向图中选择一个没有前驱的顶点,输出之;

<2>、从有向图中删除该顶点和所有以该顶点为尾的边;

<3>、重复上述步骤,直到全部顶点都已经输出了或者图中剩下的顶点

都不满足上述的两个条件位置。后者说明有向图中存在环。

详细设计:

通过一下函数分块、分步的实现:

void creat() function:建立邻接表

int find(char *str) function:在顶点集中查找信息为str的顶点的编号,

并返回之

void update(int node) function:没输出一个顶点的时候要相应的调用该函

数更新顶点入度信息在main()函数内调用上述函数实现功能描述

C++代码详见:code 10.cpp

#include

#include

#include

using namespace std;

# define Max 1001

int n,m;

typedef struct Arc* link;

struct Arc

{

char info[15];

int adjvex;

link nextarc;

};

struct Vex

{

char info[15];

int indgree;

link firstarc;

}v[Max];

int find(char *str)

{

for(int i=1;i<=n;i++)

if(!strcmp(str,v[i].info))

return i;

}

void creat()

{

cout<<"课程总数:"<

cin>>n;

cout<<"请输入各个顶点信息(即课程的编号):"<

{

cin>>v[i].info;

v[i].indgree=0;

v[i].firstarc=NULL;

}

cout<<"请输入有向边数目:";

cin>>m;

cout<<"输入有向边(先修课程编号在前):"<

for(int i=0;i

{

char ss[15],tt[15];

cin>>ss>>tt;

int s=find(ss),t=find(tt);

v[t].indgree++;

link p=(link)malloc(sizeof(Arc));

strcpy(p->info,v[t].info);

p->adjvex=t;

p->nextarc=v[s].firstarc;

v[s].firstarc=p;

}

}

void update(int node)

{

link p=v[node].firstarc;

while(p)

{

if(v[p->adjvex].indgree>0) v[p->adjvex].indgree--; p=p->nextarc;

}

}

int main()

{

int rel[Max],len=0,t;

cout<<"请输入测试数据数目:"<

cin>>t;

while(t--)

{

creat();

for(int k=1;k<=n;k++)

for(int i=1;i<=n;i++)

if(!v[i].indgree)

{

rel[len++]=i;

v[i].indgree=-1;

update(i);

}

cout<<"------------------------"<

数据结构实验8实验报告

暨南大学本科实验报告专用纸 课程名称数据结构实验成绩评定 实验项目名称习题6.37 6.38 6.39 指导教师孙世良 实验项目编号实验8 实验项目类型实验地点实验楼三楼机房学生姓名林炜哲学号2013053005 学院电气信息学院系专业软件工程 实验时间年月日午~月日午温度℃湿度(一)实验目的 熟悉和理解二叉树的结构特性; 熟悉二叉树的各种存储结构的特点及适用范围; 掌握遍历二叉树的各种操作及其实现方式。 理解二叉树线索化的实质是建立结点与其在相应序列中的前去或后继之间的直接联系,熟练掌握二叉树的线索化的过程以及在中序线索化树上找给定结点的前驱和后继的方法。 (二)实验内容和要求 6.37试利用栈的基本操作写出先序遍历的非递归形式的算法。 6.38同题6.37条件,写出后序遍历的非递归算法(提示:为分辨后序遍 历时两次进栈的不同返回点需在指针进栈时同时将一个标志进栈)。 6.39假设在二叉链表的结点中增设两个域:双亲域以指示其双亲结点; 标志域以区分在遍历过程中到达该结点时应继续向左或向右或访问该节点。试以此存储结构编写不用栈进行后序遍历的递推形式的算法。(三)主要仪器设备 实验环境:Microsoft Visual Studio 2012 (四)源程序

6.37: #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define TRUE 1 #define FALSE 0 typedef struct bitnode{ char data; struct bitnode *lchild,*rchild; }bitnode,*bitree; void create(bitree &T){ char t; t=getchar(); if(t==' ') T=NULL; else{ if( !( T=(bitnode*)malloc(sizeof(bitnode)) ) ) exit(0); T->data=t; create(T->lchild); create(T->rchild); } } typedef struct{ bitree *base; bitree *top; int stacksize; }sqstack; void initstack(sqstack &S){ S.base=(bitree*)malloc(STACK_INIT_SIZE *sizeof(bitree)); if(!S.base) exit(0); S.top=S.base; S.stacksize=STACK_INIT_SIZE; } void Push(sqstack &s,bitree e){ if(s.top - s.base >= s.stacksize){ s.base =

大数据结构拓扑排序实验报告材料

拓扑排序 [基本要求] 用邻接表建立一个有向图的存储结构。利用拓扑排序算法输出该图的拓扑排序序列。 [编程思路] 首先图的创建,采用邻接表建立,逆向插入到单链表中,特别注意有向是不需要对称插入结点,且要把输入的字符在顶点数组中定位(LocateVex(Graph G,char *name),以便后来的遍历操作,几乎和图的创建一样,图的顶点定义时加入int indegree,关键在于indegree 的计算,而最好的就是在创建的时候就算出入度,(没有采用书上的indegree【】数组的方法,那样会增加一个indegree算法,而是在创建的时候假如一句计数的代码(G.vertices[j].indegree)++;)最后调用拓扑排序的算法,得出拓扑序列。 [程序代码] 头文件: #define MAX_VERTEX_NUM 30 #define STACKSIZE 30 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int InfoType; typedef int Status; typedef int SElemType; /* 定义弧的结构*/ typedef struct ArcNode{ int adjvex; /*该边所指向的顶点的位置*/ struct ArcNode *nextarc; /*指向下一条边的指针*/ InfoType info; /*该弧相关信息的指针*/

网络拓扑实验报告

《计算机网络》 网络拓扑结构 学院名称:计算机与信息工程学院 专业名称:计算机科学与技术 年级班级: 姓名: 学号: 计算机与信息技术学院综合性、设计性实验报告

专业:计算机科学与技术 一、实验目的 通过对网络设备的连通和对拓扑的分析,加深对常见典型局域网拓扑的理解;通过路由建立起网络之间的连接,熟悉交换机、路由器的基本操作命令,了解网络路由的设计与配置。 二、实验仪器或设备 二层交换机五台、三层交换机一台,路由器两台,学生实验主机五台及一台服务器。 三、总体设计(设计原理、设计方案及流程等) 假设某校园网通过1台三层交换机连到校园网出口路由器,路由器再和校园外的 一台路由器相接,现做适当配置,实现校园网内部主机与校园网外部主机的相互通信。 实验拓扑图:

四、实验步骤(包括主要步骤、代码分析等) 三层交换机上配置vlan及IP地址,进行端口划分:Switch(config)#vlan 2 exit vlan 3 exit vlan 4 exit vlan 5 exit Switch(config)#int vlan 2 ip add no sh exit int vlan 3 ip add no sh

exit int vlan 4 ip add no sh exit int (f0/2) sw mod acc sw acc vlan 2 exit int (f0/3) sw mod acc sw acc vlan 3 exit int range(f0/4-5) sw mod acc sw acc vlan 4 exit int (f0/1) sw mod acc sw acc vlan 5 exit int vlan 5 ip add no sh exit 配置DHCP: Switch(config)#ip dhcp pool jinghua2 Switch(dhcp-config)#network dhcp pool jinghua3 Switch(dhcp-config)#net dhcp pool jinghua4

数据结构实验五-查找与排序的实现

实验报告 课程名称数据结构实验名称查找与排序的实现 系别专业班级指导教师11 学号实验日期实验成绩 一、实验目的 (1)掌握交换排序算法(冒泡排序)的基本思想; (2)掌握交换排序算法(冒泡排序)的实现方法; (3)掌握折半查找算法的基本思想; (4)掌握折半查找算法的实现方法; 二、实验内容 1.对同一组数据分别进行冒泡排序,输出排序结果。要求: 1)设计三种输入数据序列:正序、反序、无序 2)修改程序: a)将序列采用手工输入的方式输入 b)增加记录比较次数、移动次数的变量并输出其值,分析三种序列状态的算法时间复杂 性 2.对给定的有序查找集合,通过折半查找与给定值k相等的元素。 3.在冒泡算法中若设置一个变量lastExchangeIndex来标记每趟排序时经过交换的最后位置, 算法如何改进? 三、设计与编码 1.本实验用到的理论知识 2.算法设计

3.编码 package sort_search; import java.util.Scanner; public class Sort_Search { //冒泡排序算法 public void BubbleSort(int r[]){ int temp; int count=0,move=0; boolean flag=true; for(int i=1;ir[j+1]){ temp=r[j]; r[j]=r[j+1]; r[j+1]=temp; move++; flag=true; } } } System.out.println("排序后的数组为:"); for(int i=0;i

实验报告

算法与数据结构 实验报告 系(院):计算机科学学院 专业班级:软工11102 姓名:潘香杰 学号: 201104449 班级序号: 18 指导教师:詹泽梅老师 实验时间:2013.6.17 - 2013.6.29 实验地点:4号楼5楼机房

目录 1、课程设计目的...................................... 2、设计任务.......................................... 3、设计方案.......................................... 4、实现过程.......................................... 5、测试.............................................. 6、使用说明.......................................... 7、难点与收获........................................ 8、实现代码.......................................... 9、可改进的地方.....................................

算法与数据结构课程设计是在学完数据结构课程之后的实践教学环节。本实践教学是培养学生数据抽象能力,进行复杂程序设计的训练过程。要求学生能对所涉及问题选择合适的数据结构、存储结构及算法,并编写出结构清楚且正确易读的程序,提高程序设计基本技能和技巧。 一.设计目的 1.提高数据抽象能力。根据实际问题,能利用数据结构理论课中所学到的知识选择合适的逻辑结构以及存储结构,并设计出有效解决问题的算法。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 3.初步了解开发过程中问题分析、整体设计、程序编码、测试等基本方法和技能。二.设计任务 设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。内容如下: ①创建无向图的邻接表 ②无向图的深度优先遍历 ③无向创建无向图的邻接矩阵 ④无向图的基本操作及应用 ⑤图的广度优先遍历 1.有向图的基本操作及应用 ①创建有向图的邻接矩阵 ②创建有向图的邻接表 ③拓扑排序 2.无向网的基本操作及应用 ①创建无向网的邻接矩阵 ②创建无向网的邻接表 ③求最小生成树 3.有向网的基本操作及应用 ①创建有向网的邻接矩阵 ②创建有向网的邻接表 ③关键路径 ④单源最短路径 三.设计方案 第一步:根据设计任务,设计DOS菜单,菜单运行成果如图所示:

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

离散数学实验报告四个实验

《离散数学》 课程设计 学院计算机学院 学生姓名 学号 指导教师 评阅意见

提交日期 2011 年 11 月 25 日 引言 《离散数学》是现代数学的一个重要分支,也是计算机科学与技术,电子信息技术,生物技术等的核心基础课程。它是研究离散量(如整数、有理数、有限字母表等)的数学结构、性质及关系的学问。它一方面充分地描述了计算机科学离散性的特点,为学生进一步学习算法与数据结构、程序设计语言、操作系统、编译原理、电路设计、软件工程与方法学、数据库与信息检索系统、人工智能、网络、计算机图形学等专业课打好数学基础;另一方面,通过学习离散数学课程,学生在获得离散问题建模、离散数学理论、计算机求解方法和技术知识的同时,还可以培养和提高抽象思维能力和严密的逻辑推理能力,为今后爱念族皮及用计算机处理大量的日常事务和科研项目、从事计算机科学和应用打下坚实基础。特别是对于那些从事计算机科学与理论研究的高层次计算机人员来说,离散数学更是必不可少的基础理论工具。 实验一、编程判断一个二元关系的性质(是否具有自反性、反自反性、对称性、反对称性和传递性) 一、前言引语:二元关系是离散数学中重要的内容。因为事物之间总是可以根据需要确定相应的关系。从数学的角度来看,这类联系就是某个集合中元素之

间存在的关系。 二、数学原理:自反、对称、传递关系 设A和B都是已知的集合,R是A到B的一个确定的二元关系,那么集合R 就是A×B的一个合于{()∈A×}的子集合 设R是集合A上的二元关系: 自反关系:对任意的x∈A,都满足<>∈R,则称R是自反的,或称R具有自反性,即R在A上是自反的?(?x)((x∈A)→(<>∈R))=1 对称关系:对任意的∈A,如果<>∈R,那么<>∈R,则称关系R是对称的,或称R具有对称性,即R在A上是对称的? (?x)(?y)((x∈A)∧(y∈A)∧(<>∈R)→(<>∈R))=1 传递关系:对任意的∈A,如果<>∈R且<>∈R,那么<>∈R,则称关系R是传递的,或称R具有传递性,即R在A上是传递的? (?x)(?y)(?z)[(x∈A)∧(y∈A)∧(z ∈A)∧((<>∈R)∧(<>∈R)→(<>∈R))]=1 三、实验原理:通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。 图示:

拓扑建立及配置实验报告

拓扑建立及配置实验报告 一、实验目的 1、掌握本仿真软件中软交换拓扑结构的搭建和配置方法。 2、掌握本仿真软件中终端注册的配置方法并在软交换上进行注册。 二、实验器材 机房 软交换中心设备 二层交换机 PC IP电话 三、实验原理 软交换是一种功能实体,为下一代网络NGN提供具有实时性要求的业务的呼叫控制和连接控制功能,是下一代网络呼叫与控制的核心。 简单地看,软交换是实现传统程控交换机的“呼叫控制”功能的实体,但传统的“呼叫控制”功能是和业务结合在一起的,不同的业务所需要的呼叫控制功能不同,而软交换是与业务无关的,这要求软交换提供的呼叫控制功能是各种业务的基本呼叫控制。 软交换技术独立于传送网络,主要完成呼叫控制、资源分配、协议处理、路由、认证、计费等主要功能,同时可以向用户提供现有电路交换机所能提供的所有业务,并向第三方提供可编程能力。 软交换技术区别于其它技术的最显著特征,也是其核心思想的三个基本要素是: a、生成接口 软交换提供业务的主要方式是通过API与“应用服务器”配合以提供新的综合网络业务。与此同时,为了更好地兼顾现有通信网络,它还能够通过INAP与IN中已有的SCP配合以提供传统的智能业务。 b、接入能力 软交换可以支持众多的协议,以便对各种各样的接入设备进行控制,最大限度地保护用户投资并充分发挥现有通信网络的作用。 c、支持系统 软交换采用了一种与传统OAM系统完全不同的、基于策略(Policy-based)的实现方式来完成运行支持系统的功能,按照一定的策略对网络特性进行实时、智能、集中式的调整和干预,以保证整个系统的稳定性和可靠性。 作为分组交换网络与传统PSTN网络融合的全新解决方案,软交换将PSTN的可靠性和数据网

数据结构实验五

1. 实验步骤: 先定义顺序表的结点: typedef struct { KeyType key; InfoType otherinfo; }ElemType; typedef struct { ElemType *R; int length; }SqList; 然后定义一个随机取数的函数,存到顺序表中: void CreateList(SqList &L,int n) 然后定义一个显示顺序表的函数,将顺序表中的数据显示出来: void ListTraverse(SqList L) 然后通过排序函数,将所有的数据按照从大到小的顺序排列: void BubbleSort(SqList &L) 实验结果: 测试数据: 38 86 9 88 29 18 58 27 排序后: 9 18 27 29 38 58 86 88 BubbleSort排序方法中数据的比较次数为:27 疑难小结: 这个程序的难点在于排序函数,总是把从第几个数开始排序以及怎样循环弄错。 源代码: #include using namespace std; #include typedef int KeyType; typedef char * InfoType; typedef struct { KeyType key; InfoType otherinfo; }ElemType; typedef struct { ElemType *R; int length; }SqList; int CmpNum; void CreateList(SqList &L,int n) { int i;

计算机网络实验报告

计算机网络实验报告 专业班级 学号 姓名 指导教师

试验一以太网帧的构成 练习一:领略真实的MAC帧 各主机打开协议分析器,进入相应的网络结构并验证网络拓扑的正确性,如果通过拓扑验证,关闭协议分析器继续进行实验,如果没有通过拓扑验证,请检查网络连接。 本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。现仅以主机A、B所在组为例,其它组的操作参考主机A、B所在组的操作。 1. 主机B启动协议分析器,新建捕获窗口进行数据捕获并设置过滤条件(提取ICMP协议)。 2. 主机A ping 主机B,察看主机B协议分析器捕获的数据包,分析MAC帧格式。 3. 将主机B的过滤器恢复为默认状态。 实验截图: 练习二:理解MAC地址的作用

1. 主机B、D、E、F启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(源MAC地址为主机A的MAC地址)。 2. 主机A ping 主机C。 3. 主机B、D、E、F上停止捕获数据,在捕获的数据中查找主机A所发送的ICMP数据帧,并分析该帧内容。 ●记录实验结果 表1-3实验结果 实验截图: 练习三:编辑并发送MAC广播帧

1. 主机E启动协议编辑器。 2. 主机E编辑一个MAC帧: 目的MAC地址:FFFFFF-FFFFFF 源MAC地址:主机E的MAC地址 协议类型或数据长度:大于0x0600 数据字段:编辑长度在46—1500字节之间的数据 3. 主机A、B、C、D、F启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(源MAC地址为主机E的MAC地址)。 4. 主机E发送已编辑好的数据帧。 5. 主机A、B、C、D、F停止捕获数据,察看捕获到的数据中是否含有主机E所发送的数据帧。 ●结合练习三的实验结果,简述FFFFFF-FFFFFF作为目的MAC地址的作用。 答:该地址为广播地址,作用是完成一对多的通信方式,即一个数据帧可发送给同一网段内的所有节点。 实验截图: 练习四:编辑并发送LLC帧 本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。现仅以主机 A、B所在组为例,其它组的操作参考主机A、B所在组的操作。 1. 主机A启动协议编辑器,并编写一个LLC帧。 目的MAC地址:主机B的MAC地址 源MAC地址:主机A的MAC地址 协议类型和数据长度:001F

数据结构实验五A

《数据结构与算法分析》 实验报告书 学期:2014 - 2015 学年第 2 学期 班级:信息管理与信息系统2班 学号: 1310030217 姓名:田洪斌 实验类别:(★)基础型()设计型 实验时间: 成绩: 信息管理系

一、实验内容 实现程序,按满二叉树给元素编号并输入的方式构造二叉树。 二、实验目的 1、掌握二叉树的静态及操作特点; 2、掌握二叉树的各种遍历方法; 3、掌握二叉树的存储、线索化等在C语言环境中的实现方法; 4、掌握哈夫曼树的构造方法及编码方法。 三、需求分析 用二叉树结构表示来完成输入、编辑、调试、运行的全过程。并规定: a.手动输入数字建立二叉树 b.程序可以输入、调试、运行、显示、遍历 c.测试数据:用户手动输入的数据 四、系统设计 1.数据结构设计 在本程序中对二叉树的存储主要用的是顺序存储结构,将二叉树存储在一个一维数组中。数据的输入输出都是采用整型数据进行。在主函数中只是定义数据类型,程序的实现功能化主要是在主函数中通过给要调用的函数参数来实现程序要求的功能。 2.程序结构设计 (1)程序中主要函数功能: main()/////////////////////////////////////////////主函数 menu()/////////////////////////////////////////////菜单 BiTree CreateBiTree()///////////////////////先序建立二叉树 (2)函数调用关系 见图4-1。

图4-1 函数关系图 五、 调试分析 1.算法和函数中出现了一些系统无法识别的变量,照成程序出现了错 误。原因是没有注意算法与源程序的区别。算法是简单的对源程序进行描述 的,是给人阅读的,所以有些变量没有定义我们就能看懂。而程序中的变量一定要先定义才能够被引用,才能被计算机识别。 2.在调试过程中遇到问题是利用C++程序进行调试的,找出错误并改正。 3.数据输出函数运行不正常,经检查程序,发现是定义错误,更改后错误排除; 六、 测试结果 1.运行时输入正确密码进入主界面,系统根据输入的数字选项来调用相应的函数。主要实现“功能选择”的界面,在这个界面里有显示系统的五大功能,根据每个功能前面的序号进行选择。以下为该界面: main BiTree CreateB iTree() meun()

数据结构-实验五-图

数据结构与算法课程实验报告实验五:图的相关算法应用 姓名:cll 班级: 学号:

【程序运行效果】 一、实验内容: 求有向网络中任意两点之间的最短路 实验目的: 掌握图和网络的定义,掌握图的邻接矩阵、邻接表和十字链表等存储表示。掌握图的深度和广度遍历算法,掌握求网络的最短路的标号法和floyd算法。 二、问题描述: 对于下面一张若干个城市以及城市间距离的地图,从地图中所有可能的路径中求出任意两个城市间的最短距离及路径,给出任意两个城市间的最短距离值及途径的各个城市。 三、问题的实现: 3.1数据类型的定义 #define MAXVEX 50 //最大的顶点个数 #define MAX 100000 typedef struct{ char name[5]; //城市的名称

}DataType; //数据结构类型 typedef struct{ int arcs[MAXVEX][MAXVEX]; //临接矩阵 DataType data[MAXVEX]; //顶点信息 int vexs; //顶点数 }MGraph,*AdjMetrix; //邻接矩阵表示图 3.2主要的实现思路: 用邻接矩阵的方法表示各城市直接路线的图,之后用Floyd算法求解两点直接的最短距离,并用递归的方法求出途经的城市。 主要源程序代码: #include #include #define MAXVEX 50 #define MAX 100000 typedef struct{ char name[5]; //城市的名称 }DataType; //数据结构类型 typedef struct{ int arcs[MAXVEX][MAXVEX]; //临接矩阵 DataType data[MAXVEX]; //顶点信息 int vexs; //顶点数 }MGraph,*AdjMetrix; //创建临接矩阵 void CreatGraph(AdjMetrix g,int m[][MAXVEX],DataType d[],int n){ /*g表示邻接矩阵,m[][MAXVEX]表示输入的邻接矩阵,d[]表示各城市的名称,n表示城市数目*/ int i,j; g->vexs = n; for(i=0;i < g->vexs;i++){ g->data[i] = d[i]; for(j=0;jvexs;j++){ g->arcs[i][j] = m[i][j]; } } } //求最短路径 void Floyd(AdjMetrix g,int F[][10],int path[][10]){ int i,j,k; for(i=0;ivexs;i++){ for(j=0;jvexs;j++){

图的应用的实验报告

实验六图的应用及其实现 一、实验目的 1.进一步功固图常用的存储结构。 2.熟练掌握在图的邻接表实现图的基本操作。 3.理解掌握AOV网、AOE网在邻接表上的实现以及解决简单的应用问题。 二、实验内容 [题目一]:从键盘上输入AOV网的顶点和有向边的信息,建立其邻接表存储结构,然后对该图拓扑排序,并输出拓扑序列. 试设计程序实现上述AOV网的类型定义和基本操作,完成上述功能。 测试数据:教材图7.28 [题目二]:从键盘上输入AOE网的顶点和有向边的信息,建立其邻接表存储结构,输出其关键路径和关键路径长度。试设计程序实现上述AOE网类型定义和基本操作,完成上述功能。 测试数据:教材图7.29 三、实验步骤 ㈠、数据结构与核心算法的设计描述 基本数据结构: #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 typedef int Status; /* Status 是函数的类型,其值是函数结果状态代码,如OK 等*/ #define INFINITY INT_MAX //定义无穷大∞ #define MAX_VERTEX_NUM 20 typedef int V ertexType; typedef int InfoType; typedef struct ArcNode // 表结点定义 { InfoType info; int adjvex; //邻接点域,存放与V i邻接的点在表头数组中的位置ArcNode *nextarc; //链域,指示依附于vi的下一条边或弧的结点, }ArcNode; typedef struct VNode //表头结点 { int data; //存放顶点信息 struct ArcNode *firstarc; //指示第一个邻接点 }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct { //图的结构定义

计算机网络技术实验报告

重庆交通大学 学生实验报告 实验课程名称《计算机网络技术》课程实验 开课实验室软件与通信实验中心 学院国际学院年级2012 专业班(1)班 学生姓名吴双彪学号6312260030115 开课时间2014 至2015 学年第二学期 实验2简单的局域网配置与资源共享 实验目的: 1、掌握将两台PC联网的技能与方法 2、掌握将几台PC连接成LAN的技能与方法 3、掌握局域网内资源共享的技能与方法 实验内容和要求: 1、选用百兆交换机连接PC若干台; 2、在上述两种情况下分别为PC配置TCP/IP协议,使他们实现互联和资源共享实验环境:(画出实验网络拓图) 实验步骤: 1、选择两台计算机; 选PC0与PC1. 2、设置两台计算机IP地址为C类内部地址; 两台PC机的IP分别设置为:、202.202.242.47、202.202.243.48; 两台PC机的掩码分别设置为:、255.255.255.0、255.255.255.0; 3、用一台计算机Ping另一台计算机,是否能Ping通?

4、我的电脑→工具→文件夹选项→查看→去掉“使用简单文件共享(推荐)”前 的勾;设置共享文件夹。 5、控制面板→管理工具→本地安全策略→本地策略→安全选项里,把“网络访 问:本地帐户的共享和安全模式”设为“仅来宾-本地用户以来宾的身份验证” (可选,此项设置可去除访问时要求输入密码的对话框,也可视情况设为“经典-本地用户以自己的身份验证”); 6、通过网络邻居或在运行窗口输入“\\对方IP地址”实现资源共享。 1)指定IP地址,连通网络 A.设置IP地址 在保留专用IP地址范围中(192.168.X.X),任选IP地址指定给主机。 注意:同一实验分组的主机IP地址的网络ID应相同 ..。 ..,主机ID应不同 ..,子网掩码需相同B.测试网络连通性 (1)用PING 命令PING 127.0.0.0 –t,检测本机网卡连通性。 解决方法:检查网线是否连接好,或者网卡是否完好 (2)分别“ping”同一实验组的计算机名;“ping”同一实验组的计算机IP地址,并记录结 果。答:能。结果同步骤3 (3)接在同一交换机上的不同实验分组的计算机,从“网上邻居”中能看到吗?能ping通 吗?记录结果。 2) 自动获取IP地址,连通网络 Windows主机能从微软专用B类保留地址(网络ID为169.254)中自动获取IP地址。 A.设置IP地址 把指定IP地址改为“自动获取IP地址”。 B.在DOS命令提示符下键入“ipconfig”,查看本机自动获取的IP地址,并记录结果。 C.测试网络的连通性 1.在“网上邻居”中察看能找到哪些主机,并记录结果。 2.在命令提示符下试试能“ping”通哪些主机,并记录结果。 答:能ping通的主机有KOREYOSHI ,WSB ,ST ,LBO ,CL 。思考并回答 测试两台PC机连通性时有哪些方法? 实验小结:(要求写出实验中的体会)

数据结构课程实验报告-实验5

数据结构课程实验报告-实验5

HUNAN UNIVERSITY 课程实习报告 题目:四则运算表达式求值 学生姓名康小雪 学生学号 20090810310 专业班级计科三班 指导老师李晓鸿 完成日期2010-10-24

一、需求分析 1.该程序可以从通过从键盘输入一个中缀表达式,判断该表达式是否合法,若合法将 其转化为后缀表达式,并计算其结果,否则说明该表达式错误 2..输入的表达式包含数字和运算符及括号,之间用空格隔开 3.数字可以为整数和小数 4.运算结果保留两位小数 输入输出举例 输入:21+23*(12-6) 输出:21 23 12 6 -*+ 二、概要设计 在表达式中每个运算符应对应两个操作数,与二叉树中非叶子结点和叶子结点之间的关系刚好相同,于是,本题可采用二叉树来将中缀表达式变为后缀表达式。 最后用堆栈来实现后缀表达式的计算。 抽象数据类型 二叉树 ADT BiTree {

数据对象D:D是具有相同特性的数据元素集合 数据关系R: 若D为空集,则R为空集,则称BinaryTree 为空二叉树; 若D不为空集,否则R={H},H是如下二元关系: (1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2)若D-{root}≠空集,则存在D-{root}的一个划分{D1,Dr} 且D1∩Dr=空集; (3)若D1≠空集,则D1中存在唯一元素x1,∈H,且存在D1shang de guanxi H1=H;ruo Dr≠空集,则Dr中存 在唯一的元素,xr,∈H,且 存在Dr上的关系Hr∈ H;H={,,H1,Hr}; (4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一棵 符合本定义的二叉树,称为根的右子树基本操作P: InitBiTree(&T)

复杂网络实验报告

复杂网络实验报告 姓名:韦亚勇 学号:152311 专业:计算机技术 时间:2016年1月6日

实验一 【名称】:规则网络 【数据来源】:教研室网络拓扑 【可视工具】:Gephi 【作品简介】:自然界中存在的大量复杂系统都可以通过形形色色的网络加以描述。例如,计算机网络可以看做是计算机通过通信介质如光缆、双绞线、同轴电缆等相互连接形成的网络;神经系统可以看做是大量神经细胞通过神经纤维相互连接形成的网络。类似的还有电力网络社会关系网络,交通网络等。 对社会网络最早研究的是数学界,其基本的理论是图伦。在网络中,两点之间的距离被定义为连接两点的最短路径所包含的边的数目,把所有节点对的距离求平均,就得到了网络的平均距离。 从网络的拓扑结构来看,常见的规则网络模型有邻近耦合网络,星型网络,以及完全网络。下面我将以星型网络进行分析。 星型网络中中心节点代表的是交换机,其余节点代表的是主机。边代表的是双绞线。 星型网络具有以下优点:容易实现、节点扩展、移动方便、维护容易、采用广播信息传送方式、网络传输数据快。 【研究目的】:进一步了解星型网络结构的特点,加深对规则网络的认识,利用网络分析工具分析规则网络特点。

星型网络图: 由网络分析工具统计出以下结果:

实验二 【名称】:随机网络 【数据来源】:数据堂:【可视工具】:Gephi 【作品简介】:一个客观系统的动态运行过程,可以看做是系统之间的转移过程,当系统从一种状态转移到另一种或多种状态去时,可以取不通的概率。对网络系统来说,可以理解为从某一节点转移到其他可节点时具有不同的概率。具有这个特征的网络,我们称之为随机网络。 传统的随机网络(如ER模型),尽管连接是随机设置的,但大部分节点的连接数目会大致相同,即节点的分布方式遵循钟形的泊松分布,有一个特征性的“平均数”。连接数目比平均数高许多或低许多的节点都极少,随着连接数的增大,其概率呈指数式迅速递减。故随机网络亦称指数网络。 该网络中,每个节点代表了参加美国2000年橄榄球赛季的高校代表队,连接两个节点之间的边则表示相应的两支球队之间至少曾有过一场比赛。粗边表示两队有两场比赛,也就是半决赛或者决赛时两队又进行了一场比赛。 【研究目的】:了解随机网络在社会领域中的应用,利用网络分析工具分析随机网络特点。

数据结构实验报告3543435

合肥师范学院实验报告册 2013 / 2014 学年第2 学期 系别计算机科学与技术系 实验课程数据库原理 专业计算机软件 班级软件一班 姓名周锦 学号1210431081 指导教师潘洁珠

实验一——数据库基本操作 一、实验目的 1.熟悉MS SQL SERVER运行界面,掌握服务器的基本操作。 2.掌握界面操作方法完成用户数据库建立、备份和还原。 3.建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。 二、实验预习内容 在认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。 1.熟悉SQL SERVER 2000 的运行环境,练习服务器基本操作:打开、停止、关闭。 2.使用SQL SERVER 2000 中的企业管理器完成以下任务。 数据库名称:STC 表:STU(sno char(9), sname varchar(50), ssex char(2) , sage int, sdept char(2) ); COUTSES(cno char(3), cname varchar(50), cpno char(3), credit int ); SC(sno char(9), cno char(3), grade int ); 说明:以上为表结构,以sno char(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。 1)建立数据库STC,分别建立以上三张表,并完成数据录入。(表结构及数据参见教材) 建立数据库:数据库→右击鼠标→新建数据库,出现如上图所示的框,然后填上所建数据库的名称。

数据结构上机实验5

数据结构上机实验(五)递归 班级:学号:姓名: 上机时间:地点: 一、实验目的 1.理解递归的定义和递归模型。 2.掌握递归设计的一般方法,能用递归算法解决一些较复杂应用问题。 二、实验内容 1.编写程序求解皇后问题 要求:(1)皇后的个数n由用户输入,其值不能超过20; (2)采用递归方法求解。 2.编写一个程序求解背包问题 三、实验过程 1.了解常用函数所在的头文件 stdlib.h stdlib 头文件里包含了C语言的一些函数 该文件包含了的C语言标准库函数的定义 stdlib.h里面定义了五种类型、一些宏和通用工具函数。类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX 和MB_CUR_MAX等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。具体的内容你自己可以打开编译器的include目录里面的stdlib.h头文件看看。 conio.h conio.h不是C标准库中的头文件。 conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 &表示引用传递。在函数参数表中,出现带&这个的形参,表示引用传递。2.程序实现(以下代码仅起参考作用) (1)求解皇后问题 #include #include const int N=20; //最多皇后个数 int q[N]; //存放各皇后所在的行号 int cont=0; //存放解个数 void print(int n) //输出一个解 { cont++; int i; printf(" 第%d个解:",cont);

计算机网络实验报告

计算机网络实验报告 实验时间 参加人员 一、实验名称 简单以太网的组建 二、实验内容 1、观察教学机房,了解计算机网络结构,并画出计算机网络拓扑结构图。 2、了解计算机网络中的网络设备,并了解每台计算机上使用的网络标识、网络协议。 3、制作2根直通双绞线和2根交叉线,并测试。 4、分别用制作好的直通线、交叉线以及串口线、并口线,连接两台计算机。 三、实验步骤

1、教学机房网络拓扑结构观察计算机教学机房的计算机网络的组成,并画出网络拓扑结构图。 (1)记录联网计算机的数量、配置、使用的操作系统、网络拓扑结构、网络建成的时间等数据。 (2)了解教学机房设备是如何互联的。 (3)认识并记录网络中使用的其他硬件设备的名称、用途和连接的方法。 (4)根据以上数据及观察结果画出拓扑结构图。。 (5)分析网络使用的结构及其所属类型。 (6)打开计算机进入系统,查看计算机的网络参数,记录主要网络配置参数。 2、直通线的制作按照EIA/TIA568B的标准,制作两段直通线。 (1)利用双绞线拨线器将双绞线的外皮除去2~3cm。有些双绞线电缆内含有一条柔软的尼龙绳,若在剥除双绞线的外皮时,裸露出部分太短,可紧握双绞线外皮,再捏住尼龙线的下方剥开。

(2)将裸露的双绞线中的橙色对线拨向自己的前方,棕色对线拨向自己的方向,绿色对线拨向自己的左方,蓝色对线拨向右方。 (3)将绿色对线和蓝色对线放在中间位置,橙色对线和棕色对线保持不动,即放在靠外的位置。 (4)小心拨开每一对线,而不必剥开各对线的外皮。特别注意的是,绿色条线应跨越蓝色对线。正确的线序是:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕。这里最容易犯错的是将白绿线与绿线相邻放在--起(5)将裸露出的双绞线用剪刀或斜口钳剪下只剩下约14mm的长度。最后再将双绞线的每一根线依序放入RJ-45接头的引脚内,第一一只引脚内应该放白橙色的线,其余类推。 (6)确定双绞线的每根线已经正确放置后,就可以用RJ-45压线钳压接RJ-45接头了,要确保每一根线与接头的引脚充分接触。 (7)按照相同的方法制作另外--端。 (8)用测线仪测试做好的网线,看看自己做的网线是否合格。打开测线仪电源,将网线插头分别插入主测试器和远程测试器,主机指示灯从1~8逐个顺序闪亮,如远程测试器也按1~8的顺序依次闪亮则合格。如果接线不正常,则按下述情况显示。

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

相关文档
最新文档