《数据结构与数据库》实验指导书.docx
《《数据结构与数据库》实验指导书.docx》由会员分享,可在线阅读,更多相关《《数据结构与数据库》实验指导书.docx(21页珍藏版)》请在冰豆网上搜索。
《数据结构与数据库》实验指导书
《数据结构与数据库》
实验指导书
莫建清编写
适用专业:
数字媒体
广东工业大学机电工程学院
2009年6月
前言
“数据结构与数据库”是数字媒体专业的一门重要的专业基础课。
通过学习本课程,使学生掌握各种常用的数据结构,提高学生阅读、设计程序的能力。
要求学生能够从逻辑结构、存储结构和数据的运算三个方面去掌握各种数据结构的特性;能够针对具体的应用问题,选择合适的数据结构设计出结构清晰、正确有效的算法。
通过学习本课程,使学生掌握数据库设计思想,以及使用小型数据库管理系统完成基本的数据操作。
要求学生了解数据库系统的基本概念和发展方向,学会使用数据库语言,了解关系数据理论、掌握数据库设计和数据库管理系统方面的知识。
为了使学生更好地理解和深刻地把握这些知识,开设了“数据结构与数据库实验”,该实验是“数据结构与数据库”理论教学课程的重要组成部分。
通过实验可以使学生进一步理解问题、数据结构及算法、程序设计三者之间的关系,并为后续课程的学习和实验打下良好的基础。
掌握好这门课程的内容,是学习计算机其他相关课程的必备条件,也为今后从事软件的开发和设计打好基础。
通过实验可以使学生学会使用小型数据库管理系统完成基本的数据操作。
本课程一共设置了七个实验项目,包括:
顺序表的操作、单链表的操作、栈和队列的运算、二叉树操作、图的运算、数据库模式设计与建立和数据更新及查询。
其中“数据库模式设计与建立”是设计性实验。
项目一:
顺序表的操作:
掌握顺序表的建立、删除和插入操作以及有序表的合并的相关算法,熟悉VC++6.0的使用。
项目二:
单链表的操作:
掌握单链表的建立、删除和插入操作以及有序表的合并的相关算法。
项目三:
栈和队列的运算:
掌握出栈、入栈运算、队列初始化、出队和入队等运算的实现,初步掌握栈和队列的应用。
项目四:
二叉树操作:
掌握二叉树建立、前序遍历、中序遍历和后序遍历的方法。
项目五:
图的运算:
理解图的主要存储结构,掌握图的建立、图的深度优先和广度优先遍历,从单个源点到各个顶点的最小路径的相关算法。
项目六:
数据库模式设计与建立:
学会基于实际问题的数据库的模式设计,并且能够掌握在DBMS上建立数据表等操作方法。
项目七:
数据更新及查询:
熟练掌握表记录的插入、修改和删除,表记录的显示以及记录的定位等操作;掌握顺序查询和索引查询的基本方法。
本指导书与指定教材配套使用,对实验的内容、实验步骤和实验的要求等作了较为详细的描述。
目录
实验一顺序表的操作…………………………………………1
实验二单链表的操作…………………………………………7
实验三栈和队列的运算…………………………………………10
实验四二叉树操作……………………………………………12
实验五图的运算………………………………………………15
实验六数据库模式设计与建立………………………………18
实验七数据更新及查询………………………………………20
主要参考文献……………………………………………………22
实验一:
顺序表的操作
实验学时:
2
实验类型:
验证
实验要求:
必修
一、实验目的
1、熟悉VC++环境下多文件的输入、编辑、调试和运行的全过程。
2、掌握线性表的顺序存储结构,以及在顺序存储结构上的基本操作和运算,包括插入、删除、查找,以及线性表合并等。
二、实验内容
顺序存储结构上线性表基本操作的实现
(一)全局变量的定义:
该部分由学生完成。
(二)线性表的顺序存储结构的定义:
typedefstruct{
DataType*elem;
/*线性表的首地址,注意DataType为一抽象数据类型,编译前应用实际类型代替,以下同*/
intlength;/*线性表的当前长度*/
intlistsize;/*线性表的最大长度*/
}SeqList;
(三)操作算法的实现
1.初始化
intInitSeqList(SeqList*L)
{
L->elem=(DataType*)malloc(LIST_INITSIZE*sizeof(ElemType));
L->length=0;
L->listsize=LIST_INITSIZE;
return1;
}
2.插入运算
intInsertSeqList(SqList*L,inti,DataTypee)
{
/*插入位置i,插入元素e*/
intj;
if(L->length==L->listsize)
{
printf(“顺序表已满!
”);
return-1;
}
else
if(i<1||i>L->length+1)
{
printf(“位置不合法!
”);
return0;
}
else
{
for(j=L->length;j>=i;j--)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;
L->length++;
return1;
}
}
3.删除运算
intlistdelete(SqList*L,inti)
{
intj;
if(i<1||i>L->length)
{
printf(“不存在第i个元素”);
return0;
}
else
{
for(j=i;jlength;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return1;
}
}
4.合并两个顺序表(选做)
算法参照教材“算法2.11”(P20)。
(四)主函数设计
该部分由学生完成。
三、实验原理、方法和手段
四、实验组织运行要求
本实验采用集中授课形式。
五、实验条件
硬件要求:
PC机
软件要求:
VC++6.0。
六、实验步骤
1.理解线性表的顺序存储结构,掌握实验给出的各种操作的实现算法。
2.在掌握算法的基础上完成全局变量的定义,完成主函数的设计。
3.准备一组数据(例如通过键盘输入20个整数或者随机生成20个整数)。
4.上机,在VC++环境下实现程序文件的编辑、链接及运行,步骤如下:
(1)创建一个新的工程文件,输入工程名,选择“Win32ConsoleApplication”(如图1所示);
(2)点击“确定”按钮,出现图2所示对话框,选择“ASimpleApplication”;
图1创建新的工程文件
图2
(3)点击“完成按钮”,出现图3所示的工作界面;
(4)添加代码,编译
(Ctrl+F7)、生成可执行文件
(F7);
(5)运行文件
(Ctrl+F5),输出图5所示的结果。
图3
图4添加代码,编译、生成可执行文件
图5运行结果
5.撰写实验报告。
七、思考题
顺序表已满时,要插入新的数据元素,该如何修改源程序?
八、实验报告
实验完成后应撰写实验报告,报告的内容包括:
1.实验预习
在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,以及简要的实验步骤。
要求预习过程中完成全局变量的定义,完成主函数的设计;要求事先准备一组测试数据,并分析使用该组数据各种操作的结果。
2.实验原始记录
手工记录程序在各种状态(比如顺序表满)下的运行结果,并通过拷贝屏幕的方式保存运行结果的图像。
3.实验结果分析,讨论实验指导书中提出的思考题,写出心得与体会
4.实验报告
主要内容包括对实验数据、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。
九、其它说明
提交的内容包括:
实验报告打印稿;电子文档:
实验报告(doc)、源程序、可执行程序(exe)。
实验二:
单链表的操作
实验学时:
2
实验类型:
验证
实验要求:
必修
一、实验目的
1.掌握线性表的链式存储结构,体会两种存储结构的优、缺点。
2.掌握线性表在链式存储结构上的基本操作和运算,包括插入、删除、查找,以及线性表合并等。
二、实验内容
单链表基本操作的实现
(一)全局变量的定义:
该部分由学生完成。
(二)链表结点的定义:
typedefstructnode{
DataTypedata;
/*数据域,注意DataType为一抽象数据类型,编译前应用实际类型代替,以下同*/
structnode*next;/*指针域*/
}Lnode,*LinkList;
(三)操作算法的实现
1.头插法建立单链表
算法参照教材“算法2.7”(P18)。
2.插入运算
算法参照教材“算法2.5”(P17)。
3.删除运算
算法参照教材“算法2.6”(P18)。
4.合并两个有序单链表(选做)
算法参照教材例2.11(P20)。
(四)主函数设计
该部分由学生完成。
三、实验原理、方法和手段
四、实验组织运行要求
本实验采用集中授课形式。
五、实验条件
硬件要求:
PC机
软件要求:
VC++6.0。
六、实验步骤
1.理解线性表的链式存储结构,掌握实验给出的各种操作的实现算法。
2.在掌握算法的基础上完成全局变量的定义,完成主函数的设计。
3.准备一组测试数据。
4.上机,在VC++环境下实现程序文件的编辑、链接及运行。
5.撰写实验报告。
七、思考题
与顺序存储结构相比,单链表在操作上具有哪些优缺点?
八、实验报告
实验完成后应撰写实验报告,报告的内容包括:
1.实验预习
在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,以及简要的实验步骤。
要求预习过程中完成全局变量的定义,完成主函数的设计;要求事先准备一组测试数据,并分析使用该组数据各种操作的结果。
2.实验原始记录
手工记录程序在各种输入条件下的运行结果,并通过拷贝屏幕的方式保存运行结果的图像。
3.实验结果分析,讨论实验指导书中提出的思考题,写出心得与体会
4.实验报告
主要内容包括对实验数据、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。
九、其它说明
提交的内容包括:
实验报告打印稿;电子文档:
实验报告(doc)、源程序(c)、可执行程序(exe)。
实验三:
栈和队列运算
实验学时:
4
实验类型:
验证
实验要求:
必修
一、实验目的
1.熟练掌握栈和队列的结构,以及这两种数据结构的特点;
2.能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法;
3.熟练掌握链队列和循环队列的基本运算,并特别注意队列满和队列空的判断条件和描述方法
二、实验内容
(一)顺序栈基本操作的实现
1.出栈运算
2.入栈运算
3.读栈顶元素值
(二)链栈基本操作的实现
1.出栈运算
2.入栈运算
3.栈的应用:
数制转换
(三)循环队列和链队列基本操作的实现
1.队列初始化
2.进队运算
3.出队运算
4.求队长
三、实验原理、方法和手段
四、实验组织运行要求
本实验采用集中授课形式。
五、实验条件
硬件要求:
PC机
软件要求:
VC++6.0。
六、实验步骤
1.理解栈的顺序和链式存储结构,掌握实验给出的各种操作的实现算法。
2.理解循环队列和链队的存储结构,掌握实验给出的各种操作的实现算法。
3.在掌握算法的基础上完成全局变量的定义,完成主函数的设计。
4.准备一组测试数据。
5.上机,在VC++环境下实现程序文件的编辑、链接及运行。
6.撰写实验报告。
七、思考题
链队中增加一个头结点的作用是什么?
链式栈为什么不需要增加头结点?
八、实验报告
实验完成后应撰写实验报告,报告的内容包括:
1.实验预习
在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,以及简要的实验步骤。
要求预习过程中完成全局变量的定义,完成主函数的设计;要求事先准备一组测试数据,并分析使用该组数据各种操作的结果。
2.实验原始记录
手工记录程序在各种输入条件下的运行结果,并通过拷贝屏幕的方式保存运行结果的图像。
3.实验结果分析,讨论实验指导书中提出的思考题,写出心得与体会
4.实验报告
主要内容包括对实验数据、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。
九、其它说明
提交的内容包括:
实验报告打印稿;电子文档:
实验报告(doc)、源程序(c)、可执行程序(exe)。
实验四:
二叉树操作
实验学时:
2
实验类型:
验证
实验要求:
必修
一、实验目的
1.熟悉二叉树的各种存储结构的特点及适用范围。
2.学会编写实现二叉树的各种操作的算法:
二叉树的建立、遍历二叉树等。
二、实验内容
二叉树基本操作的实现
(一)全局变量的定义:
该部分由学生完成。
(二)二叉链表结点的定义:
typedefstructnode{
chardata;/*此算法中二叉树的结点采用字符类型*/
structnode*lchild,*lchild;
}NODE;
(三)操作算法的实现
1.先序遍历法建立二叉链表
算法参照教材“算法6.4”(P107)。
2.二叉树的遍历
(1)先序遍历
voidPreorder(NODE*bt)
{
if(bt!
=NULL)
{
printf(“\n\t\t\t%c”,bt->data);
Preorder(bt->lchild);
Preorder(bt->rchild);
}
(2)中序遍历
voidInorder(NODE*bt)
{
if(bt!
=NULL)
{
Inorder(bt->lchild);
printf(“\n\t\t\t%c”,bt->data);
Inorder(bt->rchild);
}
(3)后序遍历
voidPostorder(NODE*bt)
{
if(bt!
=NULL)
{
Postorder(bt->lchild);
printf(“\n\t\t\t%c”,bt->data);
Postorder(bt->rchild);
}
(四)主函数设计
该部分由学生完成。
三、实验原理、方法和手段
四、实验组织运行要求
本实验采用集中授课形式。
五、实验条件
硬件要求:
PC机
软件要求:
VC++6.0。
六、实验步骤
1.理解二叉树的的顺序、链式存储结构,掌握它们的适用场合。
2.在掌握算法的基础上完成全局变量的定义,完成主函数的设计。
3.准备一组测试数据。
4.上机,在VC++环境下实现程序文件的编辑、链接及运行。
5.撰写实验报告。
七、思考题
如何将遍历二叉树的递归算法改为非递归算法?
非递归算法中要使用哪一种数据结构?
八、实验报告
实验完成后应撰写实验报告,报告的内容包括:
1.实验预习
在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,以及简要的实验步骤。
要求预习过程中完成全局变量的定义,完成主函数的设计;要求事先准备一组测试数据,并分析使用该组数据各种操作的结果。
2.实验原始记录
手工记录程序在各种输入条件下的运行结果,并通过拷贝屏幕的方式保存运行结果的图像。
3.实验结果分析,讨论实验指导书中提出的思考题,写出心得与体会
4.实验报告
主要内容包括对实验数据、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。
九、其它说明
提交的内容包括:
实验报告打印稿;电子文档:
实验报告(doc)、源程序(c)、可执行程序(exe)。
实验五:
图的运算
实验学时:
2
实验类型:
验证
实验要求:
选做
一、实验目的
1.掌握图的两种常用存储结构——邻接矩阵和邻接表,掌握无向图、有向图、无向网、有向网的构造方法。
2.掌握基于邻接矩阵或邻接表存储的图的各种运算方法:
图的遍历、从一个源点到其它各顶点的最短路径等。
二、实验内容
(一)全局变量的定义:
该部分由学生完成。
(二)图的存储结构
1.邻接矩阵
typedefstruct{
VertexTypevexs[MAX];/*顶点矩阵*/
AdjTypeedges[MAX][MAX];/*图的边(弧)的邻接矩阵。
无权图用1或0表示是否相邻;带权图则为权值*/
intn,e;/*n为顶点数,e为边数(弧数)*/
}MGraph;
2.邻接表
typedefstructnode{/*表结点*/
intvexposition;/*邻接顶点的编号*/
structnode*next;/*指向下一个邻接顶点的指针域*/
}EdgeNode;
typedefstructvnode{/*邻接表的头结点*/
VertexTypevertex;/*顶点域*/
EdgeNode*firstedge;/*邻接表的头指针*/
}VertexNode,AdjList[MAX];
typedefstruct{
AdjListadjlist;/*邻接表*/
intn,e;/*n为顶点数,e为边数(弧数)*/
}ALGraph;/*以邻接表方式存储的图类型*/
(三)算法的实现
1.图(网)的建立
用邻接矩阵表示CreateGN(MGraph*G,Graphkindgk)
算法参照教材P134。
2.连通图的深度优先遍历
(1)以邻接矩阵表示的图的遍历DFSM(MGraph*G,inti)
算法参照教材“算法7.3”(P124)。
(2)以邻接表表示的图的遍历DFSAL(ALGraph*G,inti)
算法参照教材“算法7.4”(P124)。
3.连通图的广度优先遍历
(1)以邻接矩阵表示的图的遍历BFSM(MGraph*G,inti)
算法参照教材“算法7.5”(P125)。
(2)以邻接表表示的图的遍历BFSAL(ALGraph*G,inti)
算法参照教材“算法7.6”(P126)。
4.从一个源点到其它各顶点的最短路径——Dijkstra算法
ShortestPath_DIJ(MGraph*G,inti,int*P,AdjType*D)
算法参照教材“算法7.8”(P132)。
(四)主函数设计
该部分由学生完成。
三、实验原理、方法和手段
四、实验组织运行要求
本实验采用集中授课形式。
五、实验条件
硬件要求:
PC机
软件要求:
VC++6.0。
六、实验步骤
1.理解图的两种主要存储结构,掌握实验给出的各种操作的实现算法。
2.在掌握算法的基础上完成全局变量的定义,完成主函数的设计。
3.准备一组测试数据。
4.上机,在VC++环境下实现程序文件的编辑、链接及运行。
5.撰写实验报告。
七、思考题
广度优先搜索算法中,采用邻接矩阵和邻接表作为存储结构时,时间复杂度分别是什么?
从中可以得出什么结论?
八、实验报告
实验完成后应撰写实验报告,报告的内容包括:
1.实验预习
在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,以及简要的实验步骤。
要求预习过程中完成全局变量的定义,完成主函数的设计;要求事先准备一组测试数据,并分析使用该组数据各种操作的结果。
2.实验原始记录
手工记录程序在各种输入条件下的运行结果,并通过拷贝屏幕的方式保存运行结果的图像。
3.实验结果分析,讨论实验指导书中提出的思考题,写出心得与体会
4.实验报告
主要内容包括对实验数据、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。
九、其它说明
提交的内容包括:
实验报告打印稿;电子文档:
实验报告(doc)、源程序(c)、可执行程序(exe)。
实验六:
数据库模式设计与建立
实验学时:
4
实验类型:
设计
实验要求:
必修
一、实验目的
1.学会使用数据库系统进行基本的操作。
2.理解数据库模式的三级概念。
3.加深对表间关系的理解。
二、实验内容
给定一实际问题,让学生自己完成数据库模式的设计,包括各表的结构(属性名、类型、约束等)及表之间的关系,在选定的DBMS上建立数据库表。
用SQL命令和可视化环境分别建立数据库表,体会两种方式的特点。
实际问题的模式设计中至少要包含3个基本表,问题可以是学生选课、公司雇员信息等。
三、实验原理、方法和手段
四、实验组织运行要求
本实验采用集中授课形式。
五、实验条件
硬件要求:
PC机
软件要求:
SQLServer2000、Access。
六、实验步骤
1.对于给定的实际问题进行数据库的需求分析、概念结构设计和逻辑结构设计。
2.在选定的DBMS上,用SQL命令和可视化环境分别建立数据库表。
3.撰写实验报告。
七、思考题
八、实验报告
实验完成后应撰写实验报告,报告的内容包括:
1.实验预习
在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,以及简要的实验步骤。
要求预习过程中完成数据库的需求分析、概念结构设计和逻辑结构设计。
2.实验结果分析,讨论实验指导书中提出的思考题,写出心得与体会
3.实验报告
主要内容包括对实验数据、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。
九、其它说明
提交的内容包括:
试验报告打印稿;电子文档:
实验报告(doc)、数据库文件。
实验七:
数据更新及查询
实验学时:
4
实验类型:
验证、设计
实验要求:
必修
一、实验目的
1.学会使用数据库系统进行基本的操作。
2.理解数据库模式的三级概念。
3.加深对表间关系的理解。
二、实验内容
给定一实际问题,让学生自己完成数据库模式的设计,包括各表的结构(属性名、类型、约束等)及表之间的关系,在选定的DBMS上建立数据库表。
用SQL命令和可视化环境分别建立数据库表,体会两种方式的特点。
实际问题的模式设计中至少要包含3个基本表,问题可以是学生选课、公司雇员信息等。
三、实验原理、方法和手段
四、实验组织运行要求
本实验采用集中授课形式。
五、实验条件
硬件要求:
PC机
软件要求:
SQLServer2000、Access。
六、实验步骤
1.对于给定的实际问题进行数据库的需求分析、概念结构设计和逻辑结构设计。
2.在选定