淮海工学院 数据结构 第4次实验

淮海工学院 数据结构 第4次实验
淮海工学院 数据结构 第4次实验

淮海工学院计算机科学系实验报告书

课程名:《数据结构》

题目:树型数据结构实验

班级:

学号:

姓名:

树型数据结构实验报告要求

1目的与要求:

1)熟练掌握Huffman树的创建算法与编程实现;

2)熟练掌握Huffman编码算法的实现与编程应用;

3)创建较为实用的通信报文Huffman编码系统和译码系统;

4)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);

5)认真书写实验报告,并按时提交。

2 实验内容或题目

实验四:树型数据结构实验——创建通信报文编码与译码系统

构造通信报文编码和译码系统(要求Huffman编码与译码)。条件:

1、使用英文报文实施加密通信。设组成报文的字符集为26个英文字母(不分大小写)和两个标点符号字符“,”、“.”和一个空格字符(共29个字符)。

2、字符集中每个字符(含字母和两个标点符号)的使用概率自己根据英文行文合理给出(可以在网上查询)。

3、以字符集中各个字符为叶结点、字符的使用频率为权重构造Huffman树,并求得各个字符的Huffman编码(参考教材P152-153教材算法6.16)。同时,输出构造的Huffman树和字符编码结果。

4、在上述通信报文编码和译码系统中实现:输入一报文原文(即使用英文书写的一段文字或一两句话,称为明文),给出要发送的报文编码(密文);再输入一密文(0、1序列),输出其对应的译码报文(明文)。其中报文原文或编码序列自己设定,尽量是一句话或一段文字的对应编码序列,这样可以验证输出结果的正确性。

5、本次实验程序给出创建哈弗曼和哈弗曼编码的源程序,调试运行并实验本次实验的全部功能。

3 实验步骤与源程序

#include

#include

#include

typedef char* HuffmanCode;/*动态分配数组,存储哈夫曼编码*/

typedef struct

{

unsigned int weight ; /* 用来存放各个结点的权值*/

unsigned int parent, LChild,RChild ; /*指向双亲、孩子结点的指针*/ }HTNode, * HuffmanTree; /*动态分配数组,存储哈夫曼树*/

void select(HuffmanTree *ht,int n, int *s1, int *s2)

{

int i;

int min;

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

{

if((*ht)[i].parent == 0)

{

min = i;

i = n+1;

}

}

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

{

if((*ht)[i].parent == 0)

{

if((*ht)[i].weight < (*ht)[min].weight)

min = i;

}

}

*s1 = min;

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

{

if((*ht)[i].parent == 0 && i!=(*s1))

{

min = i;

i = n+1;

}

}

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

{

if((*ht)[i].parent == 0 && i!=(*s1))

{

if((*ht)[i].weight < (*ht)[min].weight)

min = i;

}

}

*s2 = min;

}

void CrtHuffmanTree(HuffmanTree *ht , int *w, int n)

{ /* w存放已知的n个权值,构造哈夫曼树ht */

int m,i;

int s1,s2;

m=2*n-1;

*ht=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); /*0号单元未使用*/

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

{/*1-n号放叶子结点,初始化*/

(*ht)[i].weight = w[i];

(*ht)[i].LChild = 0;

(*ht)[i].parent = 0;

(*ht)[i].RChild = 0;

}

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

{

(*ht)[i].weight = 0;

(*ht)[i].LChild = 0;

(*ht)[i].parent = 0;

(*ht)[i].RChild = 0;

} /*非叶子结点初始化*/

/* ------------初始化完毕!对应算法步骤1---------*/

for(i=n+1;i<=m;i++) /*创建非叶子结点,建哈夫曼树*/

{ /*在(*ht)[1]~(*ht)[i-1]的范围内选择两个parent为0且weight最小的结点,其序号分别赋值给s1、s2返回*/

select(ht,i-1,&s1,&s2);

(*ht)[s1].parent=i;

(*ht)[s2].parent=i;

(*ht)[i].LChild=s1;

(*ht)[i].RChild=s2;

(*ht)[i].weight=(*ht)[s1].weight+(*ht)[s2].weight;

}

}/*哈夫曼树建立完毕*/

void outputHuffman(HuffmanTree HT, int m)

{

if(m!=0)

{

printf("%d ", HT[m].weight);

outputHuffman(HT,HT[m].LChild);

outputHuffman(HT,HT[m].RChild);

}

}

void CrtHuffmanCode(HuffmanTree *ht, HuffmanCode *hc, int n)

/*从叶子结点到根,逆向求每个叶子结点对应的哈夫曼编码*/

{

char *cd;

int i;

unsigned int c;

int start;

int p;

hc=(HuffmanCode *)malloc((n+1)*sizeof(char *)); /*分配n个编码的头指针*/

cd=(char * )malloc(n * sizeof(char )); /*分配求当前编码的工作空间*/

cd[n-1]='\0'; /*从右向左逐位存放编码,首先存放编码结束符*/

for(i=1;i<=n;i++) /*求n个叶子结点对应的哈夫曼编码*/

{

start=n-1; /*初始化编码起始指针*/

for(c=i,p=(*ht)[i].parent; p!=0; c=p,p=(*ht)[p].parent) /*从叶子到根结点求编码*/ if( (*ht)[p].LChild == c)

cd[--start]='0'; /*左分支标0*/

else

cd[--start]='1'; /*右分支标1*/

hc[i]=(char *)malloc((n-start)*sizeof(char)); /*为第i个编码分配空间*/

strcpy(hc[i],&cd[start]);

}

free(cd);

}

char* mingma(HuffmanTree HT,int m,char *ch,char*code)

{

char *result=new char[100];

for(int i=0,j=0;ch[j]!=0;j++)

{

int n=m;

while(HT[n].LChild != 0&&HT[n].RChild != 0)

{

if(code[i]=='0')

n=HT[n].LChild;

else

n=HT[n].RChild;

i++;

}

result[j]=ch[n-1]; }

result[j]=0;

return result;

}

char* miwen(HuffmanTree HT, int m,char *ch,char *c,HuffmanCode* code) {

char *result=new char[100];

result[0]=0;

int i,j,n=0;

for(i=0;ch[i]!='\0';i++)

{

for(j=0;j

{

if(c[j]==ch[i])

{

strcat(result,code[j+1]);

break;

}

}

}

return result;

}

char *CrtHuffmanCode(HuffmanTree *ht, HuffmanCode *hc, int n,char *ch) {

char *cd;

int i;

int c;

int start;

int p;

hc=(HuffmanCode *)malloc((n+1)*sizeof(char *));

cd=(char * )malloc(n * sizeof(char ));

cd[n-1]='\0';

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

{

start=n-1;

for(c=i,p=(*ht)[i].parent; p!=0; c=p,p=(*ht)[p].parent)

if( (*ht)[p].LChild==c)

cd[--start]='0';

else

cd[--start]='1';

hc[i]=(char *)malloc((n-start)*sizeof(char));

strcpy(hc[i],&cd[start]);

}

free(cd);

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

printf("%c编码为%s\n",ch[i-1],hc[i]);

char mm[100];

printf("输入明码:\n");

gets(mm);

char* miwen(HuffmanTree HT,int m,char *ch,char *c,HuffmanCode* code);

printf("对应密文:\n%s\n",miwen(*ht,29,mm,ch,hc));

return 0;

}

void main()

{

HuffmanTree HT;

HuffmanCode HC;

int n=29;

int s=0;

int m;

char zi[29]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',',','.',' '};

int w[29]={8,2,4,3,1,18,24,30,7,19,11,54,30,66,71,31,19,73,75,69,36,10,12,22,17,25,72,40,12};

printf("the total number of the Huffman Tree:");

CrtHuffmanTree(&HT,w,n);

m = 2*n-1;

outputHuffman(HT,m);

printf("\n");

char *hc=CrtHuffmanCode(&HT,&HC,n,zi);

printf("输入密文\n");

char t_[100];

scanf("%s",t_);

printf("对应明文:\n%s\n",mingma(HT,2*n-1,zi,t_));

}

4 测试数据与实验结果(可以抓图粘贴)

5 结果分析与实验体会

开始没有什么头绪后来老师提示一些方法,在根据老师给的代码做了出来,遇到的麻烦是忘了C语

言输出格式,%s和%c的区别,开始用%c,后来才想起这是单个字符的输出,%s才是串的输出。

数据结构课程设计图的遍历和生成树求解

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法课程设计 课程代码: 6014389 题目: 图的遍历和生成树求解实现 年级/专业/班: 学生姓名: 学号: 开始时间: 2012 年 12 月 09 日 完成时间: 2012 年 12 月 26 日 课程设计成绩: 指导教师签名:年月日

目录 摘要 (3) 引言 (4) 1 需求分析 (5) 1.1任务与分析 (5) 1.2测试数据 (5) 2 概要设计 (5) 2.1 ADT描述 (5) 2.2程序模块结构 (7) 软件结构设计: (7) 2.3各功能模块 (7) 3 详细设计 (8) 3.1结构体定义 (19) 3.2 初始化 (22) 3.3 插入操作(四号黑体) (22) 4 调试分析 (22) 5 用户使用说明 (23) 6 测试结果 (24) 结论 (26)

摘要 《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的: ?了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; ?初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; ?提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 这次课程设计我们主要是应用以前学习的数据结构与面向对象程序设计知识,结合起来才完成了这个程序。 因为图是一种较线形表和树更为复杂的数据结构。在线形表中,数据元素之间仅有线性关系,每个元素只有一个直接前驱和一个直接后继,并且在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。因此,本程序是采用邻接矩阵、邻接表、十字链表等多种结构存储来实现对图的存储。采用邻接矩阵即为数组表示法,邻接表和十字链表都是图的一种链式存储结构。对图的遍历分别采用了广度优先遍历和深度优先遍历。 关键词:计算机;图;算法。

淮海工学院操作系统期末考试试题A卷2010

淮海工学院 10 - 11 学年第 1 学期操作系统原理试卷(A闭卷) 一、单项选择题(本大题含20小题,每小题1分,共计20分) 答题表(将答案填入下表,否则不予评分) A.应用程序 B.实用程序 C.资源管理程序 D.都对 2.利用P、V操作控制临界区的使用。当有N个进程希望进入临界区时,对应信号量的最大取值范围可能是()。 A.1~-1 B.-1~1 C.1~1-N D.-N~N-1 3.下列进程调度算法中,综合考虑了进程等待时间和执行时间的是()。A.FCFS B.SPF C.RR D.HRN 4.在操作系统中,用户在使用I/O设备时,通常采用()。 A.设备号 B.逻辑设备名 C.虚拟设备名 D.物理设备名 5.下列死锁预防策略中,破坏了“循环等待”条件的是()。 A.银行家算法 B.一次性分配 C.剥夺资源法 D.资源有序分配6.将分区管理发展为分页管理的主要目的是()。 A.提高系统的吞吐量 B.提高程序的并发度 C.提高主存的利用率 D.使系统能运行更大的程序7.若分时系统的时间片一定,那么(),则响应时间越短。 A.内存越小 B.内存越大 C.用户数越少 D.用户数越多 8.磁盘高速缓存指的是()。 A.CPU和内存间增设的高速缓存 B.内存中的一块空间 C.磁盘上的一个物理块 D.以上都有可能 9.以空间换时间的技术是()。 A.SPOOLING技术 B.分时技术 C.并行技术 D.分页技术 10.()是解决进程间同步与互斥的一对低级通信原语。 A.lock和unlock B.P和V C.W和S D.send和receive 11.在分时系统中,一个运行的进程用完了分配给它的时间片但未结束,其状态变为()。 A.就绪 B.等待 C.运行 D.由用户自己确定 12.某系统中有3个并发进程,都需要同类资源4个,问该系统不会发生死锁的最少资源数是()。 A.11 B.9 C.10 D.12 13.在内存中的多个进程,若一段时间内都得到运行。这种性质称为进程的()。 A.动态性 B.并发性 C.调度性 D.异步性 14.在页面置换算法中,可能引起Belady现象的是()。 A.FIFO B.LRU C.OPT D.CLOCK 15.下列进程状态的转换中,哪一个是不正确的()。 A.活动就绪→运行 B.运行→活动就绪 C.活动阻塞→静止阻塞 D.活动就绪→静止阻塞 16.系统在()时,发生从用户态到核心态的转换。 A.发出P操作 B.发出V操作 C.执行系统调用 D.执行中断程序 17.在SPOOLING系统中,用户进程实际分配得到的是()。 A.用户所要求的外设 B.内存区,即虚拟设备 C.设备的一部分存储区 D.设备的一部分空间 18.某系统使用两级页表,页的大小为212B,虚地址长度为32位,页目录表占8位,二级页表占()位。 A.8 B.10 C.12 D.14 19.在以下文件的物理结构中,不利于文件长度动态增长的是()。 A.连续结构 B.链接结构 C.索引结构 D.hash结构 20.采用请求分页存储管理方法,一个已在内存被修改的置换页面,应置换到()。 A.后备作业区 B.磁盘文件区 C.I/O缓冲区 D.磁盘交换区 二、填空题(本大题含9小题10空,每空2分,共计20分) 1.多道程序设计技术的实现是由于硬件技术中出现了通道和 _____ 才产生的。 2.操作系统的两个基本特征是 ______和________,它们互为存在条件。 3.在一个单CPU系统中,若有N个用户进程(N>1),且当前CPU为用户态,则处 1

工程测量实验报告

实验报告 课程名称:工程测量实验报告 专业班级:D测绘131 姓名学号:戴峻2013132911 测绘工程学院 实验报告一、精密角度测量 一、实验名称:精密角度测量 二、实验性质:综合性实验 三、实验地点:淮海工学院苍梧校区 时间:2016.6.02 四、实验目的: 1. 掌握精密经纬仪(DJ1或DJ2)的操作方法。 2. 掌握方向法观测水平角水平角的观测顺序,记录和计算方法。 五、仪器和工具: 全站仪一台,三脚架一个,记录板一块,自备铅笔,记录手薄和观测目标物。

六、实验内容及设计: 在实验之前,需要做的工作是:了解实验内容,以及读数的多种限差,并选择好实验地点,大略知道实验数据的处理。 1.实验步骤: (1)架设全站仪,完成对中、整平; (2)调清楚十字丝,选择好起始方向,消除视差; (3)一个测站上四个目标一测回的观测程序 2. 度盘配置: 设共测4个测回,则第i个测回的度盘位置略大于(i-1)180/4. 3. 一测回观测: (1) 盘左。选定一距离较远、目标明显的点(如A点)作为起始方向,将平读盘读数配置在稍大于0 o处,读取此时的读数;松开水平制动螺旋,顺时针方向依次照准B、C、D三目标读数;最后再次瞄准起始点A并读数,称为归零。

以上称为上半侧回。两次瞄准A点的读数之差称为“归零差”,检核是否超限,超限及时放弃本测回,重新开始本测回。 (2)盘右。先瞄准起始目标A,进行读数;然后按逆时针放线依次照准D、C、B、A各目标,并读数。 以上称之为下半测回,其归零差仍要满足规范要求。 上、下半测回构成了一个测回,检核本测回是否满足各项限差,如超限,重新开始本测回,合限,进行下一测回工作。 4.记录、计算 (1)记录。参考本指南所附的本次实验记录表格。盘左各目标的读数按从上往下的顺序记录,盘右各目标读数按从下往上的顺序记录。 (2)两倍照准误差2C的计算。按照下式计算2C 对于同一台仪器,在同一测回内,各方向的2C值应为一个定值。若有变化,其变化值不超过表1.1中规定的范围 表1.1 水平角方向观测法的技术要求

数据结构实验报告

数据结构实验报告 一.题目要求 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

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

数据结构实验报告 实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 二、实验内容: 1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。 2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图 3、深度优先遍历第一步中构造的图G,输出得到的节点序列 4、广度优先遍历第一部中构造的图G,输出得到的节点序列 三、实验要求: 1、无向图中的相关信息要从终端以正确的方式输入; 2、具体的输入和输出格式不限; 3、算法要具有较好的健壮性,对错误操作要做适当处理; 4、程序算法作简短的文字注释。 四、程序实现及结果: 1、邻接矩阵: #include #include #define VERTEX_MAX 30 #define MAXSIZE 20 typedef struct { int arcs[VERTEX_MAX][VERTEX_MAX] ; int vexnum,arcnum; } MGraph; void creat_MGraph1(MGraph *g) { int i,j,k; int n,m; printf("请输入顶点数和边数:"); scanf("%d%d",&n,&m); g->vexnum=n; g->arcnum=m; for (i=0;iarcs[i][j]=0;

淮海工学院操作系统期末试卷整理

淮海工学院 11 - 12 学年第 1 学期操作系统原理试卷(B闭卷) 10 - 11 学年第 1 学期操作系统原理试卷(A闭卷) 一、单项选择题(本大题含20小题,每小题1分,共计20分) 1、操作系统是对( C)进行管理的软件。 A、软件 B、硬件 C、计算机资源 D、应用程序 2、在进程管理中,当( B )时,进程从运行状态变为就绪状态。 A、进程被调度程序选中 B、时间片用完 C、等待某一事件发生 D、等待的事件发生 3、银行家算法在解决死锁问题中是用于(A)的 A、预防死锁 B、避免死锁 C、检测死锁 D、解除死锁 4、下列步骤中( D )不是创建进程所必须的。 A、建立一个进程控制块 B、为进程分配内存 C、将其控制块插入就绪队列中 D、为进程分配CPU 5、文件系统中用(C)来管理文件。 A、作业控制块 B、外页表 C、目录 D、软硬件结合的办法 6、( D )算法是设备分配常用的一种算法。 A、短作业优先 B、最佳适应 C、首次适应 D、先来先服务 7、多道程序环境下,操作系统分配资源以( C )为基本单位。 A、程序 B、指令 C、进程 D、作业 8、在分时系统中,若当前运行的进程连续获得了两个时间片,原因可能是( B) A、该进程的优先级最高 B、就绪队列为空 C、该进程最早进入就绪队列 D、该进程是一个短进程 9、在操作系统中,用户程序申请使用I/O设备时,通常采用( B )。 A、物理设备名 B、逻辑设备名 C、虚拟设备名 D、独占设备名 10、设3个目标模块A、B、C,起始地址都是0,长度分别是L、M、N,这3个模块按A、B、C顺序采用静态链接方式链接在一起后,模块C的起始地址变换为( A )。 A、L+M B、L+M+N C、L+M-1 D、M+N 11、操作系统最重要的特征是( A )。 A、并发性 B、共享性 C、虚拟性 D、异步性 12、以时间换空间的技术是( B)。 A.分时技术 B.虚拟存储技术 C.并发技术 D.缓冲技术 13、某计算机系统中有8台打印机,有K个进程竞争使用,每个进程最多需要3 台打印机。该系统可能会发生死锁的K的最小值是(C )。 A、2 B、3 C、4 D、5 14、虚存指的是( B )。 A、提高运算速度的设备 B、进程的地址空间及其内存扩充方法 C、容量扩大了的内存 D、实际不存在的存储器 15、在页面置换算法中,可能引起Belady现象的是( A )。 A、FIFO B、LRU C、OPT D、CLOCK 16、在一般大型计算机系统中,主机对外设的控制可通过通道、设备控制器和设备 这三个层次来实现,下面的叙述中正确的是( C)。 A、通道和控制器分别控制设备 B、控制器可控制通道,设备在通道的控制下工作 C、通道控制控制器,设备在控制器控制下工作 D、控制器控制通道和设备工作 17、( B)是解决进程间同步与互斥的一对低级通信原语。 A、lock和unlock B、P和V C、W和S D、send和receive 18、动态重定位技术依赖于( B )。 A、重定位装入程序 B、重定位寄存器 C、地址结构 D、目标程序 19、临界区是指并发进程中共享临界资源的(C) A、内存区 B、数据区段 C、程序区段 D、管理信息 20、在SPOOLING系统中,用户进程实际分配得到的是( B)。 A、用户所要求的外设 B、内存区,即虚拟设备 C、设备的一部分存储区 D、设备的一部分空间 1.操作系统是一组( C ) A.应用程序 B.实用程序 C.资源管理程序 D.都对 2.利用P、V操作控制临界区的使用。当有N个进程希望进入临界区时,对应信号量的最大取值范围可能是( C )。 A.1~-1 B.-1~1 C.1~1-N D.-N~N-1 3.下列进程调度算法中,综合考虑了进程等待时间和执行时间的是(D) A.FCFS B.SPF C.RR D.HRN 4.在操作系统中,用户在使用I/O设备时,通常采用( B)。 1

淮海工学院计算机网络实验一实验报告

淮海工学院计算机工程学 院 实验报告书 课程名:计算机网络 题目:实验1 网络认识实验 班级: 学号: 姓名:

一.实验目的与要求 1、通过实验了解主要的网卡、网络连接头、网络传输介质、常见网络设备的特性; 2、初步掌握网卡的安装、各种参数、协议的设置。 二.实验内容或题目 1、参观网络管理实验室,了解和认识网卡、网络连接头、传输线缆、集线器、交换机、路由器、服务器; 2、按照学校校园网环境,基本学会网卡的安装与配置。 三.实验步骤与源程序 1、介绍构建小型局域网的基本步骤; 2、观看各类网卡,介绍网卡的基本功能、分类方法(按总线标准、协议标准、传输速率等分类); 3、观看常见的网络连接头,重点介绍RJ-45连接头及其A标、B标的制作; 附 4 和光纤的特性; 5、观看常见的网络设备,主要介绍集线器Hub、交换机和路由器的功能与特性; 6、动手安装网卡,并Windows 2000环境中安装网卡驱动程序,根据校园网和实验室的环境与管理规定,配置网卡参数(如静态IP地址,网关路由、DNS服务器等) 四.测试数据与实验结果 1、介绍构建小型局域网的基本步骤: 构建局域网的准备工作:①选择合适的组网方式—总线型网络,交叉双绞线,星型网络。 ②组网设备—集线器,网卡,网线,RJ-45水晶头③电脑选购④局域网络设置⑤局域网络的IP地址的设置。通信介质,网卡,modem,路由器等;根据相关配套接口连接计算机,实现网络通信。设置IP地址,设置在同一网段且不能重复,设置方法如下:打开控制面板——网络连接——右键“无线网络连接”——属性——Internet协议。回到“无线网络连接”属性的界面,点击“无线网络配置”——高级,选择“仅计算机到计算机”。以上2步在每台电脑上都要进行。选择一台机器作为服务器。在无线网络配置页面点击添加。为了局域网的安全,在弹出页面中将"自动为我提供此密钥"前的对勾去掉.然后设置SSID号以及网络密钥,点击确定之后服务器的设置就已完成。在另几台台机器上搜索无线信号,双击所搜索到的信号,在弹出页面内输入您所设置的密钥后即可完成连接。 2、网卡 通信适配器或网络接口卡NIC,简称网卡,装有处理器和存储器。网卡实现工作站与局域网传输介质之间的物理连接和电信号匹配,接收和执行工作站与服务器送来的各种控制命令,完成物理层的功能。

数据结构实验十一:图实验

一,实验题目 实验十一:图实验 采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径。 二,问题分析 本程序要求采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径,完成这些操作需要解决的关键问题是:用邻接表的形式存储有向图并输出该邻接表。用一个函数实现判断任意两点间是否存在路径。 1,数据的输入形式和输入值的范围:输入的图的结点均为整型。 2,结果的输出形式:输出的是两结点间是否存在路径的情况。 3,测试数据:输入的图的结点个数为:4 输入的图的边得个数为:3 边的信息为:1 2,2 3,3 1 三,概要设计 (1)为了实现上述程序的功能,需要: A,用邻接表的方式构建图 B,深度优先遍历该图的结点 C,判断任意两结点间是否存在路径 (2)本程序包含6个函数: a,主函数main() b,用邻接表建立图函数create_adjlistgraph() c,深度优先搜索遍历函数dfs() d,初始化遍历数组并判断有无通路函数dfs_trave() e,输出邻接表函数print() f,释放邻接表结点空间函数freealgraph() 各函数间关系如右图所示: 四,详细设计 (1)邻接表中的结点类型定义:

typedef struct arcnode{ int adjvex; arcnode *nextarc; }arcnode; (2)邻接表中头结点的类型定义: typedef struct{ char vexdata; arcnode *firstarc; }adjlist; (3)邻接表类型定义: typedef struct{ adjlist vextices[max]; int vexnum,arcnum; }algraph; (4)深度优先搜索遍历函数伪代码: int dfs(algraph *alg,int i,int n){ arcnode *p; visited[i]=1; p=alg->vextices[i].firstarc; while(p!=NULL) { if(visited[p->adjvex]==0){ if(p->adjvex==n) {flag=1; } dfs(alg,p->adjvex,n); if(flag==1) return 1; } p=p->nextarc; } return 0; } (5)初始化遍历数组并判断有无通路函数伪代码: void dfs_trave(algraph *alg,int x,int y){ int i; for(i=0;i<=alg->vexnum;i++) visited[i]=0; dfs(alg,x,y); } 五,源代码 #include "stdio.h" #include "stdlib.h" #include "malloc.h" #define max 100 typedef struct arcnode{ //定义邻接表中的结点类型 int adjvex; //定点信息 arcnode *nextarc; //指向下一个结点的指针nextarc }arcnode; typedef struct{ //定义邻接表中头结点的类型 char vexdata; //头结点的序号 arcnode *firstarc; //定义一个arcnode型指针指向头结点所对应的下一个结点}adjlist; typedef struct{ //定义邻接表类型 adjlist vextices[max]; //定义表头结点数组

数据结构实验---图的储存与遍历

数据结构实验---图的储存与遍历

学号: 姓名: 实验日期: 2016.1.7 实验名称: 图的存贮与遍历 一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 V0 V1 V2 V3 V4 三、附录: 在此贴上调试好的程序。 #include #include #include V0 V1 V4 V3 V2 ??? ? ??? ? ????????=010000000101010 1000100010A 1 0 1 0 3 3 4

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

淮海工学院数据库原理及技术复习题及答案

《数据库原理与技术》复习题及参考答案 一、填空 1.关系代数运算中,运算对象为两个关系的运算有并、_________、_________、 ___________、_____________等。运算对象为一个的有_______、_______等。2.常用的关系运算是_____________与_________________。 3.SQL的标准库函数有_________、_________、_________等,其中不允许直接出现在查询Where子句中的有_________、_________。 4、数据库具有数据结构化、_____________与_________________等特点。 5、数据模型包括数据结构、_____________与_________________。 6.数据库系统包括计算机硬件、_____________、____________、____________等 7.数据库的数据控制功能包括安全性、_________、_________等控制功能。 8..目前主要的关系数据库管理系统有ORACLE、____________、___________、 ___________等,用于数据库应用系统的开发工具主要有VB、____________、 ___________等。 9.数据库设计主要包括需求分析、____________、___________、___________、运行维护等步骤。 10.数据库系统主要包括关系、____________、___________等类型的系统。 二、选择题:选取最满意的一个答案任何由三个属性组成的关系可能是() (A) 1NF (B) 2NF (C) 3NF (D) 不能判定 2.数据冗余引起的问题主要是花费() (A) 时间(B) 空间(C) 时间与空间(D) 时间或空间 3.R(X,Y,Z)是个三元关系,X,Y,Z是单属性且X是码,则R一定是()(A) 1NF (B) 2NF (C) 3NF (D) BCNF 4.在数据库中,存储冗余数据是( ) (A)不应该的(B) 应该且合理的(C) 合理的但不能过度冗余(D)视情况而定 5.在关系运算中,进行自然联接运算的两个关系() (A) 必有相同的列名(B)必有相同的关键字(C)没有要求(D)必有类型相同的列 6.在数据库系统中,DBMS与DB的关系是() (A) DBMS包括DB(B) DB包括DB MS (C)不一定的(D) 同级关系

数据库实验5实验报告

淮海工学院计算机工程学院实验报告书 课程名:《数据库原理及应用》 题目:数据库的完整性 班级:软件132 学号:2013122907 姓名:莹莹

一.目的与要求 1.掌握索引创建和删除的方法; 2.掌握创建视图和使用视图的方法; 3.掌握完整性约束的定义方法,包括primary key、foreign key等。 二.实验容 1.基于前面建立的factory数据库,使用T-SQL语句在worker表的“部门号”列上创建一个非聚集索引,若该索引已经存在,则删除后重建。 2.在salary表的“职工号”和“日期”列创建聚集索引,并且强制唯一性。 3.建立视图view1,查询所有职工的职工号、、部门名和2004年2月工资,并按部门名顺序排列。 4.建立视图view2,查询所有职工的职工号、和平均工资; 5.建立视图view3,查询各部门名和该部门的所有职工平均工资; 6.显示视图view3的定义; 7.实施worker表的“性别”列默认值为“男”的约束; 8.实施salary表的“工资”列值限定在0~9999的约束; 9.实施depart表的“部门号”列值唯一的非聚集索引的约束; 10.为worker表建立外键“部门号”,参考表depart的“部门号”列。 11.建立一个规则sex:性别=’男’ OR 性别=’女’,将其绑定到“性别”上; 12.删除上面第7、8、9和10建立的约束; 13.解除第11题所建立的绑定并删除规则sex。 三.实验步骤 1 USE factory GO --判断是否存在depno索引;若存在,则删除之 IF EXISTS(SELECT name FROM sysindexes WHERE name='depno') DROP INDEX worker.depno GO --创建depno索引 CREATE INDEX depno ON worker(部门号) GO EXEC sp_helpindex worker GO 2 USE factory GO --判断是否存在no_date索引;若存在,则删除之 IF EXISTS(SELECT name FROM sysindexes WHERE name='no_date') DROP INDEX salary.no_date GO --创建no_date索引

数据结构图的遍历

#include"stdlib.h" #include"stdio.h" #include"malloc.h" #define INFINITY 32767 #define MAX_VERTEX_NUM 20 typedef enum{FALSE,TRUE}visited_hc; typedef enum{DG,DN,UDG,UDN}graphkind_hc; typedef struct arccell_hc {int adj; int*info; }arccell_hc,adjmatrix_hc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct {char vexs[MAX_VERTEX_NUM]; adjmatrix_hc arcs; int vexnum,arcnum; graphkind_hc kind; }mgraph_hc; typedef struct arcnode_hc {int adjvex; struct arcnode_hc *nextarc; int*info; }arcnode_hc; typedef struct vnode_hc {char data; arcnode_hc *firstarc; }vnode_hc,adjlist_hc[MAX_VERTEX_NUM]; typedef struct {adjlist_hc vertices; int vexnum,arcnum; graphkind_hc kind; }algraph_hc; int locatevex_hc(mgraph_hc*g,char v) {int i,k=0; for(i=0;ivexnum;i++) if(g->vexs[i]==v){k=i;i=g->vexnum;} return(k);}

淮海工学院数据结构第一次实验报告

淮海工学院计算机科学系实验报告书 课程名:《数据结构》 题目: 线性数据结构试验 班级:软嵌151 学号:2015123352 姓名: 韩吉

线性表实验报告要求 1目得与要求: 1)掌握线性表数据结构得基本概念与抽象数据类型描述; 2)熟练掌握线性表数据结构得顺序与链式存储存表示; 3)熟练掌握线性表顺序存储结构得基本操作算法实现; 4)熟练掌握线性表得链式存储结构得基本操作算法实现; 5)掌握线性表在实际问题中得应用与基本编程技巧; 6)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结 果); 7)按照报告格式与内容要求,认真书写实验报告,并于下周周二前统一提交实验报告电子版文档(每次实验全体同学必须提交实验报告电子版,实验报告文档文件命名方式:姓名+学号+数据结构第X次实验报告)提交给学委,而后由学委以班为单位统一打包(包文件名为:软件14X班-数据结构第X次实验报告)用邮件发给老师;提交纸质报告(每班每次收5份,学委安排,保证每学期每个同学至少提交一次)一起提交给老师。每次提交电子文档时,学委务必统计与上报未交报告人数与具体姓名;凡逾期不交报告者,不再推迟提交,一律按照旷交处理。 8)积极开展实验组组内交流与辅导,严禁直接复制与剽窃她人实验成果,一旦发现严肃处理; 9)上实验课前,要求每个同学基本写好程序,并存储在自己得U盘上,用于实验课堂操作时调试与运行. 2实验内容或题目(在一个主程序中实现全部题目内容) 一、顺序表得基本操作实现实验 要求:数据元素类型ElemType取整型int.按照顺序存储结构实现如下算法: 1)创建任意整数线性表(即线性表得元素值随机在键盘上输入)得顺序存储结构(即顺序表),长度限定在25之内; 2)打印/显示(遍历)该线性表(依次打印/显示出表中元素值); 3)在顺序表中查找第i个元素,并返回其值; 4)在顺序表第i个元素之前插入一已知元素; 5)在顺序表中删除第i个元素; 6)求顺序表中所有元素值(整数)之与; 二、链表(带头结点)基本操作实验 要求:数据元素类型ElemType取字符型char。按照动态单链表结构实现如下算法: 1)按照头插法或尾插法创建一个带头结点得字符型单链表(链表得字符元素从键盘输入),长度限定 在10之内;

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #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 MGraph.cpp #include using namespace std; #include "MGraph.h" 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; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

数据结构课程设计之图的遍历和生成树求解

##大学 数据结构课程设计报告题目:图的遍历和生成树求解 院(系):计算机工程学院 学生: 班级:学号: 起迄日期: 2011.6.20 指导教师:

2010—2011年度第 2 学期 一、需求分析 1.问题描述: 图的遍历和生成树求解实现 图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(及其孩子结点)相关但只能和上一层中一个元素(即双亲结点)相关;而在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 生成树求解主要利用普利姆和克雷斯特算法求解最小生成树,只有强连通图才有生成树。 2.基本功能 1) 先任意创建一个图; 2) 图的DFS,BFS的递归和非递归算法的实现 3) 最小生成树(两个算法)的实现,求连通分量的实现 4) 要求用邻接矩阵、邻接表等多种结构存储实现 3.输入输出

输入数据类型为整型和字符型,输出为整型和字符 二、概要设计 1.设计思路: a.图的邻接矩阵存储:根据所建无向图的结点数n,建立n*n的矩阵,其中元素全是无穷大(int_max),再将边的信息存到数组中。其中无权图的边用1表示,无边用0表示;有全图的边为权值表示,无边用∞表示。 b.图的邻接表存储:将信息通过邻接矩阵转换到邻接表中,即将邻接矩阵的每一行都转成链表的形式将有边的结点进行存储。 c.图的广度优先遍历:假设从图中的某个顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后再访问此邻接点的未被访问的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中还有未被访问的,则另选未被访问的重复以上步骤,是一个非递归过程。 d.图的深度优先遍历:假设从图中某顶点v出发,依依次访问v的邻接顶点,然后再继续访问这个邻接点的系一个邻接点,如此重复,直至所有的点都被访问,这是个递归的过程。 e.图的连通分量:这是对一个非强连通图的遍历,从多个结点出发进行搜索,而每一次从一个新的起始点出发进行搜索过程中得到的顶点访问序列恰为其连通分量的顶点集。本程序利用的图的深度优先遍历算法。 2.数据结构设计: ADT Queue{ 数据对象:D={a i | a i ∈ElemSet,i=1,2,3……,n,n≥0} 数据关系:R1={| a i-1 ,a i ∈D,i=1,2,3,……,n} 基本操作: InitQueue(&Q) 操作结果:构造一个空队列Q。 QueueEmpty(Q) 初始条件:Q为非空队列。 操作结果:若Q为空队列,则返回真,否则为假。 EnQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:插入元素e为Q的新的队尾元素。 DeQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:删除Q的队头元素,并用e返回其值。}ADT Queue

数据结构实验

实验1 (C语言补充实验) 有顺序表A和B,其元素值均按从小到大的升序排列,要求将它们合并成一 个顺序表C,且C的元素也是从小到大的升序排列。 #include main() { intn,m,i=0,j=0,k=0,a[5],b[5],c[10];/* 必须设个m做为数组的输入的计数器,不能用i ,不然进行到while 时i 直接为5*/ for(m=0;m<=4;m++)scanf("%d",&a[m]);// 输入数组a for(m=0;m<=4;m++)scanf("%d",&b[m]);// 输入数组b while(i<5&&j<5) {if(a[i]b[j]){c[k]=b[j];k++;j++;} else{c[k]=a[i];k++;i++;j++;}// 使输入的两组数组中相同的数只输出一 个 } if(i<5) for(n=i;n<5;n++) {c[k]=a[n];k++;} elseif(j<5) for(n=j;n<5;n++) {c[k]=b[n];k++;} for(i=0;i

求A QB #include main() { inti,j,k=0,a[5],b[5],c[5];//A=a[5],B=b[5],A n B=c[5] for(i=0;i<5;i++)scanf("%d",&a[i]);// 输入a 数组 for(i=0;i<5;i++)scanf("%d",&b[i]);〃输入b 数组 for(i=0;i<5;i++) {for(j=0;j<5;j++) if(a[i]==b[j]){c[k]=a[i];k++;}// 当有元素重复时,只取一个放入 c 中} for(i=0;i #defineN4 main() { inti,j,m,k,a[N+1];//k 为最后输出数组的长度变量

数据结构 图的存储、遍历与应用 源代码

实验四图的存储、遍历与应用姓名:班级: 学号:日期:一、实验目的: 二、实验内容: 三、基本思想,原理和算法描述:

四、源程序: (1)邻接矩阵的存储: #include #include #define INFINITY 10000 //定义最大值无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef int AdjMatrix[MAX_VERTEX_NUM ][MAX_VERTEX_NUM ]; typedef struct{ int vexs[MAX_VERTEX_NUM ]; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧或边数 }MGraph; void CreatGragh(MGraph G) //用邻接矩阵构造图 { int i,j,k,w; printf("请输入顶点个数和边数:\n"); scanf("%d %d",&G.vexnum,&G.arcnum); printf("请按顺序输入顶点中间用‘空格’间隔\n"); for(i=0;i #include

相关文档
最新文档