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

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

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

课程名:《数据结构》

题目:线性数据结构试验

班级:软嵌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之内;

2)打印(遍历)该链表(依次打印出表中元素值,注意字符的输入顺序与链表的结点顺序);3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;

4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;

5)在链表中第i个结点之前插入一个新结点;

6)在线性表中删除第i个结点;

7)计算链表的长度。

3实验步骤与源程序

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#define OK 1

#define ERROR 0

#define TURE 1

#define FALSE 0

#define ElemType int

#define MAXSIZE 25

typedef struct

{

ElemType elem[MAXSIZE];

int last;

}SeqList;

int GetData(SeqList *L,int i)

{

return L->elem[i-1];

}

int InsList(SeqList *L,int i,ElemType e)

{

int k;

if((i<1)||(i>L->last+2))

{

printf("插入位置i值不合法!");

return(ERROR);

}

if(L->last>=MAXSIZE-1)

{

printf("超出了链表的最大范围,无法插入无法插入!");

return(ERROR);

}

for(k=L->last;k>=i-1;k--)

L->elem[k+1]=L->elem[k];

L->elem[i-1]=e;

L->last++;

return(OK);

}

int DelList(SeqList *L,int i,ElemType *e)

{

int k;

if((i<1)||(i>L->last+1))

{

printf("删除位置不在表中,不合法!");

return(ERROR);

}

*e=L->elem[i-1];

for(k=i;k<=L->last;k++)

L->elem[k-1]=L->elem[k];

L->last--;

return(OK);

}

int SumList(SeqList *L)

{

int sum=0;

for(int i=0;i<=L->last;i++)

{

sum+=L->elem[i];

}

return(sum);

}

void main()

{

SeqList *l;

int p; //要查找的位置

int *q;

int r; //线性表的长度

int t; //插入的元素

int s; //删除的位置

int w; //要插入的位置

int i;

l=(SeqList *)malloc(sizeof(SeqList));

q=(int*)malloc(sizeof(int));

printf("请输入线性表的长度:");

scanf("%d",&r);

l->last=r-1;

printf("请输入线性表中的各元素值:\n");

for(i=0;i<=l->last;i++)

{

scanf("%d",&l->elem[i]);

}

printf("线性表中所有元素之和是:%d\n",SumList(l));

printf("请输入要查找的位置: ");

scanf("%d",&p);

printf("查找的元素是:%d\n",GetData(l,p));

printf("请输入要插入的位置:");

scanf("%d",&w);

printf("插入的元素是: ");

scanf("%d",&t);

InsList(l,p,t);

printf("插入后的线性表:\n");

for(i=0;i<=l->last;i++)

{

printf("%d ",l->elem[i]);

}

printf("\n");

printf("请输入要删除的位置:");

scanf("%d",&s);

DelList(l,s,q);

printf("删除的元素值是:%d\n",*q);

printf("删除后的线性表:\n");

for(i=0;i<=l->last;i++)

{

printf("%d ",l->elem[i]);

}

}

// 数据结构第二题.cpp : Defines the entry point for the console application. //

#include

#include

#include

#define OK 1

#define ERROR 0

#define TURE 1

#define FALSE 0

typedef char ElemType;

typedef struct Node

{

ElemType data;

struct Node*next;

}Node,*LinkList;

void CreateTail(LinkList L);

int DelList(LinkList L,int i,ElemType e); void Get(LinkList L,int i);

void InitList(LinkList *l);

int InsList(LinkList L,int i,ElemType e); int ListLength(LinkList L);

void Locate(LinkList L,ElemType e);

void main()

{

LinkList k;

int m; //要查找的序号

int n; //要插入的位置

数据结构实验报告格式

《数据结构课程实验》大纲 一、《数据结构课程实验》的地位与作用 “数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: (1)内容丰富,学习量大,给学习带来困难; (2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。 根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。实验学时为18。 二、《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 三、《数据结构课程实验》内容 课程实验共18学时,要求完成以下六个题目: 实习一约瑟夫环问题(2学时)

淮海工学院操作系统期末考试试题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 .实验目的 (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 始终指向生成的单链表的最后一个节点

数据结构实验报告

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

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

淮海工学院 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,简称网卡,装有处理器和存储器。网卡实现工作站与局域网传输介质之间的物理连接和电信号匹配,接收和执行工作站与服务器送来的各种控制命令,完成物理层的功能。

数据结构实验报告完整

华北电力大学 实验报告| | 实验名称数据结构实验 课程名称数据结构 | | 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:2015/7/3

实验报告说明: 本次实验报告共包含六个实验,分别为:简易停车场管理、约瑟夫环(基于链表和数组)、二叉树的建立和三种遍历、图的建立和两种遍历、hash-telbook和公司招工系统。 编译环境:visual studio 2010 使用语言:C++ 所有程序经调试均能正常运行 实验目录 实验一约瑟夫环(基于链表和数组) 实验二简易停车场管理 实验三二叉树的建立和三种遍历 实验四图的建立和两种遍历 实验五哈希表的设计

实验一:约瑟夫环 一、实验目的 1.熟悉循环链表的定义和有关操作。 二、实验要求 1.认真阅读和掌握实验内容。 2.用循环链表解决约瑟夫问题。 3.输入和运行编出的相关操作的程序。 4.保存程序运行结果 , 并结合输入数据进行分析。 三、所用仪器设备 1.PC机。 2.Microsoft Visual C++运行环境。 四、实验原理 1.约瑟夫问题解决方案: 用两个指针分别指向链表开头和下一个,两指针依次挪动,符合题意就输出结点数据,在调整指针,删掉该结点。 五、代码 1、基于链表 #include using namespace std; struct Node { int data; Node* next; }; void main() { int m,n,j=1; cout<<"请输入m的值:";cin>>m; cout<<"请输入n的值:";cin>>n; Node* head=NULL; Node* s=new Node; for(int i=1;i<=n;i++) { Node* p=new Node; p->data=n+1-i;

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

《数据库原理与技术》复习题及参考答案 一、填空 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索引

数据结构实验报告模板

2009级数据结构实验报告 实验名称:约瑟夫问题 学生姓名:李凯 班级:21班 班内序号:06 学号:09210609 日期:2010年11月5日 1.实验要求 1)功能描述:有n个人围城一个圆圈,给任意一个正整数m,从第一个人开始依次报数,数到m时则第m个人出列,重复进行,直到所有人均出列为止。请输出n个人的出列顺序。 2)输入描述:从源文件中读取。 输出描述:依次从显示屏上输出出列顺序。 2. 程序分析 1)存储结构的选择 单循环链表 2)链表的ADT定义 ADT List{ 数据对象:D={a i|a i∈ElemSet,i=1,2,3,…n,n≧0} 数据关系:R={< a i-1, a i>| a i-1 ,a i∈D,i=1,2,3,4….,n} 基本操作: ListInit(&L);//构造一个空的单链表表L ListEmpty(L); //判断单链表L是否是空表,若是,则返回1,否则返回0. ListLength(L); //求单链表L的长度 GetElem(L,i);//返回链表L中第i个数据元素的值; ListSort(LinkList&List) //单链表排序 ListClear(&L); //将单链表L中的所有元素删除,使单链表变为空表 ListDestroy(&L);//将单链表销毁 }ADT List 其他函数: 主函数; 结点类; 约瑟夫函数 2.1 存储结构

[内容要求] 1、存储结构:顺序表、单链表或其他存储结构,需要画示意图,可参考书上P59 页图2-9 2.2 关键算法分析 结点类: template class CirList;//声明单链表类 template class ListNode{//结点类定义; friend class CirList;//声明链表类LinkList为友元类; Type data;//结点的数据域; ListNode*next;//结点的指针域; public: ListNode():next(NULL){}//默认构造函数; ListNode(const Type &e):data(e),next(NULL){}//构造函数 Type & GetNodeData(){return data;}//返回结点的数据值; ListNode*GetNodePtr(){return next;}//返回结点的指针域的值; void SetNodeData(Type&e){data=e;}//设置结点的数据值; void SetNodePtr(ListNode*ptr){next=ptr;} //设置结点的指针值; }; 单循环链表类: templateclass CirList { ListNode*head;//循环链表头指针 public: CirList(){head=new ListNode();head->next=head;}//构造函数,建立带头节点的空循环链表 ~CirList(){CirListClear();delete head;}//析构函数,删除循环链表 void Clear();//将线性链表置为空表 void AddElem(Type &e);//添加元素 ListNode *GetElem(int i)const;//返回单链表第i个结点的地址 void CirListClear();//将循环链表置为空表 int Length()const;//求线性链表的长度 ListNode*ListNextElem(ListNode*p=NULL);//返回循环链表p指针指向节点的直接后继,若不输入参数,则返回头指针 ListNode*CirListRemove(ListNode*p);//在循环链表中删除p指针指向节点的直接后继,且将其地址通过函数值返回 CirList&operator=(CirList&List);//重载赋

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

淮海工学院计算机科学系实验报告书 课程名:《数据结构》 题目: 线性数据结构试验 班级:软嵌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++) {

淮海工学院数据库设计习题课(1)

1.设某商业数据库中有3个实体集:一是“仓库”实体集,属性有仓库号、仓库名和地址等;二是“商店”实体集,属性有商店号、商店名、地址等;三是“商品”实体集,属性有商品号、商品名、单价。仓库与商品之间存在着“库存”联系,每个仓库可存储若干商品,每种商品存储在若干仓库中,每个仓库存储一 种商品有个日期及存储量;商店与商品之间存在着“销售”联系,每个商店可销售若干商品,每种商品可在若干商店里销售,每个商店销售一种商品有月份和月销售量两个属性;仓库、商店、商品之间存在着“供应”联系,有月份和月供应量两个属性。 ⑴画出ER图,并在图上注明属性、联系类型、实体标识符。 ⑵将ER图转换成关系模型,并指明各表的主键和外键。 解: ER图可转换为6个关系模式: 仓库(仓库号,仓库名,地址) 商品(商品号,商品名,单价) 商店(商店号,商店名,地址) 库存(仓库号,商品号,日期,库存量),外键是仓库号、商品号 销售(商店号,商品号,月份,月销售量),外键是商店号、商品号 供应(仓库号,商店号,商品号,月份,月供应量),外键是仓库号、商店号、商品号 2. 设工厂有三个实体集。一是“产品”实体集,属性有产品编号、产品名称、性能参数;二是“零件”实体集,属性有零件号、零件名、规格;三是“材料”实体集,属性有材料编号、材料名。设产品与零件之间有“组成”联系,每件产品可由多种零件组成,但每种零件也可以组成多个产品,组成要有零件数;零件与材料之间“消耗”联系,每种零件消耗一种材料,一种材料可供多种零件消耗,消耗要有消耗量; (1)试画出E-R图,并在图上注明属性、联系类型、实体标识符。 (2)将E-R图转换成关系模型,并说明主键和外键。

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

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

图实验 一,邻接矩阵的实现 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; } } template void MGraph::DFSTraverse(int v) { cout << vertex[v]; visited[v] = 1; for(int j = 0; j < vertexNum; j++) if(arc[v][j] == 1 && visited[j] == 0) DFSTraverse(j); } template void MGraph::BFSTraverse(int v) { int Q[MaxSize]; int front = -1, rear = -1; cout << vertex[v]; visited[v] = 1; Q[++rear] = v; while(front != rear) { v = Q[++front]; for(int j = 0;j < vertexNum; j++) if(arc[v][j] == 1 && visited[j] == 0){ cout << vertex[j]; visited[j] = 1;

数据结构实验报告

数据结构实验报告 第 6 次实验 学号:20141060106 姓名:叶佳伟 一、实验目的 1、复习图的逻辑结构、存储结构及基本操作; 2、掌握邻接矩阵、邻接表及图的创建、遍历; 3、了解图的应用。 二、实验内容 1、(必做题)假设图中数据元素类型是字符型,请采用邻接矩阵或邻接表实现图的以下基本操作: ( 1)构造图(包括有向图、有向网、无向图、无向网); ( 2)根据深度优先遍历图; ( 3)根据广度优先遍历图。 三、算法描述 (采用自然语言描述) 四、详细设计 (画出程序流程图) 五、程序代码 (给出必要注释) #include #include #include #include #include #define INFINITY 255678 /*赋初值用*/ #define MAX_VERTEX_NUM 20 /* 最大顶点个数*/ enum {DG, DN, UDG, UDN}; typedef struct ArcCell {

int adj;/*顶点关系类型,对无权图,用1(是)或0(否)表示相邻否;对带权图,则为权值*/ char *info;/*弧相关信息指针*/ }AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char vexs[MAX_VERTEX_NUM][5];/*顶点向量*/ AdjMatrix arcs; /*邻接矩阵*/ int vexnum, arcnum;/*图的当前顶点数和弧数*/ int kind; }MGraph; void CreateDG(MGraph *G); void CreateDN(MGraph *G); void CreateUDG(MGraph *G); void CreateUDN(MGraph *G); int LocateVex(MGraph *G, char v[]); void print(MGraph *G); int main(void) { MGraph *G; G = (MGraph *)malloc(sizeof(MGraph)); printf("请选者0-有向图,1-有向网,2-无向图,3-无向网: "); scanf("%d", &G->kind); switch(G->kind) { case DG : CreateDG(G); print(G); break; case DN : CreateDN(G); print(G); break; case UDG : CreateUDG(G); print(G); break; case UDN : CreateUDN(G);

相关文档
最新文档