实验指导-数据结构B教案资料
数据结构实验指导书
数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。
具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。
2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。
3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。
二、实验环境1、操作系统:Windows 或 Linux 操作系统。
2、编程语言:C、C++、Java 等编程语言中的一种。
3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。
三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。
2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。
3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。
四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。
分析顺序表在不同操作下的时间复杂度。
2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。
比较单链表和双向链表在操作上的优缺点。
(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。
利用栈解决表达式求值、括号匹配等问题。
2、队列的实现与应用实现顺序队列和链式队列。
利用队列解决排队问题、广度优先搜索等问题。
(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。
实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。
2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。
分析二叉搜索树的性能。
(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。
《数据结构》实验指导书
数据结构实验课程大纲本大纲是针对计算机科学与技术专业本科对数据结构的基本要求而编写的。
一、目的与任务数据结构是一门实践性很强的课程,每个学生必须完成一定数量的上机作业。
通过上机作业,要求在数据结构的逻辑特性和存贮表示、基本数据结构的选择和应用、算法设计及其实现等方面加深对课程基本内容的理解。
同时,在程序设计方法、程序设计风格及上机操作等基本技能和科学作风方面受到比较系统的、严格的训练。
提高分析问题和用计算机解决实际问题的能力。
为后续课程的学习以及为应用软件特别是非数值软件的开发打下良好的理论基础和实践基础。
二、课程内容1.顺序表的表示和运算(0-2学时)2.链表的表示和运算(2学时)3.栈的应用(2-3学时)4.队列的应用(2-3学时)5.二叉树的基本操作和应用(2-6学时)6.图及其应用(2-6学时)7.排序(4-6学时)8.查找(2-4学时)三、基本要求1.逐步理解和掌握程序设计和上机操作的基本方法和技能。
2.理解并实现各种基本数据结构的存贮表示、运算方法及其典型应用;学会根据实际问题的要求设计算法的数据结构,并具有一定的比较和选用数据结构及算法的能力。
3.理解并实现常用的查找和排序的基本方法。
四、学时分配五、实验内容注:带*的内容以及练习与思考题,可根据实际学时、专业方向特点等具体要求,做相应调整或从略。
实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。
(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
太原理工大学 软件学院《数据结构B》--实验指导书-杨永强
《数据结构B》实验指导书计算机科学与技术学院计算机科学与技术系2011年09月目录实验一线性表 (1)实验二树 (5)实验三图 (7)实验四查找 (11)实验五内排序 (13)实验一线性表【目的与要求】本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机调试并编译执行通过,并观察其结果,然后独立完成后面的实验内容,写出完整的实验报告。
编写程序过程中注意养成良好的编程风格与习惯,要求程序结构清晰,程序缩进,适当注释。
【参考例题】[问题描述]用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
[输入]初始字符串,插入位置,插入字符,删除字符。
[输出]已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。
[存储结构]采用链式存储结构[算法的基本思想]建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。
[参考源程序]#define NULL 0typedef struct node{char a;struct node *link;}node,*nodelink;void readlink(nodelink head){nodelink p,q;char c;p=head;printf("Input a linktable(a string):");scanf("%c",&c);if (c=='\n') printf("This string is empty。
数据结构课程实验指导书
《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。
数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。
通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作1.每个学生需配备一台计算机,操作系统需Windows2000/XP以上版本,软件需Visual C++6.0以上版本。
2.实验前要求学生按实验要求编写好相关实验程序,准备上机调试运行。
三、实验的步骤(一)建立一个文件夹,如“数据结构”,用来存放自己的所有实验程序,在该文件夹中建立子目录用来存放每个项目(一个子目录一个项目),如“顺序表”,项目中需要的所有文件都存在该文件夹中。
(二)新建一个项目文件1.双击Visual C++ 6.0快捷图标,进入Visual C++ 6.0集成开发环境;或者点击“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”进入Visual C++ 6.0集成开发环境。
2.单击“File”菜单,选择“New”命令3.创建一个项目文件并保存在项目所在文件夹中;3. 创建源程序文件并保存在项目所在文件夹中;4.输入源程序;5.单击“保存”按钮保存源程序。
2010数据结构实验指导书
《数据结构B》实验指导书目录实验说明及要求 0实验一线性表..................................................................................... 错误!未定义书签。
实验二栈............................................................................................ 错误!未定义书签。
实验三队列 ........................................................................................ 错误!未定义书签。
实验四树.. (7)实验五散列表..................................................................................... 错误!未定义书签。
实验六排序 ........................................................................................ 错误!未定义书签。
实验七查找 ........................................................................................ 错误!未定义书签。
实验八图. (20)综合设计考核 (23)附录1 在V isual 2003中建立、编译和运行程序 (24)附录2 使用教材提供的参考文件的方法 (29)附录3 如何设置编译器生成C代码 (32)参考文献 (33)实验说明及要求一实验说明《数据结构B》实验是为了辅助《数据结构B》(双语教学)而开展的。
因为理论教学采用了两种教材(《数据结构与算法分析》的C++版和C语言描述版),所以在实验时程序的编写既允许采用C语言,又允许采用C++语言。
《数据结构》实验指导书(新教学计划)
数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)实验题目 (3)实验一单链表的插入、删除 (3)[实验目的] (3)[实验内容] (3)[测试数据] (3)[实现提示] (3)实验二栈及其应用 (5)[实验目的] (5)[实验内容] (5)[测试数据] (5)实验三二叉树的递归算法 (5)[实验目的] (5)[实验内容] (6)[测试数据] (6)实验四查找及排序算法的应用 (7)[实验目的] (7)[实验内容] (7)[测试数据] (7)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。
由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。
为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。
数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。
在掌握基本算法的基础上,掌握分析、解决实际问题的能力。
通过实验实践内容的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。
《数据结构》实验指导书(Java语言版).
《数据结构》课程实验指导《数据结构》实验教学大纲课程代码:0806523006 开课学期:3 开课专业:信息管理与信息系统总学时/实验学时:64/16 总学分/实验学分:3.5/0.5一、课程简介数据结构是计算机各专业的重要技术基础课。
在计算机科学中,数据结构不仅是一般程序设计的基础,而且是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础。
数据结构课程主要讨论各种主要数据结构的特点、计算机内的表示方法、处理数据的算法以及对算法性能的分析。
通过对本课程的系统学习使学生掌握各种数据结构的特点、存储表示、运算的原理和方法,学会从问题入手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储机构及其相应的操作算法,并初步掌握时间和空间分析技术。
另一方面,本课程的学习过程也是进行复杂程序设计的训练过程,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。
二、实验的地位、作用和目的数据结构是一门实践性较强的基础课程,本课程实验主要是着眼于原理和应用的结合,通过实验,一方面能使学生学会把书上学到的知识用于解决实际问题,加强培养学生如何根据计算机所处理对象的特点来组织数据存储和编写性能好的操作算法的能力,为以后相关课程的学习和大型软件的开发打下扎实的基础。
另一方面使书上的知识变活,起到深化理解和灵活掌握教学内容的目的。
三、实验方式与基本要求实验方式是上机编写完成实验项目指定功能的程序,并调试、运行,最终得出正确结果。
具体实验要求如下:1.问题分析充分地分析和理解问题本身,弄清要求,包括功能要求、性能要求、设计要求和约束,以及基本数据特性、数据间联系等等。
2.数据结构设计针对要解决的问题,考虑各种可能的数据结构,并且力求从中选出最佳方案(必须连同算法实现一起考虑),确定主要的数据结构和全程变量。
对引入的每种数据结构和全程变量要详细说明其功用、初值和操作的特点。
《数据结构》实验指导书
} Triple;
typedef struct
{Triple data[MAXSIZE+1];
//非零元素的三元组表,data[0]未用
int mu,nu,tu;//矩阵的行数、列数和非零元素个数
typedef struct list
{ElemType elem[MAXSIZE];//静态线性表
int length; //顺序表的实际长度
} SqList;//顺序表的类型名
五、注意问题
1.插入、删除时元素的移动原因、方向及先后顺序。
4.编写函数,借助队列实现二叉树的层次遍历算法。
5.编写函数,求二叉树的高度。
6.编写函数,求二叉树的结点个数。
7.编写函数,求二叉树的叶子个数。
8.编写函数,交换二叉树每个结点的左子树和右子树。
9.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验三 栈和队列
一、预备知识
1.栈的顺序存储和链式存储结构的类型定义方法及其基本操作算法
2.队列的顺序存储和链式存储结构的类型定义方法及其基本操作算法
二、实验目的
1.掌握栈、队列的思想及其存储实现
2.掌握栈、队列的常见算法的程序实现
8.编写函数,实现输入一个元素x,把它插入到有序表中,使顺序表依然有序。
9.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
四、实验说明
1.顺序表的存储定义
#define MAXSIZE 100 //顺序表的最大元素个数
【实验】数据结构实验指导书及答案
【关键字】实验数据结构课程实验指导书数据结构课程组编西南交通大学电气工程学院一、实验教学的目的与基本要求实验目的:用计算机来解决实际问题时,就要涉及到数据的表示及数据的处理,而数据表示及数据处理正是数据结构课程的主要研究对象,通过这两方面内容的学习,为后续课程,特别是软件方面的课程打下了厚实的知识基础,同时也提供了必要的技能训练。
因此,数据结构课程在计算机应用中具有举足轻重的作用。
通过实验实践内容的训练,突出学生程序思维训练和动手上机调试程序的能力, 使学生掌握数据结构的基本原理和编程方法,提高学生组织数据及编写程序的能力。
实验要求:1、实验前要预习:实验前必须认真预习相关的知识,做好充分准备。
2、学生进入实验室,要保持室内整洁和安静。
按照指定的内容进行实验。
3、学生在实验前做好预习,写好算法;实验完毕由教师验收合格后方可离开,并写好实验报告。
4、报告内容包括实验目的、实验内容、程序清单和实验结果等。
要求书写文字整齐简洁。
5、实验过程中要注意人身和设备安全,遇到事故或出现异常现象,应立即切断电源,保持现场并报告指导教师处理。
二、实验报告要求、实验考核方式、内容及成绩评定标准实验报告要求内容清晰完整,写出实验结果。
实验考核方式依据实验报告完成情况和实验上机情况综合考核。
根据实验报告和实验课出席情况给出实验成绩,满分10分。
三、实验教材及参考书《数据结构》严蔚敏清华大学出版社 2005实验一熟悉开发环境和抽象数据类型一.实验目的1.熟悉VC软件开发环境。
2.熟悉抽象数据类型的定义与应用。
二.实验内容1.在VC下编写程序,实现求出从键盘输入的两个数的最大值。
例如,从键盘输入a=4,b=5。
得出结果c = 52.在VC下编写程序,实现求出两个复数的和。
定义复数的数据类型,复数由实部和虚部构成。
复数的和是两个复数的实部和虚部分别求和得出。
其中的两个复数分别从键盘输入,例如,输入3, 4表示复数Z1:3+4i; 输入1, 2表示复数Z2:1+2i。
《数据结构B》实验指导书
湖北汽车汽车工业学院《数据结构B》实验指导书袁科、马春江、付勇智编写计算机工程系目录实验一线性表基本操作的编程实现 (2)实验二堆栈和队列基本操作的编程实现 (12)实验三串基本操作的编程实现 (20)实验四二维数组基本操作的编程实现 (28)实验五二叉树基本操作的编程实现 (33)实验六图基本操作的编程实现 (41)实验七查找技术的编程实现 (50)实验八排序技术的编程实现 (57)附录一实验常见问题问答 (64)附录二如何准备实验 (64)附录三如何写实验报告 (65)附录四实验报告模板 (66)附录五实验注意事项 (70)(特别提示:程序设计包含两个方面的错误。
其一是语法错误,其二是功能错误。
为了提高学生的编程和调试能力,本指导书给出的程序代码并不保证没有上述的两种错误。
并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的教学要求。
希望大家以自己所学高级语言的基本功和数据结构原理的思考点为基础,不要过于依赖给出的参考代码,这样才能有所进步。
如果学生能够根据要求完全自己编制,那就更好了。
)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。
还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。
建议实现键盘输入数据以实现程序的通用性。
为了体现功能的正常性,至少要编制遍历数据的函数。
【注意事项】1.开发语言:使用C。
2.可以自己增加其他功能。
【参考代码】(以下内容,学生任意选择一个完成即可)(一)基础篇//利用顺序表完成一个班级学生课程成绩的简单管理#include<stdio.h>#include<stdlib.h>#include<conio.h>#define MAXSIZE 100 //根据需要自己设定一个班级能够容纳的最大学生数typedef struct stu{int num; //学生学号char name[10]; //学生姓名float score; //学生成绩}STUDENT; //存放单个学生信息的结构体类型typedef struct list{STUDENT stu[MAXSIZE]; //存放学生的数组定义,静态分配空间int length; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型void listcreate(LIST *Li,int m)//初始化班级的学生信息{int i;Li->length=0;for(i=1;i<=m;i++) //输入m个学生的所有信息{printf("请输入第%d个学生的信息:\n",i);printf("学号=");scanf("%d",&Li->stu[i].num); //输入第i个学生的学号printf("姓名=");scanf("%s",&Li->stu[i].name); //输入第i个学生的姓名printf("成绩=");scanf("%f",&Li->stu[i].score); //输入第i个学生的成绩Li->length++; //学生人数加1}}int listinsert(LIST *Li,int i)//将学生插入到班级Li的第i个位置。
最新数据结构实验指导书
《数据结构》实验指导书(适用于计算机科学与技术、网络工程、软件工程专业)计算机科学与技术学院软件教研室2006-8目录前言 (3)实验一、单链表的基本操作 (4)实验二、二叉树的遍历 (6)实验三、折半查找和二叉排序树 (8)实验四、内部排序 (10)前言《数据结构》是计算机科学与技术、网络工程等专业的专业基础必修课,主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法进行分析和评价。
本课程的学习应使学生深刻地理解数据结构的逻辑结构和物理结构的基本概念及有关算法,培养学生基本的、良好的程序设计技能以及针对具体问题,选择适当的数据结构,设计出有效算法的能力。
《数据结构》是一门理论和实践相结合的课程,它在整个计算机专业教学体系中处于举足轻重的地位,是计算机科学的算法理论基础和软件设计的技术基础,其上机实验的目的主要是编程实现数据结构各章的主要算法,训练学生实际动手进行程序设计和程序调试的能力,加深对数据结构相关概念和算法的理解。
实验一、单链表的基本操作一、实验目的1、掌握线性链表的操作特点,即指针是逻辑关系的映像。
2、掌握动态产生单链表的方法。
3、熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。
4、熟练掌握单链表的取元素操作二、实验内容1、定义单链表类型并动态创建单链表2、实现线性表链式存储结构下元素的插入操作3、实现线性表链式存储结构下元素的删除操作4、实现线性表链式存储结构下取元素操作三、实验环境TC或VC++或Java四、实验步骤1、单链表的存储定义2、从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。
3、分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。
4、删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。
5、取单链表中的第5个数据元素和第7个数据元素五、问题讨论1、单链表具有什么优缺点?2、单链表的定义与顺序表的定义有什么区别?3、逆序创建单链表有什么好处?4、为什么单链表中取元素、插入和删除操作在开始不判断给定位置i的合法性?5、如何改进单链表的定义,使其可以在操作前判断判断给定位置i的合法性?六、实验报告内容1、实验目的2、实验内容和具体要求3、完成情况和实验记录,实验记录为实验过程中遇到的问题及解决方法4、程序清单5、所输入的数据及相应的运行结果6、问题回答7、实验心得实验二、二叉树的遍历一、实验目的1、掌握二叉树的特点及其存储方式。
《数据结构》实验指导书
《数据结构》实验指导书实验指导书课程名称:数据结构计算机科学与工程系《数据结构》课程组目录前言 .................................... 1 一、实验的作用和目的 ..................... 2 二、实验方式与考核方式................... 2 三、实验要求 ............................. 3 四、实验报告要求......................... 4 五、实验内容 .. (5)实验一线性表应用 (5)实验二栈与队列应用 (10)实验三二叉树的操作 (14)实验四图的遍历 ................................................18 实验五查找算法应用 (21)六、选做实验内容 (24)实验六排序 ................................................ ....24 实验七数组和广义表 (26)实验八串 ................................................ . (27)前言《数据结构》数据结构是计算机科学与技术及相关专业的一门重要专业基础课,它主要介绍线性结构、树型结构、图状结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法,以及算法的时间、空间效率分析。
这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。
通过本课程的学习,使学生熟练地掌握数据结构的内在逻辑关系及其在计算机中的表示方法,以及相关基本操作的算法实现;掌握典型算法的设计思想及程序实现;熟悉各种数据结构在计算机科学中的基本应用;培养和训练学生结合实际应用,根据实际问题选取合适的数据结构、存储方案设计出简洁、高效、实用的算法;并为学习《操作系统》、《编译原理》、《数据库原理》等后续课程和研制开发各种系统和应用软件打下扎实的理论与实践基础。
数据结构实验:B树及关键字的插入,删除和按层次遍历
数据结构实验:B树及关键字的插入,删除和按层次遍历054217黄威靖[实验目的]实现B树的相关算法:关键字的插入,删除,查找和B树的按层次遍历。
具体到本实验中,是5阶B树的创建,从文件读入测试数据,1、3、5、7、9、……97、99(也可以是其他的测试数据)依次插入B树中,然后可以执行插入,删除,查找关键字,按层次遍历的操作。
[程序使用说明]该程序可以从“测试文件.txt”读入数据,也可以手动输入数据(即向树中插入关键字),可以删除,查找关键字。
要检查运行结果,可以选择遍历B树。
根据屏幕提示,可以完成这些操作。
需要说明的是,显示的结果已经将B树分层,但没有显示树状关系根据,B树的定义我们可以画出这个结果对应的树状关系图:按层次遍历B树:1.将根结点指针入队列2.当队列不为空时,做以下操作3.让一个临时指针取队头的指针,然后队头指针出队列4.从小到大输出临时指针中的关键字5.当临时指针指向的不是叶子结点时,将临时指针指向的结点中的指向下一层结点的指针入队列6.回到3,直到队列为空[程序编写心得]这是一个比较复杂的数据结构,但这种结构在数据仓储中应用的非常广泛,数据库实验课程中也是用的这种结构。
因此必须要将这个B树实现好。
起初,感觉这个结构复杂,无从下手。
后来用了分而治之的想法,把程序分为几个大块,一个个实现。
应用先创建好的B树,对每个功能测试。
只有当一个功能没问题时才进行下一个。
先写好了按层次遍历,觉得有了信心,写完了其余的。
在编写过程中体会到了文档的作用,先写文档,事先想好每一步干什么,有助于写代码时保持思路清晰,目标明确。
最后还遗留了一个问题。
将阶数作为BTree的私有成员,能够使该程序功能更强大。
但是struct Node不接受阶数,认为无法访问私有成员。
这个问题现在还没解决好。
不得已,只能将阶数定义为宏。
《数据结构》实验教案
重庆邮电大学教学实施方案(2012~2013学年秋季学期)课程名称:《数据结构》实验授课对象:2011级全校各专业课程性质:必修课课程学时:10学时授课教师:刘伯红(硕士/副教授)所属部门:计算机学院计算机专业实验中心2012 年 10 月 12 日目录重庆邮电大学教师实验授课计划 (4)《数据结构》C语言程序书写规范 (7)一、程序书写规范要求 (7)二、C语言程序示例 (7)三、实验步骤 (10)实验一教案线性表的实现及操作 (12)一、实验目的 (12)二、实验要求 (12)三、实验重点与难点 (13)四、实验内容 (13)五、参考资料 (14)六、实验小结 (14)七、课后作业 (14)实验二教案栈与队列的应用 (16)一、实验目的 (16)二、实验要求 (16)三、实验重点与难点 (17)四、实验内容 (17)五、参考资料 (20)六、实验小结 (20)七、课后作业 (20)实验三教案二叉树的实现及遍历 (21)一、实验目的 (21)二、实验要求 (21)三、实验重点与难点 (21)四、实验内容 (22)五、参考资料 (24)六、实验小结 (24)七、课后作业 (24)实验四教案图的实现与遍历 (25)一、实验目的 (25)二、实验要求 (25)三、实验重点与难点 (25)四、实验内容 (26)五、参考资料 (27)六、实验小结 (27)七、课后作业 (27)实验五教案查找算法的实现及比较 (28)一、实验目的 (28)二、实验要求 (28)三、实验重点与难点 (28)四、实验内容 (29)五、参考资料 (29)六、实验小结 (29)七、课后作业 (29)实验六教案综合实验 (30)一、实验目的 (30)二、实验要求 (30)三、实验重点与难点 (31)四、实验内容 (31)1.简易图书管理模拟系统 (31)2. 航空客运订票系统 (33)3. 校园导游咨询 (35)五、参考资料 (36)六、实验小结 (37)七、课后作业 (37)重庆邮电大学教师实验授课计划填表人:刘伯红填表时间:2012 年 9 月 10 日主讲教师:刘伯红辅导教师:刘伯红授课人数 132人教学部主任签名:方义秋二级学院院长签名:夏英《数据结构》C语言程序书写规范一、程序书写规范要求●头文件包含命令●符号常量的定义●数据逻辑结构类型的定义●各个子函数的定义(子函数完成各个功能)●主函数的定义(完成数据的输入、调用子函数实现功能、输出结果)二、C语言程序示例实现顺序表操作的C语言程序如下://头文件包含命令#include "stdio.h"//符号常量的定义#define maxsize 1024//数据逻辑结构类型的定义typedef char datatype;typedef struct{datatype data[maxsize]; //存放数据元素的数组int last; //最后一个元素的下标(从0开始)}sequenlist;//各个子函数的定义(子函数完成各个功能)//在第i(位置)个元素前插入元素xint insert(sequenlist *L,datatype x,int i){int j;if(L->last==maxsize-1)//如果线性表已满{printf("overflow");return 0;}else if((i<1)||(i>L->last+2))//插入位置不合理{printf("error,please input the right 'i'");return 0;}else{for(j=L->last;j>=i-1;j--)L->data[j+1]=L->data[j];L->data[i-1]=x;L->last=L->last+1;}return(1);}//删除第i(位置)个元素int dellist(sequenlist *L,int i){int k;if((i<1)||(i>L->last+1))//检查删除位置是否合法{printf("error,please input the right i");return 0;}else{for(k=i;k<=L->last;k++)L->data[k-1]=L->data[k];L->last=L->last-1;return(1);}}//建立顺序表,其元素为单个字符void creatlist(sequenlist *L){int n,i;char tmp;printf("请输入数据的个数:\n");scanf("%d",&n);for(i=0;i<n;i++){printf("data[%d]=",i);fflush(stdin);scanf("%c",&tmp);L->data[i]=tmp;}L->last=n-1;printf("\n");}//输出顺序表void printout(sequenlist *L){int i;for(i=0;i<=L->last;i++){printf("data[%d]",i);printf("%c\n",L->data[i]);}}//主函数的定义(完成数据的输入、调用子函数实现功能、输出结果及其他辅助功能)main(){sequenlist *L;char cmd,x;int i;L=(sequenlist *)malloc(sizeof(sequenlist));//指针初始化creatlist(L);printout(L);do{printf("i,I...插入\n");printf("d,D...删除\n");printf("q,Q...退出\n");do{fflush(stdin);//清除键盘缓冲区scanf("%c",&cmd);}while((cmd!='d')&&(cmd!='D')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')&&(cmd!='i')& &(cmd!='I'));switch(cmd){case 'i':case 'I':printf("请输入你要插入的数据:");fflush(stdin);scanf("%c",&x);printf("请输入你要插入的位置:");scanf("%d",&i);insert(L,x,i);printout(L);break;case 'd':case 'D':printf("请输入你要删除元素的位置:");fflush(stdin);scanf("%d",&i);dellist(L,i);printout(L);break;}}while((cmd!='q')&&(cmd!='Q'));}三、实验步骤1.问题分析和任务定义明确问题要求做什么,限制做什么。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验指导-数据结构B附录综合实验1、实验目的本课程的目标之一是使得学生学会如何从问题出发,分析数据,构造求解问题的数据结构和算法,培养学生进行较复杂程序设计的能力。
本课程实践性较强,为实现课程目标,要求学生完成一定数量的上机实验。
从而一方面使得学生加深对课内所学的各种数据的逻辑结构、存储表示和运算的方法等基本内容的理解,学习如何运用所学的数据结构和算法知识解决应用问题的方法;另一方面,在程序设计方法、C语言编程环境以及程序的调试和测试等方面得到必要的训练。
2、实验基本要求:1)学习使用自顶向下的分析方法,分析问题空间中存在哪些模块,明确这些模块之间的关系。
2)使用结构化的系统设计方法,将系统中存在的各个模块合理组织成层次结构,并明确定义各个结构体。
确定模块的主要数据结构和接口。
3)熟练使用C语言环境来实现或重用模块,从而实现系统的层次结构。
模块的实现包括结构体的定义和函数的实现。
4)学会利用数据结构所学知识设计结构清晰的算法和程序,并会分析所设计的算法的时间和空间复杂度。
5)所有的算法和实现均使用C语言进行描述,实验结束写出实验报告。
3、实验项目与内容:1、线性表的基本运算及多项式的算术运算内容:实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。
要求:能够正确演示线性表的查找、插入、删除运算。
实现多项式的加法和乘法运算操作。
2、二叉树的基本操作及哈夫曼编码译码系统的实现内容:创建一棵二叉树,实现先序、中序和后序遍历一棵二叉树,计算二叉树结点个数等操作。
哈夫曼编码/译码系统。
要求:能成功演示二叉树的有关运算,实现哈夫曼编码/译码的功能,运算完毕后能成功释放二叉树所有结点占用的系统内存。
3、图的基本运算及智能交通中的最佳路径选择问题内容:在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算法,实现图的深度和宽度优先遍历算法,解决智能交通中的路径选择问题。
设有n 个地点,编号为0~n-1,m条路径的起点、终点和代价由用户输入提供,寻找最佳路径方案(例如花费时间最少、路径长度最短、交通费用最小等,任选其一即可)。
要求:设计主函数,测试上述运算。
4、各种内排序算法的实现及性能比较内容:验证教材的各种内排序算法。
分析各种排序算法的时间复杂度。
要求:使用随机数产生器产生较大规模数据集合,运行上述各种排序算法,使用系统时钟测量各算法所需的实际时间,并进行比较。
4、实验报告范例:实验╳╳╳╳╳╳班级____________姓名____________学号____________日期____________1. 实验目的:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(扼要而准确地描述所求解的实验项目的目的。
)2. 实验任务:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(明确实验项目的任务和演示程序的主要功能。
)3. 实验内容:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(使用模块和流程图表示系统分析和设计的结果,描述各模块之间的层次结构,给出函数之间的调用关系和数据传递方式,给出核心算法的C源代码,并加上详细注释,分析主要算法的时间复杂度,必要时分析空间复杂度,给出算法分析的计算过程。
)4. 实验过程描述:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(列出实验所用的测试用例和相应的程序运行结果(需要程序运行结果的屏幕截图),总结本次实验,包括对测试结果的分析,测试和调试过程遇到问题的回顾和分析,软件设计与实现的经验和体会,进一步改进的设想。
)实验1 线性表及多项式的运算一、实验目的1、掌握线性表的两种基本存储结构及其应用场合:顺序存储和链接存储。
2、掌握顺序表和链表的各种基本操作算法。
3、理解线性表应用于多项式的实现算法。
二、实验内容1、参照程序2.1~2.7,编写程序,完成顺序表的初始化、查找、插入、删除、输出、撤销等操作。
2、已知带表头结点单链表的类型定义如下:typedef struct node{ElemType element; //结点的数据域struct node *link; //结点的指针域}node;typedef struct{struct node * head;int n;}headerList;参照程序2.8~2.14,编写程序,完成带表头结点单链表的初始化、查找、插入、删除、输出、撤销等操作。
3、以题2所示带表头结点单链表为存储结构,编写程序实现单链表的逆置操作。
(原单链表为(a0,a1,……,a n-1),逆置后为(a n-1,a n-2,……,a0),要求不引入新的存储空间)。
4、以题2所示带表头结点单链表为存储结构,编写程序实现将单链表排序成为有序单链表的操作。
5、已知带表头结点一元多项式的类型定义如下:typedef struct pNode{int coef;int exp;struct pNode* link;} pNode;typedef struct{struct pNode *head;} polynominal;编写程序实现一元多项式的创建、输出、撤销以及两个一元多项式相加和相乘的操作。
实验2 二叉树的基本操作及哈夫曼编码译码系统的实现一、实验目的1、掌握二叉树的二叉链表存储表示及遍历操作实现方法。
2、实现二叉树遍历运算的应用:求二叉树中叶子结点个数、结点总数、二叉树的高度、交换二叉树的左右子树等。
3、掌握二叉树的应用—哈夫曼编码的实现。
二、实验内容1、已知二叉树二叉链表结点结构定义如下:typedef struct BinaryTreeNode{T Data;struct BinaryTreeNode * LChild,* RChild;} BinaryTreeNode,* BinTree;参照程序5.1~5.4,编写程序,完成二叉树的先序创建、先序遍历、中序遍历、后序遍历等操作。
2、以题1所示二叉链表为存储结构,编写程序实现求二叉树结点个数、叶子结点个数、二叉树的高度以及交换二叉树所有左右子树的操作。
3、已知哈夫曼树结点结构定义如下:typedef{ElementType Data; //结点的数据域int w; //结点的权值int parent, lchild, rchild; //结点的双亲、左孩子、右孩子}HFMTNode;编写程序,实现哈夫曼树的创建、哈夫曼编码以及解码的实现。
实验3 图的基本运算及飞机换乘次数最少问题一、实验目的1、掌握图的邻接矩阵和邻接表的存储实现方法。
2、实现图的深度优先和宽度优先遍历运算。
3、学习使用图算法解决应用问题的方法。
二、实验内容1、已知图的邻接矩阵结构定义如下:typedef int ElemType;typedef struct{ElemType **a; //邻接矩阵int n; //图的当前顶点数int e; //图的当前边数ElemType noEdge; //两顶点间无边时的值} mGraph;参照程序9.1~9.5,编写程序,完成邻接矩阵的初始化、撤销、边的搜索、插入、删除等操作。
2、以题1所示邻接矩阵为存储结构,编写程序,实现图的深度、宽度优先遍历。
3、已知图的邻接表结构定义如下:typedef struct eNode{int adjVex; //任意顶点u相邻接的顶点ElemType w; //边的权值struct eNode* nextArc; //指向下一个边结点}eNode;typedef struct{int n; //图的当前顶点数int e; //图的当前边数eNode **a; //指向一维指针数组}lGraph;参照程序9.6~9.10,编写程序,完成邻接表的初始化、撤销、边的搜索、插入、删除等操作。
4、以题3所示邻接表为存储结构,编写程序,实现图的深度、宽度优先遍历。
5、编写程序,实现飞机最少换乘次数问题:设有n个城市,编号为0~n-1,m条航线的起点和终点由用户输入提供。
一条换乘次数最少的线路方案。
(提示:可以使用有向图表示城市间的航线;只要两个城市间有航班,则图中这两点间存在一条权为1的边;可以使用Dijkstra算法实现)精品文档实验4 各种内排序算法的实现及性能比较一、实验目的1、掌握各种内排序算法的实现方法。
2、学会分析各种内排序算法的时间复杂度。
二、实验内容1、已知待排序序列以顺序表结构实现,数据元素以及表结构定义如下:typedef struct entry //数据元素{KeyType key; //排序关键字,KeyType应该为可比较类型DataType data; //data包含数据元素中的其他数据项};typedef struct list{ //顺序表int n; //待排序数据元素数量Entry D[MaxSize]; //静态数组存储数据元素}List;参照程序10.1~10.7,编写算法,分别实现顺序表的简单选择排序、直接插入排序、冒泡排序、快速排序、两路合并排序以及堆排序。
2、编写算法,利用随机函数,在文件中随机产生n个关键字。
(关键字定义为整型数据)3、编写程序,分别验证在简单选择排序、直接插入排序、冒泡排序、快速排序、两路合并排序以及堆排序,在待排序关键字个数为500、10000、50000、100000时,完成排序所需要的时间。
(单位为:毫秒)4、将排序结果存放于excel工作表中,并以图表(簇状柱形图)的方式显示。
收集于网络,如有侵权请联系管理员删除。