数据结构实验大纲

更新时间:2023-11-09 06:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《数据结构A》实验大纲

课程编码: 07040021

课程英文名: Data Structure A

适用专业: 计算机科学与技术本科、网络工程本科、计算机科学与技术(师范)本科 实验学时: 16学时 学 分: 0.5学分

一、实验课程的性质、目的和任务

数据结构是计算机专业的一门核心课程,是计算机及相关专业的重要的基础理论课程。该课程既有较强的理论,又要联系实际。通过《数据结构》实验的开设,使学生学会分析数据的特性,给出数据结构的描述,写出相应的算法,培养和训练学生编写复杂程序的能力,使学生的编程能力有一个质的提高。

二、实验环境

1、硬件:计算机 2、软件:vc6.0

三、实验内容:

实验1抽象数据类型的实现实验

(一)实验目的要求

1. 了解结构体和抽象数据类型(ADT)的基本概念,及描述方法。

2. 通过对复数抽象数据类型ADT的实现,熟悉VC环境(掌握结构体类型),为以后章节的学习打下基础。

(二)实验学时:2 学时 (三)实验类型:验证 (四)实验内容

1.复数抽象数据类型ADT的描述及实现。 [复数ADT的描述] ADT complex{

数据对象:D={ c1,c2 c1,c2∈FloatSet } 数据关系:R={ c1 c2 } 基本操作:创建一个复数 creat(a); 输出一个复数 outputc(a);

求两个复数相加之和 add(a,b); 求两个复数相减之差 sub(a,b); 求两个复数相乘之积 chengji(a,b); 等等;

} ADT complex; 2. 复数ADT实现的源程序如下: #include #include

/* 存储表示,结构体类型的定义 */ typedef struct

{ float x; /* 实部子域 */ float y; /* 虚部的实系数子域 */ }comp;

/* 子函数的原型声明 */ void creat(comp *c); void outputc(comp a); comp add(comp k,comp h); /* 主函数 */ main()

{ creat(&a); outputc(a); creat(&b); outputc(b); a1=add(a,b); outputc(a1); } /* maijn */

/* 创建一个复数 */ void creat(comp *c) { float c1,c2;

printf(\输入实部real x=?\ printf(\输入虚部xvpu y=?\ (*c).x=c1; c ->y=c2; } /* creat */ /* 输出一个复数 */ void outputc(comp a)

{ printf(\ }

/* 求两个复数相加之和 */ comp add(comp k,comp h) { comp l;

l.x=k.x+h.x; l.y=k.y+h.y; return(l); } /* add */

3.将上面源程序输入计算机,进行调试。运行程序,输入下列两个复数的实部域虚部,记录两个复数相加的输出结果。 原始数据:2.0 + 3.5i ,3.0 – 6.3i

4.在上面程序的基础上,增加自行设计的复数减、复数乘的两个子函数,适当补充必需的语句(例如函数原型声明、主函数中的调用等)。提示:

// 求两个复数相减之差的函数

comp sub(comp k,comp h) { ……}

// 求两个复数相乘之积的函数

comp chengji(comp k,comp h){ …… }

5.再次调试运行程序。输入数据,记录结果,最后完成实验报告。

实验2 顺序表与单链表基本操作实验

(一)实验目的要求

1.熟悉 在VC环境下调试程序的基本方法。

2.掌握线性表的基本运算,如建表、插入、删除、查找、合并、逆置等基本操作分别在两种存储结构上如何实现。。 (二)实验学时:2学时 (三)实验类型:验证 (四)实验内容

(一)顺序表:

1.建立一个顺序表,要求从键盘输入10个整数(每一个用空格隔开),0为输入结束标志,并将该顺序表的元素从屏幕显示出来。

2. 在顺序表中查找某个元素,如果找到,返回该元素在顺序表中的位置和该元素的值,否则提示无此元素。

3. 将从键盘输入的一个整数插入到指定位置。 4. 删除指定元素。

5. 将事先建立好的顺序表的元素进行逆置,比如原顺序表元素为12 23 33 34 55 ,逆置后为55 34 33 23 12。

6、将两有序表La和Lb合并成一个顺序表。要求:将Lb中不同于La中的元素插入到La的最后面。

(二)单链表

1.利用头插法建立一个有头结点的单链表,并从屏幕显示单链表元素列表。 2. 在单链表中查找某个元素,如果找到,返回该元素在顺序表中的位置和该元素的值,否则提示无此元素。

3.在上述单链表中的指定位置插入指定的元素。要求:屏幕上应分别能显示插入前的单链表元素列表和插入新元素后的单链表元素列表。

4. 删除上述单链表中指定位置的元素。要求:屏幕上分别显示删除前、后的单链表中元素列表;从键盘输入指定的删除位置。

5、将上述单链表的元素逆置。要求:屏幕上可以显示逆置前、后的单链表元素列表。 6. 将两个按值非递减排列的单链表La和Lb归并得到一新链表Lc, Lc的元素也按值非递减排列。要求:屏幕上可以显示La和Lb元素列表,以及合并后单链表Lc元素列表及Lc中元素个数。

实验3顺序栈与顺序循环队列基本操作实验

(一)实验目的要求

1. 掌握顺序栈的各种基本运算的方法及其程序实现,如入栈、出栈、判断栈空、栈满等基本操作。

2. 掌握顺序循环队列的各种基本运算的方法及其程序实现,如入队、出队、判断队列空、队列满等操作。 (二)实验学时:2 学时 (三)实验类型:验证 (四)实验内容

1.利用顺序栈将一个非负的十进制整数N转换为对应的B进制数。要求:非负的十进制整数N和B都从键盘输入;转换结果从屏幕输出。

2. 假设有三个分别命名为A、B和C的塔座,在塔座B上有n个直径大小各不相同、从小到大编号为1,2,...,n的圆盘。现要求将塔座B上的n个圆盘移至塔座A上并按同样顺序叠放,当移动圆盘时应遵循下面规则: 1)每次只能移动一个圆盘;

2)圆盘可以放在A、B和C中的任一个上面;

3)任何时刻都不能将一个教大的圆盘压在较小的圆盘上。

试用程序模拟上述问题的解决办法,并输出移动的总次数。要求从键盘输入圆盘的个数。

3.利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。

假设初始男、女人数及性别已经固定,舞会的轮数从键盘输入。试模拟解决上述舞伴配对问题。要求:从屏幕输出每一轮舞伴配对名单,如果在该轮有未配对的,能够从屏幕显示下一轮第一个出场的未配对者的姓名。

实验4串的简单模式匹配算法的实现实验

(一)实验目的要求

熟练掌握字符串的模式匹配算法 (二)实验学时:2 学时 (三)实验类型:验证 (四)实验内容

1.利用串的顺序定长存储结构实现两个子串的连接。要求:两个子串从键盘输入获得;从屏幕显示连接后的新串元素列表。

2. 利用串的堆分配存储结构实现两个子串的连接。要求:两个子串从键盘输入获得;从屏幕显示连接后的新串元素列表。

3. 实现串的简单模式匹配算法。要求:输入主串S和子串T,若在主串S中存在和T相等的子串,则返回在S中出现的第一个和T相等的子串在S中的位置,否则返回0。注意T不能是空串。

实验5二叉树的遍历算法的实现实验

(一)实验目的要求

进一步巩固对指针的使用,熟练掌握二叉树的非线性、递归等特点,掌握二叉树的各

种遍历方法及其实现。 (二)实验学时:2 学时 (三)实验类型:验证 (四)实验内容

1.构造基于先序遍历的二叉树。

2.分别调用先序、中序和后序遍历算法对二叉树进行遍历并输出结点序列。

3. 假设二叉树中结点值互不相同,输入一给定值,查找给定值对应的结点是否存在。 4. 计算二叉树的深度、二叉树的结点总数和二叉树的叶子结点个数。

5. 线索二叉树的实现。

6.哈夫曼树和哈弗曼编码的实现。

实验6图的遍历算法的实现实验

(一)实验目的要求

熟悉图的各种存储结构的特性,以及如何应用它们解决具体问题。 (二)实验学时:2 学时 (三)实验类型:设计 (四)实验内容

1.图的遍历算法的实现。

2.最小生成树的Prim算法的实现。 3.最短路径的Dijkstra算法的实现。

实验7 二分查找、Hash查找算法的实现实验

(一)实验目的要求

掌握有序表的查找方法及其平均查找长度的计算方法,掌握哈希表的构造方法。 (二)实验学时:2 学时 (三)实验类型:验证 (四)实验内容

1.折半查找算法的实现。

2.哈希表的构造和查找算法的实现。

实验8各种排序算法的实现实验

(一)实验目的要求

掌握直接插入排序、冒泡排序、快速排序、堆排序、归并排序等方法的实现,并熟悉各种排序方法的时间性能。 (二)实验学时:2 学时 (三)实验类型:验证 (四)实验内容

1. 直接插入排序算法的实现。 2. 冒泡排序算法的实现。 3. 快速排序算法的实现。

本文来源:https://www.bwwdw.com/article/3ryv.html

Top