09125070 数据结构与算法实验指导书

合集下载

数据结构与算法实习_实验指导书

数据结构与算法实习_实验指导书

数据结构与算法实习_实验指导书数据结构与算法课程实习实验指导书目录实验一顺序表的基本操作 (2)实验二链表的基本操作 (3)实验三二叉树的基本操作 (4)实验四综合应用 (5)附录A 实验报告示例 (9)附录B实验报告封面、评语得分表 (12)实验一顺序表的基本操作【实验目的】1、掌握顺序存储的概念,学会对顺序表的基本操作。

2、加深对顺序存储数据结构的理解,逐步培养解决实际问题的能力。

【实验性质】设计型实验【实验内容】1、实现顺序表显示;2、实现顺序表插入;3、实现顺序表查找(显示比较次数);4、实现顺序表删除(显示移动次数);5、实现顺序表排序(分别实现简单选择、快速,显示比较次数、移动次数);6、实现顺序表的折半查找(显示比较次数);7、编程实现一个顺序表的就地逆置,即利用原表的存储空间将顺序表逆置;8顺序表有序插入(显示比较次数、移动次数),屏幕提示后,从键盘输入一个元素值,在经过排序的线性表中插入这个元素;屏幕显示比较次数和移动次数,应有溢出判断和报告;9、要求以较高的效率实现删除顺序表中元素值在x到y(x和y自定)之间的所有元素;10、编程实现将两个非递减的顺序表进行合并,要求同样的数据元素只出现一次;*11、编程实现顺序表的shell排序(步长为5, 3,1);*12、编程实现堆排序算法;*13、利用三元组顺序表存储矩阵,实现矩阵的转置(请独立写程序实现)。

【实验环境】VC++ 6.0【实验要求】将如上文件保存在命名为学号+姓名”勺文件夹中并上传到指定的服务器。

实验二链表的基本操作【实验目的】1、掌握链表的概念,学会对链表进行操作。

2、加深对链式存储结构的理解,逐步培养解决实际问题的编程能力。

【实验性质】设计型实验【实验内容】1、实现单链表的创建;2、实现单链表的显示;3、实现单链表的查找(显示比较次数);4、实现单链表的插入;5、实现单链表的删除(显示比较次数);6、对已创建的链表(数据不限)进行直接插入排序;7、将链接存储线性表逆置,即最后一个结点变成第1个结点,原来倒数第2个结点变成第2个结点,如此等等;8、生成有序的两个单链表A和B (链表的数据和个数自定),其首结点指针分别为a 和b,要求将两个单链表合并为一个有序的单链表C,其首结点指针为c,并且合并后的单链表的数据不重复;9、将一个首结点指针为a的单链表A分解成两个单链表A和B,其首结点指针分别为a和b,使得链表A中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序;10、请编程实现链栈的基本操作函数,并通过调用这些基本函数,实现十进制和八进制转换的功能。

数据结构实验指导书(新版)

数据结构实验指导书(新版)

《数据结构和算法》实验指导书实验及学时数分配序号实验名称学时数(小时)1 实验一线性表 42 实验二树和二叉树 23 实验三图 24 实验四查找 25 实验五内部排序 2合计12几点要求:一、上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。

二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。

上机时签到;下机时验收签字。

三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。

实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。

1、通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)2、指定一个元素,在此元素之前插入一个新元素;(从键盘接受插入位置i,和要插入的元素值;实现插入;显示插入后的线性表)3、指定一个元素,删除此元素。

《数据结构与算法》实验指导书(计科101)

《数据结构与算法》实验指导书(计科101)

职业技术、职业师范学院《数据结构和算法》实验指导书适用专业:计算机科学与技术专业贵州大学二OO九年二月前言数据结构和算法是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。

基于以上的三点要求,在编写这本实验指导书时贯穿这样的中心思想:让读者通过实验课,理论结合实践,达到这三点要求。

读者在使用这本书时,要以这三点要求为出发点,力求理解结构、掌握算法、读懂程序。

依据理论课的讲授情况,本书的实验安排以表(包括有序表、链表等),树,图三个基本的数据结构为重点。

实验一:有序表的建立、插入与删除实验学时:2实验类型:验证实验要求:必修一、实验目的1、了解有序表的顺序存贮结构。

2、掌握有序表元素在内存中是怎样存贮的。

二、实验内容在有序表中实现如下操作:1、插入一个新元素到第i个位置。

使原来标号为增1。

2、删除第i个位置的元素。

3、存一个新元素到第i个位置。

4、读表5、检索表中第i个元素。

6、求表的长度三、实验原理、方法和手段1、插入一个新元素到第i个位置,既把元素ai向后移一个位置,成为元素ai+1,把新元素放入到第i个位置,其他元素依次后移。

存一新元素到第i个位置是把元素ai冲掉后存上新值。

删除第i个元素就是把余后的元素依次向前移一个位置。

即:以元素ai+1,ai+2,···,依次取代ai,ai+1,···。

删除后的表长是n-1(n是原表长)。

4、参考程序/* 有序表的建立、插入与删除 */static int array[100];int j,i,n,p;int ch;void du(){printf("please tell me which numbers do you operate:");scanf("%d",&i);while (i>n){printf("ERROR,please enter new element");scanf("%d",&i);}}void da(){printf("the list is:");for(j=0;j<n;j++)printf("%3d",array[j]);printf("\n");}void show(){printf("-----------------------------------\n"); printf(" the function of the list\n");printf(" 1: insert\n");printf(" 2: delete\n");printf(" 3: save new element\n");printf(" 4: read list\n");printf(" 5: check\n");printf(" 6: the length of the list\n");printf(" 0: end\n");printf("-----------------------------------\n"); }main(){printf("please input the length of list:");scanf("%d",&n);printf("\n");printf("please enter number:");for (i=0;i<n;i++)scanf("%d",&array[i]);p=1;while (p!=0){show();printf ("enter p: ");scanf("%d",&p);if(p>=0&&p<=6){switch(p){case 1:printf("the inserted number places the front of the operation\n");du();for (j=n-1;j>=i-1;j--)array[j+1]=array[j];printf("please enter number:\n");scanf("%d",&ch);array[i-1]=ch;n+=1;da();break;case 2:du();for(j=i-1;j<=n;j++)array[j]=array[j+1];n-=1;da();break;case 3:du();printf("please enter new number:\n");scanf("%d",&ch);printf("\n");array[i-1]=ch;da();break;case 4:da();break;case 5:du();printf("what is the %d number:",i);printf("%3d\n",array[i-1]);break;case 6:printf("the length of the list is:");printf("%3d\n",n);break;case 0: p=0; break;}}}printf("ERROR,please enter new number\n");}四、实验组织运行要求本实验根据课堂教学进度,讲授相关知识后组织到计算机实验室进行实验。

数据结构实验指导书(2009)

数据结构实验指导书(2009)

《数据结构与算法》实验指导书马晓波秦俊平刘利民编内蒙古工业大学信息工程学院计算机系2009年3月1日《数据结构与算法》实验教学大纲三、实验目的、内容与要求实验一线性表的创建与访问算法设计(4学时)(一)实验目的数据结构于算法实验是计算机类本科学生计算机软件知识重要的实验环节,它将使学生从实践上学会用高级语言程序设计、实现复杂的数据结构,为大型软件设计奠定基础。

本实验以某种线性表的创建与访问算法设计作为实验内容,举一反三,全面、深刻掌握线性结构的实现方法,培养解决问题的能力。

(二)实验内容1、编写生成线性表的函数,线性表的元素从键盘输入;2、编写在线性表中插入元素的函数;3、编写在线性表中删除元素的函数;4、编写输出线性表的函数;5、编写主函数,调用以上各函数,以便能观察出原线性表以及作了插入或删除后线性表的屏幕输出。

方案一采用顺序存储结构实现线性表。

方案二采用单链表结构实现线性表。

(三)实验要求1、掌握线性结构的机器内表示;2、掌握线性结构之上的算法设计与实现;3、列表对比分析两种数据结构的相应操作的时间复杂度、空间复杂度,阐明产生差异的原因。

实验二二叉树的创建与访问算法设计(4学时)(一)实验目的本实验以二叉树的创建与访问算法设计作为实验内容,掌握树型结构的实现方法,培养解决负责问题的能力。

(二)实验内容1、编写生成二叉树的函数,二叉树的元素从键盘输入;2、编写在二叉树中插入元素的函数;3、编写在二叉树中删除元素的函数;4、编写遍历并输出二叉树的函数。

方案一采用递归算法实现二叉树遍历算法。

方案二采用非递归算法实现二叉树遍历算法。

(三)实验要求1、掌握树型结构的机器内表示;2、掌握树型结构之上的算法设计与实现;3、列表对比分析两种数据结构的相应操作的时间复杂度、空间复杂度,阐明产生差异的原因。

实验三图的创建与访问算法设计(4学时)(一)实验目的本实验以图的创建与访问算法设计作为实验内容,掌握图型结构的实现方法,培养解决负责问题的能力。

数据结构C版实验指导

数据结构C版实验指导

《数据结构与算法》实验指导书一、实验课程教学目的和要求《数据结构与算法》是一门实践性很强的课程,光靠读书和做习题是不能提高实践能力的。

《数据结构与算法》的实验与程序设计语言课程中的实验不同,后者更多的强调语言方面的功能实现,而前者更接近实际,需要同学们自己分析问题,设计模型和算法,再上机调试完成。

《数据结构与算法》的实验的目的主要有两个:1)深化理解书本上的理论知识,将书本的知识变“活”(为已掌握,为已活用);2)理论和实践相结合,学会将相关的数据结构和算法应用于解决实际问题,培养数据结构的应用能力和软件工程所需要的实践能力。

《数据结构与算法》的实验类型1)验证性实验—主要是验证教材中已有的数据结构和算法。

2)设计性实验—针对具体问题,应用某一个知识点,自己设计数据结构和算法,培养对数据结构的简单运用能力。

3)综合性实验—针对具体问题,应用某几个知识点,自己设计数据结构和算法,培养对数据结构的综合运用能力。

《数据结构与算法》的实验安排《数据结构与算法》实验的一般步骤1)需求分析:要对简单的问题描述进行详细的分析,充分理解问题,明确问题要求做什么,有什么数据,边界条件……。

2)概要设计:针对问题描述中涉及到数据定义抽象数据类型,设计数据结构和算法模型。

本部分不必考虑实现的细节。

3)详细设计:设计具体的存储结构(用C++或C语言)。

此外,还要设计对象或函数间的调用关系及输入输出。

4)上机调试(运行代码,修正语法及逻辑错误)5)结果与总结《数据结构与算法》的实验要求:1)完成实验预习;2)完成并上交实验报告;3)完成电子设计文档预习/实验报告的格式要求:1)实验名称2)实验目的3)实验内容及要求4)概要设计:ADT5)详细设计:C++类或C函数6)调试分析:7)结果与总结实验一: 顺序表的操作一、实验目的:1)掌握线性表的顺序存储结构与算法实现;3)掌握顺序表的逻辑插入方法。

二、实验内容及要求:实现对有序的顺序表L进行保序插入的(C++或C)算法提示:主函数构建n个整数的顺序表L并调用输出函数;调用保序插入函数实现插入操作并调用输出函数输出。

数据结构与算法基础实验指导书

数据结构与算法基础实验指导书

数据结构与算法基础实验指导书实验1 线性表及其应用实验目的1.掌握线性表顺序存储结构的特点及线性表在顺序存储结构中各种基本操作的实现。

2.掌握线性表链式存储结构的特点及线性表在链式存储结构中各种基本操作的实现。

3.重点巩固和体会线性表在链式存储结构上的各种操作和应用。

实验要求对学生要求:1.掌握单向链表的存储特点及其实现。

2.掌握单向链表的插入、删除算法及其应用算法的程序实现。

3.掌握多项式的代数运算算法。

4.根据算法编写与实验内容相关的程序,要求该程序的多项式动态输入输出。

对实验指导教师要求:1.掌握单向链表的存储特点及其实现。

2.掌握单向链表的插入、删除算法及其应用算法的程序实现。

3.编写并运行该题目程序代码,具有该题目的参考答案。

5.深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。

实验内容采用链式结构实现任意多项式的存储,求两个多项式的和。

实验评分标准一.课堂表现(10分)1.出勤情况(按时,迟到,早退,缺席)2.是否遵守课堂纪律二.实验结果(50分)1.当堂按时完成(10)2.独立完成(10),(和同学协商完成,在老师帮助下完成)3.结果正确无误(10)4.功能齐全,界面美观,具有较好演示效果(10)5.在源程序中有必要的注释和说明(5)6.程序文档齐全(5)三.实验报告(40)1.对预习要求的回答(10)2.实验过程中遇到的问题如何解决的(10)3.实验的体会(10)4.思考题(10)实验2 树及其应用实验目的1.掌握树的链式存储方式及其操作实现(创建、遍历、查找等)。

2.掌握二叉树用不同方法表示所对应的不同输入形式。

3.掌握二叉树中各种重要性质在解决实际问题中的应用。

4.掌握哈夫曼树的构造方法及其编码方法。

5.掌握二叉排序树的特性及其构造方法。

实验要求对学生要求:1.掌握二叉树的链式存储特点及其实现。

2.掌握二叉树的创建、遍历、查找算法及其程序实现。

《数据结构与算法》实验指导书.

《数据结构与算法》实验指导书.

《数据结构与算法》实验指导书实验1 顺序表一、实验目的(1)掌握顺序表的逻辑结构、存储结构及描述方式。

(2)掌握顺序表的定位、插入、删除等操作。

二、实验要求(1)调试程序要记录调试过程中出现的问题及解决办法;(2)给出每个问题的算法或画出流程图;(3)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验;(4)做完实验后给出本实验的实验报告。

三、实验设备、环境奔腾以上计算机,装有Turbo C 2.0或Visual C++软件四、实验步骤及内容实验步骤:1.根据题目,编写程序。

2.上机调试通过。

3.按照金陵科技学院实验报告格式,撰写各实验报告。

实验内容:(1)编写一个函数print_all_data,该函数的作用是逐个输出顺序表中所有数据元素的值。

编写主函数,从键盘输入顺序表,调用函数print_all_data,测试结果。

(2)编写顺序表定位操作函数locata,该函数的作用是在顺序表中查找是否存在数据元素的值与变量x的值相等。

如果存在满足条件的数据元素,则返回顺序表中和x值相等的第1个数据元素在表中的下标;如果不存在,则返回-1。

编写主函数,从键盘输入顺序表,以及变量x的值,调用函数locate,测试结果。

(3)编写一个函数insert,该函数的作用是在递增有序的顺序表中插入一个新结点x,要求保持顺序表的有序性,输出插入前后顺序表状态。

编写主函数,从键盘输入顺序表以及变量x的值,调用函数insert,测试结果。

(4)编写一个函数delete,该函数的作用是删除顺序表中所有等于X的数据元素。

若顺序表中没有满足条件的数据元素,则输出合适的信息。

若有满足条件的数据元素,则输出删除前后顺序表状态。

编写主函数,从键盘输入顺序表以及变量x的值,调用函数delete,测试结果。

五、讨论、思考题1、如何在排列有序的顺序表中插入新元素,而保证顺序表的有序性?2、如何在排列有序的顺序表中删除某元素,而保证顺序表的有序性?实验2 单链表一、实验目的(1)掌握单链表的逻辑结构、存储结构及描述方式。

综合实践1(数据结构与算法分析)指导书

综合实践1(数据结构与算法分析)指导书

综合实践1(数据结构与算法分析)指导书一、目的和要求数据结构与算法分析综合实践不仅是数据结构与算法分析课程的实践教学环节,而且是一门综合性实验项目。

通过这个实践环节,培养学生综合运用数据结构与算法分析基本知识和程序设计基本知识,解决实际问题,提高程序设计与调试程序的能力。

本综合实践的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

具体要求如下:1.学生通过实践掌握线性表、树、图等数据结构的存储结构及算法实现;2.培养利用数据结构知识和基本算法设计方法解决实际问题的能力;3.初步具备查阅资料、分析设计、上机实现和书写科技报告的能力;4.掌握程序测试和调试技术。

二、综合实践的内容及时间安排综合实践要求独立完成,题目自选(参考题目见附录,也可自拟),但需要老师确认,一人一题,要求有界面进行功能的选择,只能用文件存储数据和处理数据不能使用数据库。

要求在教学周的第16周前完成。

综合实践设计报告内容如下:1、问题描述与分析在该部分先叙述要解决的问题,并给出解决问题的每个模块的功能要求。

2、数据结构设计和基本算法设计方法的选择为完成题目所选择的数据逻辑结构、存储结构及相应算法,说明原因和合理性(主要的成绩考核项,这项内容如果没有,成绩为不合格)。

3、软件结构设计在此说明软件的构架,模块之间的关系。

4、算法设计各个算法的流程图或类C语言描述的算法,算法实现的源程序以及算法分析。

源程序要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

5、调试分析选择测试数据,测试输出的结果,时间复杂度和空间复杂度的分析。

6、总结1)综合实践过程的收获;2)遇到问题以及解决问题的思路和方法;3)程序调试能力的思考;4)在综合实践设计过程中对《数据结构与算法分析》课程的认识等内容。

三、基本要求1、参加综合实践的学生要珍惜机会、勤奋工作、勇于创新、勇于探索、勇于实践,虚心向指导教师请教,向同学学习,独立完成设计任务。

数据结构实验指导书(新版)

数据结构实验指导书(新版)

《数据结构与算法》实验指导书实验及学时数分配几点要求:一、上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。

二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。

上机时签到;下机时验收签字。

三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。

实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。

1、通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)2、指定一个元素,在此元素之前插入一个新元素;(从键盘接受插入位置i,和要插入的元素值;实现插入;显示插入后的线性表)3、指定一个元素,删除此元素。

(从键盘接受删除元素位置i,实现删除;显示删除后的线性表)二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素。

《数据结构与算法实验》实验指导

《数据结构与算法实验》实验指导

湖北汽车工业学院实验报告班号序号姓名课程名称数据结构与算法实验第 1 号实验完成日期年月日午实验一线性表操作一、实验目的1.掌握用 C语言调试程序的基本方法。

2. 掌握结构体类型的基本用法。

3.掌握线性表的基本运算,包括顺序表和链表的基本操作,如插入、删除等。

二、实验内容1.利用顺序表完成一个班级的一个学期的所有课程的管理:能够增加、删除、修改学生的成绩记录。

2.建立一个单链表,同时对该链表实现指定位置的插入、删除操作。

三、实验操作(在空白处填上合适的代码)(一)利用顺序表完成一个班级学生课程成绩的简单管理1、预定义以及顺序表结构类型的定义(1)#define ListSize //根据需要自己设定一个班级能够容纳的最大学生数(2)typedef struct Stu{int num; //学生的学号char name[10]; //学生的姓名float wuli; //物理成绩float shuxue; //数学成绩float yingyu; //英语成绩}STUDENT; //存放单个学生信息的结构体类型typedef struct List{stu[ListSize]; //存放学生的数组定义,静态分配空间int length; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型2、建立班级的学生信息void listcreate(LIST *Li,int m) //m为该班级的实际人数{int i;Li->length=0;for(i=0;i<m;i++) //输入m个学生的所有信息{printf("please input the %dth student's information:\n",i+1);printf("num=");scanf("%d", ); //输入第i个学生的学号printf("name=");scanf("%s", ); //输入第i个学生的姓名printf("wuli=");scanf("%f", ); //输入第i个学生的物理成绩printf("shuxue=");scanf("%f", ); //输入第i个学生的数学成绩printf("yingyu=");scanf("%f", ); //输入第i个学生的英语成绩Li->length++; //学生人数加1}}3、插入一个学生信息int listinsert(LIST *Li,int i) //将学生插入到班级Li的第i个位置。

数据结构与算法设计实验指导书

数据结构与算法设计实验指导书

数据结构与算法设计实验指导书实验1顺序表的操作一、实验目的通过对线性表的一些基本的操作和具体的函数实现,深入理解线性表的逻辑结构特性;了解并掌握线性表的顺序存储结构的描述方法与顺序表的基本操作(建立、插入)的实现算法及各函数间的调用关系;熟练掌握对程序的输入、编辑、调试和运行过程。

二、实验内容程序编程类题目:顺序表的操作:实现顺序表的建立、插入等。

题目:设线性表中的数据元素是按值非递减有序排列的,试以顺序存储结构,编写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。

解:本题的算法思想是:先找到适当的位置,然后后移元素空出一个位置,再将 x 插入,并返回向量的新长度三、实验步骤1.问题理解和分析充分地分析和理解问题本身,弄清要求做什么。

2.上机前程序静态检查静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解程序而深入全面地理解程序逻辑。

3.程序调试和运行用多组不同的数据进行测试,记录测试数据和运行输出及结果4.完成实验报告按实验报告的要求完成书写工作。

实验2单链表的操作一、实验目的通过对单链表的一些基本的操作和具体的函数实现,深入理解线性表的逻辑结构特性;了解并掌握单链表的存储结构的描述方法与单链表的基本操作(建立、插入)的实现算法及各函数间的调用关系。

二、实验内容程序编程类题目:单链表的操作:实现单链表的建立;插入等。

题目:设线性表中的数据元素是按值非递减有序排列的,试以链式存储结构,编写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。

解:本题算法的思想是先建立一个待插入的结点,然后依次与链表中的各结点的数据域比较大小,找到插入该结点的位置,最后插入该结点。

三、实验步骤1.问题理解和分析充分地分析和理解问题本身,弄清要求做什么。

2.上机前程序静态检查静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解程序而深入全面地理解程序逻辑。

《算法与数据结构》实验指导书

《算法与数据结构》实验指导书

《算法与数据结构》吴景岚王润鸿编撰闽江学院计算机实验教学中心印制目录前言 (1)实验一顺序表基本操作的实现 (2)实验二链表基本操作的实现 (4)实验三串基本操作的实现 (7)实验四二叉树基本操作的实现 (9)实验五图基本操作的实现 (12)前言《数据结构》是计算机科学与技术、软件工程等专业的专业基础必修课,主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法进行分析和评价。

本课程的学习应使学生深刻地理解数据结构的逻辑结构和物理结构的基本概念及有关算法,培养学生基本的、良好的程序设计技能以及针对具体问题,选择适当的数据结构,设计出有效算法的能力。

《数据结构》是一门理论和实践相结合的课程,它在整个计算机专业教学体系中处于举足轻重的地位,是计算机科学的算法理论基础和软件设计的技术基础,其上机实验的目的主要是编程实现数据结构各章的主要算法,训练学生实际动手进行程序设计和程序调试的能力,加深对数据结构相关概念和算法的理解。

实验一顺序表基本操作的实现专业:计算机科学系嵌入式应用班级: 2班学号: 3141101212 姓名:粟代琼实验地点:工A207 实验时间: 2015 10 15 指导教师:陈雄峰【实验课程名称】算法与数据结构【实验项目名称】顺序表基本操作的实现一、实验目的1掌握线性表顺序存储基本操作;2学会设计实验数据验证程序。

二、实验仪器及环境计算机,window xp操作系统,VC++6.0三、实验内容及步骤线性表顺序存储基本操作存储结构定义:#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量typedef struct{ElemType *elem; //存储空间基址int length;//当前长度int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)}SqList;实现的基本操作:InitList( &L )操作结果:构造一个空的线性表 L 。

《数据结构与算法》实验指导书16

《数据结构与算法》实验指导书16

《算法与数据结构》实验指导书.目录第一部分算法与数据结构课程实验概述 (1)一.实验目的 (1)二.实验要求 (1)2.1实验步骤 (1)2.2实验报告格式 (2)第二部分上机实验内容 (3)实验一迷宫问题 (3)实验二锦标赛问题 (4)实验三 Kruskal算法的设计 (6)实验四哈夫曼编码 (7)实验五树和二叉树 (8)实验六查找和排序 (10)附:实验(设计)报告封面 (11)附:实验(设计)报告参考格式 (11)其中实验一、实验二选择其中一题完成,实验三、实验四选择其中一题完成。

第一部分算法与数据结构课程实验概述一.实验目的《算法与数据结构》是计算机专业的主干课程和必修课程之一,其目的是让大家学习、分析和研究数据对象特征,掌握数据组织方法和计算机的表示方法,以便选择合适的数据逻辑结构和存储结构,设计相应的运算操作,把现实世界中的问题转化为计算机内部的表示与处理的方法,要求掌握算法的时间、空间复杂度分析基本技术,培养良好的程序设计风格,掌握进行复杂程序设计的技能。

在计算机科学领域,尤其是在系统软件和应用软件的设计和应用中要用到各种数据结构,因此,掌握数据结构对提高软件设计和程序编制水平有很大的帮助。

二.实验要求2.1实验步骤设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。

因此必须严格执行良好的实验步骤规范(包括上机操作规范)。

本课程实验的基本步骤是:2.1.1问题分析充分地分析和理解问题本身,明确问题要求做什么。

对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。

例如;输入、输出数据的类型、值的范围以及形式等。

同时为调试程序准备好测试数据,包含合法的输入数据和非法形式输入的数据。

2.1.2设计和编码设计即是对问题描述中涉及的操作对象定义相应的数据类型,定义主程序模块和各抽象数据类型;定义相应的存储结构并写出各过程和函数的伪码算法。

数据结构与算法实验指导书

数据结构与算法实验指导书

《数据结构与算法》实验指导书基本要求1.学生必须按时到实验室做实验,不得迟到早退,未经老师批准不得中途离开。

凡迟到者,应给予批评并作适当扣分。

实验课迟到20分钟以上及无故缺席者视为旷课,旷课者不予补做实验,本次实验以零分计。

学生因病或特殊情况不能按时到实验室做实验时,应办理正常请假手续。

请病假必须有医生签字的病假条,请事假必须有班主任签字的事假条。

不符合请假手续的,以旷课论处。

请假的学生由指导教师安排补做实验。

对于未做实验数达三分之一以上(含三分之一)的学生,实验课程按0分计。

2.学生在每次实验课之前,应仔细阅读实验教材,查阅相关的资料,写出预习报告。

预习报告的具体容包括:实验容、实验目的、实验原理图、实验步骤、实验数据记录表格等。

实验课前由任课教师检查预习报告,未写预习报告者不予做实验。

3.做实验前,了解设备的原理和正确使用方法。

在没有弄懂仪器设备的使用方法前,不得贸然使用,否则因使用不当造成仪器设备损坏的,根据民族学院《仪器设备损坏丢失处理暂行办法》规定进行处理。

实验室设备在实验过程中不准任意搬动和调换,非本次实验所用仪器设备,未经指导教师允许不得动用。

4.要求每位学生在实验过程中,要具有严谨的学习态度、认真、踏实、一丝不苟的科学作风。

实验过程中学生按照预习的容进行实验,且重视实验的调试过程,学会如何根据实验现象判断问题所在。

坚持每次实验都要亲自动手,不可“坐车”,每个实验每个学生都要独立完成,不允许抄袭,无特殊原因,中途不得退出实验,否则本次实验无效。

5.实验中若接线、改接、拆线都必须在切断电源的情况下进行,线路连接完毕再送电。

实验中,特别是设备刚投入运行时,要随时注意仪器设备的运行情况,如发现有过热、异味、冒烟、火花等,应立即断电,并请指导老师检查、处理。

6.实验过程中,如出现事故,就马上拉开电源开关,然后找指导教师和实验技术人员,如实反映事故情况,并分析原因和处理事故。

如有损坏仪表和设备时,应马上提出,按有关规定处理。

数据结构实验指导书

数据结构实验指导书

《数据结构与算法》实验指导书2013年8月目录实验一 C语言编程复习 (3)实验二线形表基本操作的实现 (7)实验三栈和队列基本操作的实现及应用 (18)实验四二叉树算法的实现 (33)实验五图的算法的实现 (49)实验六查找算法的实现 (69)实验七排序算法的实现 (81)实验一 C语言编程复习一、实验目的1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。

2.理解指针与应用的区别。

3.掌握结构体的使用。

4.掌握简单排序方法。

二、实验内容(1)输入一行字符,计算该行字符中包含多少个单词,单词之间用空格分隔开。

(2)利用add函数求两个复数2+3i和4+5i的和。

(要求用结构体来定义复数)(3)一个班上有30名学生,每个学生的数据作为一个记录,每个记录包括学号、姓名、三门课程的成绩和三门课程平均成绩。

从键盘输入学生的学号、姓名及三门课的成绩。

要求打印三门课程平均成绩最高分的学生记录。

三、实验步骤(1)用数组或字符串获取字符,碰到空格即表示新单词的开始。

(2)要求用结构体来定义复数,包括实部和虚部。

(3)定义一个Student的结构体类型,包含学号、姓名、成绩等成员。

四、实现提示struct student{ char num[6];string name;float score[3];float aver;};五、思考与提高思考为何void Swap1(Student, Student )这个函数无法实现两个学生的交换?六、完整参考程序1、#include <iostream>#include <string>using namespace std;void main(){cout<<"输入n个单词,单词之间用空格隔开"<<endl;string str;getline(cin,str);int num=0;int len=str.size();if(len!=0) num=1;for(int i=0;i<len;i++){if(str[i]==' '){num++;}}cout<<"单词个数为:"<<num<<endl;}也可使用数组实现:#include <iostream>using namespace std;void main(){cout<<"输入n个单词,单词之间用空格隔开"<<endl;char str[100];cin>>str;int num=0;for(int i=0;str[i]!='\0';i++){if(str[i]=' '){num++;}}cout<<"单词个数为:"<<num<<endl;}2、#include<iostream>using namespace std;struct complex{float real;float imag;};complex add(complex x1,complex x2){complex sum;sum.real=x1.real+x2.real;sum.imag=x1.imag+x2.imag;return sum;};void main(){complex x1={2,3},x2={4,5},sum;complex add(complex x1,complex x2);sum=add(x1,x2);cout<<"x1="<<x1.real<<"+"<<x1.imag<<"i"<<" "<<"x2="<<x2.real<<"+"<<x2.imag<<"i"<<endl;cout<<"x1+x2="<<sum.real<<"+"<<sum.imag<<"i"<<endl; }3、#include <iostream>#include<string>#include <iomanip>using namespace std;const int n=3;struct student{ char num[6];string name;float score[3];float aver;};int main(){ int i,j,maxi,max,sum;float average;student stud[n];for (i=0;i<n;i++) //输入学生和成绩信息{cout<<"input scores of student "<<i+1<<endl;cout<<"number:";cin>>stud[i].num;cout<<"name:";cin>>stud[i].name;for (j=0;j<3;j++){cout<<"score "<<j+1<<":";cin>>stud[i].score[j];}cout<<endl;} //输入学生和成绩信息average=0;max=0;maxi=0;for (i=0;i<n;i++){sum=0;for (j=0;j<3;j++) //计算每个同学总成绩sum+=stud[i].score[j];stud[i].aver=sum/3.0; //计算每个同学平均成绩if (sum>max) //将某同学平均成绩与目前的最高平均成绩进行比较选择高的那个为最新最高平均成绩{max=sum;maxi=i;}}cout<<" score1 score2 score3 average"<<endl;for (i=0;i<n;i++) //输出所有同学成绩信息{cout<<setw(8)<<stud[i].num<<" "<<setw(10)<<stud[i].name<<" ";for (j=0;j<3;j++)cout<<setw(3)<<stud[i].score[j]<<" ";cout<<stud[i].aver<<endl; } //输出所有同学成绩信息cout<<"The highest score is :"<<stud[maxi].num<<", "<<stud[maxi].name<<", "<<"The average is:"<<stud[maxi].aver;cout<<", three scores:"; //输出最高平均成绩的同学信息for(j=0;j<3;j++)cout<<stud[maxi].score[j]<<" ";cout<<endl;return 0;}实验二线形表基本操作的实现一、实验目的1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。

《数据结构与算法》实验要求与指导

《数据结构与算法》实验要求与指导

《数据结构与算法》实验要求与指导(一)远程教育辅导教师基本条件(要求)1. 熟练掌握C语言及其调试开发环境;2. 具有用C语言编写调试中等规模以上(数百行源码)程序的经验;3. 掌握《数据结构与算法》课程有关的知识, 具有较好的算法设计和分析的能力;4. 有一定的教学经验。

(二)算法实验要求综述根据目前远程教育计算机专业的学生的实际情况和他们的 C语言基础,严格按照本科教学要求进行算法实验上机并完成相应的实验报告, 对多数学生是有一定困难的. 为适应不同基础的学生循序渐进地学习,我们把实验要求分成四个层次, 希望学生不断往更高层次要求自己, 最终能达到本课程的实验基本要求.这四个层次的要求是:一. 以熟练使用c语言的开发环境(如TC2.0或VC6.0)为主,进行简单问题的程序设计和调试分析二. 编写主程序调用调试教材中描述并在课堂中详细讲解过的算法三. 完成习题中的算法设计题并书写实验报告四. 独立完成一个小的应用系统并规范书写实验报告,以进一步提高算法描述和算法分析的能力以上一至三层次作为本课程的基本实验要求,第四层次作为有能力的学生的提高要求。

实验辅导教师也可以根据当地学生的具体情况, 本着能提高学生两个能力(C语言的编程和调试能力, 算法设计和分析能力)的目的, 循序渐进地引导学生掌握算法和程序的上机实验, 并参考《题集》的实验报告范例书写实验报告。

按教学计划,本课程实验课时为15学时,安排6-7次实验。

由于课时数有限,要求学生在实验前作好充分准备,否则很难在两个学时内完成相关的上机与调试。

上机前的准备工作主要有两项:一是仔细阅读理解书中的相关算法,需要写解题算法的还要在纸上写好算法;二是准备好要调试算法的数据,并写好调用算法的主程序。

实验1至实验6都分为A、B两个实验。

A实验对应第二层次的能力培养训练,B实验对应第三层次的能力培养训练。

下面就每一层次的要求作如下说明。

一. 以熟练使用c语言的开发环境(如TC2.0或VC6.0)为主,进行一般问题的程序设计和调试分析该能力实际上是预修课C语言的要求,由于有相当部分学生C语言掌握不是很好, 影响了数据结构算法的描述和理解. 所以开始应该注意弥补C语言的能力. 根据经验, C语言中函数定义与调用(形参和实参的对应等), 指针, 类型定义与使用、结构的定义和使用、动态内存的申请等难点却是数据结构算法描述的重点, C语言的这些障碍严重影响了学生对数据结构与算法的理解,也影响了学习数据结构的兴趣. 所以实验指导教师在鼓励学生主动补习C语言知识的同时, 有意识安排一些符合学生基础的程序设计练习作为本课程实验的前导补充. 与本课程的相公的算法题目可以推后几周上机.本实验教学计划的预备实验(即实验0)是为完成该任务而设计的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构与算法》实验指导书商学院管理科学与工程系2015年8月实验一线性表及其应用(4学时)一、实验目的1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。

2.掌握线性表的顺序存储结构的定义及C语言实现。

3.掌握线性表的链式存储结构——单链表的定义及C语言实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容1.顺序线性表的建立、插入及删除。

2.链式线性表的建立、插入及删除。

三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。

2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。

3.建立一个带头结点的单链表,结点的值域为整型数据。

要求将用户输入的数据按尾插入法来建立相应单链表。

四、实现提示1.由于C语言的数组类型也有随机存取的特点,一维数组的机内表示就是顺序结构。

因此,可用C语言的一维数组实现线性表的顺序存储。

在此,我们利用C语言的结构体类型定义顺序表:#define MAXSIZE 1024typedef int elemtype; /* 线性表中存放整型元素*/typedef struct{ elemtype vec[MAXSIZE];int len; /* 顺序表的长度*/}sequenlist;将此结构定义放在一个头文件sqlist.h里,可避免在后面的参考程序中代码重复书写,另外在该头文件里给出顺序表的建立及常量的定义。

2. 注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序(顺序表中元素的次序)的区别。

3.单链表的结点结构除数据域外,还含有一个指针域。

用C语言描述结点结构如下:typedef int elemtype;typedef struct node{ elemtype data; //数据域struct node *next; //指针域}linklist;注意结点的建立方法及构造新结点时指针的变化。

构造一个结点需用到C 语言的标准函数malloc(),如给指针变量p分配一个结点的地址:p=(linklist *)malloc(sizeof(linklist));该语句的功能是申请分配一个类型为linklist的结点的地址空间,并将首地址存入指针变量p 中。

当结点不需要时可以用标准函数free(p)释放结点存储空间,这时p为空值(NULL)。

五、思考与提高1. 如果按由表尾至表头的次序输入数据元素,应如何建立顺序表。

2. 在main函数里如果去掉L=&a语句,会出现什么结果?六、完整参考程序1.顺序线性表的建立、插入及删除。

#include <stdio.h>#include <conio.h>#define MAX 30 //定义线性表的最大长度enum BOOL{False,True}; //定义BOOL型typedef struct{char elem[MAX]; //线性表int last; //last指示当前线性表的长度}sqlist;void initial(sqlist &); //初始化线性表BOOL insert(sqlist &,int,char); //在线性表中插入元素BOOL del(sqlist&,int,char &); //在线性表中删除元素int locate(sqlist,char); //在线性表中定位元素void print(sqlist); //显示线性表中所有元素void main(){sqlist S; //S为一线性表int loc,flag=1;char j,ch;BOOL temp;printf("本程序用来实现顺序结构的线性表。

\n");printf("可以实现查找、插入、删除等操作。

\n");initial(S); //初始化线性表while(flag){ printf("请选择:\n");printf("1.显示所有元素\n");printf("2.插入一个元素\n");printf("3.删除一个元素\n");printf("4.查找一个元素\n");printf("5.退出程序\n");scanf(" %c",&j);switch(j){case '1':print(S); break; //显示所有元素case '2':{printf("请输入要插入的元素(一个字符)和插入位置:\n");printf("格式:字符,位置;例如:a,2\n");scanf(" %c,%d",&ch,&loc); //输入要插入的元素和插入的位置temp=insert(S,loc,ch); //插入if(temp==False) printf("插入失败!\n"); //插入失败else {printf("插入成功!\n"); print(S);} //插入成功break;}case '3':{printf("请输入要删除元素的位置:");scanf("%d",&loc); //输入要删除的元素的位置temp=del(S,loc,ch); //删除if(temp==True) printf("删除了一个元素:%c\n",ch); //删除成功else printf("该元素不存在!\n"); //删除失败print(S);break; }case '4':{printf("请输入要查找的元素:");scanf(" %c",&ch); //输入要查找的元素loc=locate(S,ch); //定位if(loc!=-1) printf("该元素所在位置:%d\n",loc+1); //显示该元素位置else printf("%c 不存在!\n",ch);//当前元素不存在break; }default:flag=0;printf("程序结束,按任意键退出!\n");} }getch();}void initial(sqlist &v){//初始化线性表int i;printf("请输入初始线性表长度:n="); //输入线性表初始化时的长度scanf("%d",&st);printf("请输入从1到%d的各元素(字符),例如:abcdefg\n",st); getchar();for(i=0;i<st;i++) scanf("%c",&v.elem[i]); //输入线性表的各元素}BOOL insert(sqlist &v,int loc,char ch){//插入一个元素,成功返回True,失败返回Falseint i;if((loc<1)||(loc>st+1)){printf("插入位置不合理!\n"); //位置不合理return False; }else if(st>=MAX) //线性表已满{printf("线性表已满!\n");return False; }else {for(i=st-1;i>=loc-1;i--) v.elem[i+1]=v.elem[i];//其后元素依次后移v.elem[loc-1]=ch; //插入元素st++; //线性表长度加一return True; }}BOOL del(sqlist &v,int loc,char &ch){//删除一个元素,成功返回True,并用ch返回该元素值,失败返回False int j;if(loc<1||loc>st) //删除位置不合理return False;else {ch=v.elem[loc-1]; //ch取得该元素值for(j=loc-1;j<st-1;j++) v.elem[j]=v.elem[j+1]; //其后元素依次前移st--; //线性表长度减一return True;}}int locate(sqlist v,char ch){//在线性表中查找ch的位置,成功返回其位置,失败返回-1int i=0;while(i<st&&v.elem[i]!=ch) i++; //当前位置后移,直到找到为止if(v.elem[i]==ch) //找到当前元素return i;else return(-1);}void print(sqlist v) //显示当前线性表所有元素{int i;for(i=0;i<st;i++) printf("%c ",v.elem[i]);printf("\n");}2.链式线性表的建立、插入及删除。

#include <conio.h>#include <stdio.h>#include <stdlib.h>#define LEN sizeof(LNode) //定义LEN为一个节点的长度enum BOOL{False,True}; //定义BOOL型typedef struct node{char data; //数据域struct node *next;//指向下一个节点的指针}LNode,*LinkList;void CreatList(LinkList &,int); //生成一个单链表BOOL ListInsert(LinkList &,int,char); //在单链表中插入一个元素BOOL ListDelete(LinkList &,int,char &); //在单链表中删除一个元素BOOL ListFind_keyword(LinkList,char,int &); //按关键字查找一个元素BOOL ListFind_order(LinkList,char &,int); //按序号查找一个元素void ListPrint(LinkList); //显示单链表所有元素void main(){LinkList L;BOOL temp;int num,loc,flag=1;char j,ch;printf("本程序实现链式结构的线性表的操作。

相关文档
最新文档