当前位置:首页 > 《数据结构》daan
《数据结构》实验教学大纲
实验学时:32 实验个数:7 实验学分: 1 课程性质:专业必修课 适用专业: 计算机科学与技术 教材及参考书:
1. 《数据结构(C语言版)》,严蔚敏 吴伟民,北京:清华大学出版社,2004
《数据结构题集(C语言版)》实习题部分,北京:清华大学出版社,2004; 3. 《数据结构实验教程》,王玲 刘芳等著,成都:四川大学出版社,2002 大纲执笔人:刘芳 大纲审定人:郭涛
2.
一、实验课的性质与任务
本课程实验大纲是面向计算机相关专业学生开设的《数据结构》实验课计划指导大纲,是依据《数据结构》课程教学计划指导大纲编制。
计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习编写计算机程序仅仅了解计算机语言是不够的,还必须掌握数据组织、存储和运算的一般方法,这是数据结构课程中学习和研究的内容。由于数据结构的原理和算法较抽象,而该课程一般在本科低年级开设,对于计算机程序设计知识的初学者,理解和掌握其中的原理就显得较为困难。数据结构实验课程着眼于数据结构原理和应用的结合点,使读者学会如何将书上学到的知识用于解决实际问题,培养软件工作需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。
本实验课程主要结合数据结构课程的教学大纲的相应内容,设计了7个实验(包括验证型、综合型、设计型实验),力求提高学生的动手能力,做到理论和实践相结合。使学生在实验过程中进一步掌握典型数据结构的逻辑结构、存储结构及算法的程序实现,并训练问题的综合分析能力和编程能力,形成良好的编程风格,为后续课程的学习奠定坚实的理论和实践基础。
二、实验课程目的与要求
1. 实验目的
根据《数据结构》课程的任务与要求,帮助学生拓宽知识面。并达到以下教学要求: (1) 学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻
辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术;掌握各种基本数据结构的逻辑结构和存储结构及相应算法。
(2) 本课程的学习过程也是复杂程序设计的训练过程,要求学生编写的程序结构清楚、
正确易读,符合软件过程的规范,从而培养学生的数据抽象能力;
(3) 通过若干数据结构应用实例,引导学生学习数据类型的使用,为今后学习面向对象
的程序做一些铺垫。
2. 实验要求
(1) 熟悉各种基本数据结构的定义,性质和特点,初步掌握算法分析的基本技巧以及如
何根据实际问题设计一个有效的算法。
(2) 会书写类C语言的算法,并将算法转变为程序实现。
(3) 正确理解各种数据结构的逻辑特性和存储表示和基本操作的算法实现,有较强的逻
辑分析能力。
(4) 针对问题的不同选择合适的数据结构,提高算法设计的能力和动手实验的技能。
三、实验内容安排:
实验一 抽象数据类型的表示与实现 (基本操作、验证型实验 2学时)
1.目的要求:
(1) 熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现; (2) 理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组); (3) 认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行
结果,并结合程序进行分析。
2.实验内容:
(1) 编程实现对一组从键盘输入的数据,计算它们的最大值、最小值、平均值等,
并输出。
要求:将计算过程写成一个函数,并采用引用参数实现值的求解。 #include
float Average(int numble[N],int a) {
float sum=0; int i;
for(i=0;i int Max(int numble[N],int a) { int i; int max= numble[0]; for(i=1;i if(max< numble [i]) max= numble [i]; } return max; } int Min(int numble [N],int a) { int i; int min= numble [0]; for(i=1;i if(min > numble [i]) min = numble [i]; } return min; } int main() { int i=0; int numble[N]; printf(\请输入数字(-1结束)\\n \ scanf(\ while(numble[i]!=-1) { i++; scanf(\ } printf(\平均值是:\ printf(\ printf(\最大值是:\ printf(\ printf(\最小值是:\ printf(\} (2) 编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。 #include \typedef int ElemType; typedef ElemType *Triplet; Status InitTriplet (Triplet &t,ElemType v1,ElemType v2,ElemType v3) { t=(ElemType *)malloc(3*sizeof(ElemType)); if(!t) return OVERFLOW; t[0]=v1; t[1]=v2; t[2]=v3; return OK; } Status DestroyTriplet(Triplet &t) { free(t); t=NULL; return OK; } ElemType get(Triplet &t,int i) { ElemType e; if (i<1||i>3) printf(\值不合法\\n\ e=t[i-1]; return e; } Status put(Triplet &t,int i,ElemType e) { if (i<1||i>3) printf(\值不合法\\n\ t[i-1]=e; return OK; } Status IsAscending(Triplet t) { return (t[0]<=t[1])&&(t[1]<=t[2]); } Status IsDescending(Triplet t) { return (t[0]>=t[1])&&(t[1]>=t[2]); } ElemType Max(Triplet t) { ElemType e; e=(t[0]>=t[1])?((t[0]>=t[2])?t[0]:t[2]):((t[1]>=t[2])?t[1]:t[2]); return e; } ElemType Min(Triplet t) { ElemType e; e=(t[0]<=t[1])?((t[0]<=t[2])?t[0]:t[2]):((t[1]<=t[2])?t[1]:t[2]); return e; } void main() { Triplet p; ElemType x; ElemType v1,v2,v3; int select,i; printf(\输入三个数,建立一个三元组\\n\ scanf(\ if (InitTriplet(p,v1,v2,v3)==OVERFLOW) printf(\分配失败,退出程序!\ else do { printf(\取三元组第i个元素\\n\ printf(\判断三元组元素是否递增\\n\
共分享92篇相关文档