人人范文网 范文大全

数据结构实验教案

发布时间:2020-03-03 18:47:38 来源:范文大全 收藏本文 下载本文 手机版

实验一 预备实验

一、实验项目的目的和要求:

1. 复习C语言指针的用法

2. 复习C语言结构体的用法 3. 理解时间复杂度分析的基本方法

二、实验内容:

1.用指针方式编写程序:从键盘输入N个整型数据,并存入数组,要求将N个数中最大的数与第一个数交换;将其中最小的数最后一个数交换。

基本思想:设两个指针分别指向最大数组元素和最小数组元素。再设一个移动指针从数组的第一个元素开始,依次与最大数组元素指针、最小数组元素指针的内容进行比较,作出相应的变化,一直到移动指针移到最后一个元素。

2.有N 个学生,每个学生的数据包括学号、姓名、三门课的成绩、平均分。要求从键盘依次输入N 个学生的学号、姓名、三门课的成绩,自动计算三门课的平均分数,并将N 个学生的数据输出。

基本思想:对每一名学生循环,再对三门课程循环求平均成绩

三、实验中存在的问题:

实验二 线性表的基本操作

一、实验项目的和要求:

1. 掌握线性表的特点

2. 掌握线性表的顺序存储结构和链式存储结构的基本运算。 3. 尽可能考虑算法的健壮性

4. 实验报告中要写出测试数据、错误分析以及收获。

二、实验内容一:线性表两种存储结构的基本运算

1.用结构体类型描述线性表的两种存储结构 2.完成课堂上所讲的两种存储结构的基本运算 3.要求用二级菜单实现

***************************** * 1-------顺序表 * * 2-------链 表 * * 0-------退 出 * *****************************

请输入的选择:(0-2):

线性表的链式存储

## # 1----前插建立链表

# # 2----后插建立链表 # # 3----访问第i个元素 # # 4----插入 # # 5----删除 # # 6----求线性表的表长 # # 0----退出 #

## 请输入选择(0-6):

分析:1.使用循环建立菜单

2.使用switch语句进行选择,执行相应的子函数(每一个运算编写一个子函数)

实验内容二:超市密码存储箱系统的设计与实现

1.顾客使用箱子的流程为“投一元硬币”--------“找到一个空箱子,同时产生密码”(系统完成)--------“打印密码,打开箱子”(系统完成)--------“取密码纸存包,并关闭箱子,入超市购物”--------“购物结束”--------“输入密码”--------“找到对应箱子并打开”(系统完成)--------“取包”。 2.现要求设计程序模拟以上系统完成的功能

①界面:在我们的模拟系统中,箱子在屏幕上被画出来,并编号,空箱为蓝色,被使用时变成红色,再变为空后则恢复蓝色; ②通过按“1”键模拟顾客投币;

③当空箱子被顾客申请得到的同时,系统自动生成6位数密码,此密码不能与正在被使用的任何一个箱子的密码相同。 3.设计分析

在设计时,可利用链表来组织所有的箱子,所有的箱子以结点的形式表示,结点中存放箱号、密码(满箱有,空箱无)以及指向下一个结点的指针。空箱结点放在一个链表1中,满箱结点放在另一个链表2中。

若有顾客投币(这里按下“1”键模拟),查看链表1是否为空,若为空,则显示“箱满,请稍侯!”,若非空,则取出一个结点,随机产生一个六位数密码,并将些密码和链表2中所有结点的密码相比较,若有重复,则再随机产生一个新密码,直到无重复;将密码信息写入此结点,并将其插入链表2;将此箱的颜色改为红色。 4.密码箱的存储结构类型定义 typedef struct node { int num;/*箱子的号码*/ int paword;/*箱子的密码(满箱有,空箱无)*/ struct node *next;/*指向下个结点的指针*/ }Node,*LinkList;

分析:1.初始化,建立一个代表空箱子链表,建立一个只有头结点的实箱子链表.

2.如果想要存包时,就在空箱子链表中进行查找,如果为空,代表箱子已满,否则从空箱子链表中删除一个结点,并给它赋值,将该结点插入到实箱子链表中.

3.如果想要取包时,就输入密码,在实箱子链表中进行匹配,如果成功,就从实箱子链表中删除相应的结点,插入到空箱子链表中.

4.另外还需要的函数有:随意产生密码函数,匹配密码函数 实验内容三:员工通讯录管理系统

1.为某个单位建立一个员工通讯录管理系统,可以方便地查询每一个员工的办公室电话号码、手机号码及电子邮箱。

2.现要求设计程序模拟以上系统完成的功能

其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除以及整个通讯录表的输出。 3.设计分析

在本设计中,整个通讯录可以采用顺序表或链表方式存储。采用前者,可以提高查询速度;采用后者,可以提高插入与删除记录的效率。

4.员工通讯信息的结构类型定义和通讯录链表的结点类型

typedef struct { char num[5];/*员工编号*/ char name[8];/*员工姓名*/ char phone[9];/*办公室电话号码*/ char call[12];/*手机号码*/ }DataType;/*员工通讯信息的结构类型*/ typedef struct node { DataType data;/*结点的数据域*/ struct node *next;/*结点的指针域*/ }ListNode,*LinkList;/*通讯录链表的结构类型*/ 分析:1.建立一个可循环的菜单

2.使用switch语句,调用子函数实现以下功能

针对每一位员工作为一个结点建立链表.

在该链表上进行查找、插入、删除、修改及输入/出。 实验内容四:运动会记分子系统或学生成绩管理子系统

1.参加运动会的N个学校编号为1~N。比赛分成M个男子项目和W个女子项目,每个项目取前3名,得分分别为5,3,2。写一个程序产生各种成绩单和得分报表。 2.完成功能包括如下:

①产生一总成绩表,包括:学校编号名、男子团体总分、女子团体总分、团体总分 存储结构要求用线性表的顺序存储。

②实验报告中要写出测试数据、错误分析以及收获。

③若选择学生成绩管理子系统,可仿照运动会记分子系统完成相关的插入、删除、查找及各种统计工作。

分析:1.分析顺序表中每个元素的结构(数组元素是一个结构体)

2.建立顺序表

3.在顺序表进行插入、删除、查找

4.进行统计 实验中存在的问题:

实验三 栈和队列的应用

一、实验目的和要求:

1. 掌握栈和队列的概念和特点

2. 掌握栈和队列在顺序和链式存储结构下的插入、删除算法 3. 认真分析项目实例中的内容,将相关程序在计算机上运行实现

二、实验内容一:表达式求值问题

1.求一个数学表达式的值:用户输入一个包含正整数、括号和四则运算符(“+”、“—”、“*”、“/”)的算术表达式,计算其结果。 2.设计分析

首先置操作数栈为空栈,表达式起始符“#”为运算符栈底元素;依次读入表达式中每个字符,若是操数则进操作数栈,若是操作符则和操作符栈顶的运算符进行比较优先权后作相应的操作,直到整个表达式求值完毕(即操作符栈顶元素和当前读入的字符均为“#”) 3.结点结构类型描述如下

typedef struct { char *base,*top; int stacksize; }sqstack; 分析:1.判断输入的字符是否为数值

2.比较判断运算符的优先级 3.何时结束循环,不再运算

实验内容二:迷宫求解问题

1.迷宫是一个m行n列的矩阵,其中0表示无障碍,1表示有障碍。设入口为(1,1),出口为(m,n),即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则 沿原路退回,换一个方向再继续探索,直到出口为止。 2.迷宫的功能

要求随机生成一个m行n列的矩阵,为了操作方便可以在矩阵外围生成一圏障碍,设置东南西北四个方向,采用链栈进行操作。最后迷宫如不是通路给出“此迷宫元解”,如是通路要求输出所走过的路径。 3.结点结构类型描述如下

typedef struct node { int row; int col;

struct node *next; }; 分析:1.建立迷宫,使用二维数组,第一行/列,最后一行/列均初始化为0代表墙不通,这样使其内部的元素均有四个方向进行统一判断,其余元素进行随机产生0代表不通,1代表通.

2.确定入口,出口的坐标.

3.判断该元素是否可通(元素值等于1,一方面代表通,另一方面未走过). 4.标记每一个走过的元素,将其元素值加1.

5.元素的四个方向用0-3表示,下一个方向的坐标可以从当前坐标及方向就可以确定.

三、实验中存在的问题:

实验四

二叉树两种存储结构的应用

一、实验目的和要求:

1. 掌握二叉树的遍历思想及二叉树的存储实现。 2. 掌握二叉树的基本操作:建立二叉树、二叉树的遍历 3. 选择一种形式完成二叉树的显示 4. 掌握二叉树的常见算法的程序实现

5. 实验报告中要写出测试数据、错误分析以及收获

二、实验内容一:二叉树的建立及相关算法的实现

1.完成的功能包括如下几点:

①编程实现建立一棵二叉树,然后对其进行先序、中序和后序遍历。

分析:将要输入的二叉树按照其对应的完全二叉树的顺序输入,若当前位置不存在结点则输入@

②显示二叉树

③求二叉树的高度及二叉树的叶子个数等等

④在主函数中设计一个简单的菜单,分别调试上述算法

实验内容二:哈夫曼编码/译码系统

1.要求编写一程序模拟传输过程,实现在发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行译码,即将信息还原成发送前的字符信息。 2.设计分析

在本例中的算法主要有:哈夫曼树的建立;哈夫曼编码的生成;对编码信息的翻译。要求设置发送者和接收者两个功能。

发送者的功能包括:

①输入待传送的字符信息;②统计字符信息中出现的字符类数和各字符出现的次数(频率);③根据字符的种类数和各字符出现的次数建立哈夫曼树;④利用以上哈夫曼树求出各字符的哈夫曼编码;⑤将字符信息转换成对应的编码信息进行传送。 接收者的功能包括:

①接收发送者传送来的编码信息;②利用上述哈夫曼树对编码进行翻译,即将编码信息还原成发送前的字符信息。 3.结点的类型定义

①哈夫曼树的存储结构类型定义为:

typedef struct { char data; /*编码对应的字符*/ int weight; /*结点的权值*/ int lchild,rchild,parent;/*左右孩子及双亲的下标*/ }HTNode; ②哈夫曼编码的存储结构类型定义为: typedef struct { char bits[N]; /*存放哈夫曼编码的字符数组*/ int start; /*记录编码的起始位置,因为每种字符的编码长度不同*/ }HCode;

三、实验中存在的问题:

实验五

图子系统

一、实验目的和要求:

1.掌握图的存储思想及其存储实现

2.掌握图的深度、广度优先遍历算法思想及其程序实现 3.掌握图的常见应用算法的思想及其程序实现

二、实验内容一:图的遍历问题

1.键盘输入以下结点数据:太原、成都、北京、上海、天津、大连、河北。建立一个有向图或无向图(自定)的邻接表并输出该邻接表 2.在图的邻接表的基础上计算各顶点的度,并输出 3.以有向图的邻接表为基础实现输出它的拓扑排序序列 4.采用邻接表存储实现无向图的深度优先遍历 5.采用邻接表存储实现无向图的广度优先遍历

6.采用邻接矩阵存储实现无向图的最小生成树的 PRIM 算法

7.在主函数中设计一个简单的菜单,分别调试上述算法 实验内容二:所有顶点对的最短路径

1.设置4个村庄之间的交通,村庄之间的距离用各边上的权值来表示。现在要求从这

4个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院最近。 2.设计分析

用有向加权图表示的交通图中,有向边表示第i个村庄和第j个村庄之间有道路,边上的权表示这条道路的长度。该问题的实质是求解任意两顶点间的最短路径问题。即求出每个顶点到其他顶点的最短路径的最大值,最大值最小的顶点作为医院所在村庄。 3.结构类型定义

typedef char vextype;/*顶点数据类型*/ typedef int edgetype;/*边数据类型*/ typedef struct { vextype vex[maxsize]; edgetype arc[maxsize][maxsize]; int vexnum,arcnum; }Mgraph;

三、实验中存在的问题:

实验六 数据结构综合性实验

一、实验目的和要求:

掌握小型系统开发方法,提高学生综合开发能力。根据实际问题,设计方案,综合运用课程知识,完成《学生成绩管理系统》或《数据结构算法演示系统》的设计、编程与调试工作。

二、实验内容一:

分析、调研数据结构课程所学的算法(功能模块)或学生成绩管理的相关功能模块,采用结构化设计思想、模块分解的规则构成一个易使用的小型管理系统。 具体要求见《数据结构实验》课程设计

实验内容二:手机短信中电话号码和手机号码的识别与提取

1.在使用手机收发短信时,收到的短信内容中常会包含对方发来的电话号码或手机号码,为了方便用户能直接提取其中的号码并存入到其手机的通讯录中,现要求开发手机系统软件中的一个子功能,实现从手机短信内容中识别和提取电话号码(7位或8位)和手机号码(11位),并将其存入通讯录中。 2.设计分析

要从手机短信的内容中识别电话号码或手机号码,必须从短信的第一个字符开始查找,找到第一个数值型字符(‘0’~‘9’),然后依次判断其后的字符,若其后有连续的6个或7个数值型字符,则将其识别成电话号码并提取,若其后有连续的10个数值型字符,则将其识别成手机号码并提取。继续向后搜索直到整个短信查找完毕。 3.存储结构类型定义 ①短信的存储结构类型定义

typedef struct { char word[200];/*短信内容*/ int length; /*短信长度*/ }Meage; ②通讯录中记录的存储结构类型的定义

typedef struct { char name[8]; /*姓名*/ char phone[11]; /*电话号码或手机号码*/

}Note; 实验内容三:药店的药品销售统计系统

1.设计一系统,实现医药公司定期对各药品的销售记录进行统计,并按药品编号、单价、销售量或销售额做出排序。 2.设计分析

在设计中,首先从数据文件读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药品名称、单价、销售量、销售额。其中药品编号共4位,采用字母和数字混合编号,如:B125,前一位为大写字母,后三位为数字。 3.存储结构类型定义

①药品信息的存储结构类型定义

typedef struct node { char num[4];/*药品编号*/ char name[10]; /*药品名称*/ float price;/*单价*/ int count; /*销售量*/ float sale; /*销售额*/ }DataType; ②存储药品信息的顺序表的定义

typedef struct { DataType r[maxsize]; int length; }sequenList; 实验内容四:电视大赛观众投票及排名系统

1.在很多电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排列,从而自动产生冠军、亚军和季军。现要求编写一程序模拟实现上述系统的功能。 2.设计分析

在本系统中,首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来开辟存放选手信息的顺序表。将选手的编号和姓名依次存入顺序表单元中,观众通过按键进行投票,按“1”表示为1号选手投票,按“2”表示为2号选手投票,依次类推。以按“0”作为投票结束标志。投票结束后进行排序。 3.存储结构类型定义

①选手信息的存储结构类型定义

typedef struct node { char name[8]; /*选手姓名*/ int num;/*选手编号*/ int score; /*选手得分*/ int tax; /*选手名次*/ }Node; ②开辟空间用于构造存放选手信息的顺序表R:R=(Node *)malloc(n*sizeof(Node));其中n 为参赛选手的人数,在此采用动态空间分配,而不是在开始时直接开辟静态数组,这样是为了避免空间的不足造成浪费。

在投票时,按“1”为1号选手投票的实现:

Scanf(“%c”,&k); /*观众按键*/ R[K-48].score= R[K-48].score+1; 若观众输入的是“1”,则“1”-48即为ASCII-48=1,因此可以实现对1号选手的票数加1,即R[1]=R[1]+1。其他选手类似。

数据结构实验教案

数据结构实验课教案

数据结构实验课教案

《数据结构》实验教学大纲

数据结构实验指导书

数据结构实验_177

数据结构实验2

数据结构实验指导书

《数据结构》实验指导书

《数据结构》实验指导书

数据结构实验教案
《数据结构实验教案.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档