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

合集下载

数据结构实验指导书

数据结构实验指导书

《数据结构》实验指导书实验一顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。

实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。

实验内容:1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求:(1)设数据元素为整数,实现线性表的顺序存储表示。

(2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。

(3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。

2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求:(1)数据元素为学生成绩(含姓名、成绩等字段)。

(2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。

(这里用于比较的字段为分数)实验二链表实验目的:熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。

实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容:1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下:(1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。

(2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表并带有头结点。

(用于比较的字段为分数)。

(3)输入关键字值x,打印出表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(4)输入关键字值x,删除表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。

(用于比较的字段为分数)。

实验三栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。

实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。

实验内容:(1)判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。

数据结构与算法-东北林业大学 《数据结构》实验指导书new

数据结构与算法-东北林业大学 《数据结构》实验指导书new

计算机科学与技术专业《数据结构》实验指导书关于实习步骤的要求和建议从以往的教学事先实习的经验来看,在初学阶段执行严格的实习步骤规范(包括上机操作规范),机时利用率会大大提高,有助于养成良好的程序编制风格,培养严谨、科学、高效的工作方式。

在以往的教学实践中,经常发现很多学生抱怨说,化了两个小时才找出一个错误,甚至一无所获。

他们不明白造成这种情况的原因,正是他们自己。

有的学生不屑于按实习步骤规范去做,甚至对于实习步骤的要求和建议看都不看一遍,认为那是浪费时间,这是及其害的。

实习步骤规范不但可以培养科学化的工作作风,而且还能有效地避免错误。

具体的步骤机规范如下:1.问题分析与系统的结构设计充分地分析和理解问题本身,弄清要求作什么,限制条件是什么。

按照以数据结构为中心的原则划分模块,即定义数据结构及其在这些结构之上的操作,使得对数据结构的存取通过这些操作加以实现。

在这个过程中,要综合考虑系统功能。

要考虑系统结构清晰、合理、简单并且易于调试。

最后写出每个子程序(过程或函数)的规格说明,列出它们之间的调用关系,可以使用调用关系图表示则更加清晰,这样便完成了系统结构设计。

2.详细设计和编码详细设计的目的是对子程序(过程或函数)的进一步求精。

用 IF 、 WHILE和赋值语句等,以及自然语言写出算法的框架。

利用自然语言的目的是避免陷入细节。

在编码是,可以对详细设计的结果进一步求精,用高级语言表示出来。

程序的每一行最好不超过 60 个字符。

每个子程序(或过程、函数)通常不要太长,以 40 行为宜。

子程序(或过程、函数)包含的程序行数太多,易于造成理解的困难。

控制IF 、WHILE 等语句的连续嵌套的深度。

程序的目的性必须明确。

对每一段程序完成的作用,除非常明显的除外(如:x = x + 1; 注释为 x 加 1,没有什么意义),都应加以注释。

这会对程序的调试提供很多方便。

另外,根据情况可以设立若干调试点,即输出若干信息,用于验证和你的设想是否一致。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书适用所有开设数据结构实验的专业雷文赵攀编写概述一、课程目的《数据结构》是一门实践性很强的软件基础课程,为了学好这门课,每个学生必须完成一定数量的上机作业。

通过本课程的上机作业,要求在数据结构的选择和应用、算法的设计及实现等方面加深对课程基础内容的理解,同时,实验题中的问题比平时的练习题要复杂,也更接近实际,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

本课程实验的目的是旨在使学生进一步巩固课堂上所学的理论知识;深化理解和灵活掌握教学内容;培养学生算法设计的能力和解决实际问题的程序设计的能力。

二、实验名称与学时分配三、实验要求⒈问题分析充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。

⒉数据结构设计针对要求解决的问题,考虑各种可能的数据结构,并且力求从中出最佳方案(必须连同算法一起考虑),确定主要的数据结构及全程变量。

对引入的每种数据结构和全程变量要详细说明其功能、初值和操作特点。

⒊算法设计算法设计分概要设计和详细设计,概要设计着重解决程序的模块设计问题,这包括考虑如何把被开发的问题程序自顶向下分解成若干顺序模块,并决定模块的接口,即模块间的相互关系以及模块之间的信息交换问题.详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,采用类C语言描述。

⒋测试用例设计准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。

⒌上机调试对程序进行编译,纠正程序中可能出现的语法错误,测试前,先运行一遍程序看看究竟将会发生什么,如果错误较多,则根据事先设计的测试方案并结合现场情况进行错误跟踪,包括打印执行路径或输出中间变量值等手段。

三、实验考核每次实验结束后,均应上交实验报告。

数据结构课程实验成绩单独考核,占1个学分。

实验报告应包括如下内容:1、问题描述:简述题目要解决的问题是什么。

129356615412031250《数据结构与算法实验》实验指导书暨实验报告(1-6)新

129356615412031250《数据结构与算法实验》实验指导书暨实验报告(1-6)新
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 个学生的学号
//自己设计主函数完成
{
《数据结构与算法实验》上机实验指导书暨实验报告
}
《数据结构与算法实验》上机实验指导书暨实验报告
(二)利用单链表完成一个班级学生课程成绩的简单管理
1、单链表结构体类型的定义 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 为该班级的实际人数 {
实验二 栈和队列的操作与应用
一、 实验目的
1.掌握栈和队列的基本操作,并能对其进行简单应用。
二、 实验内容
1.利用栈将一个十进制的正整数转换成 n 进制数据,并将其转换结果输出。 2.用顺序栈实现算术表达式求值。 3. 编程用一维数组模拟一个队列(顺序队列),实现入队列和出队列操作。

数据结构教程上机实验指导第六版

数据结构教程上机实验指导第六版

数据结构教程上机实验指导第六版一、引言《数据结构教程上机实验指导》是数据结构课程的实践操作指南,旨在帮助学生通过实际操作加深对理论知识的理解,提高编程技能和解决问题的能力。

本书适用于高等院校计算机专业的学生,也可供数据结构爱好者参考。

二、实验内容本书包含了一系列实验,涵盖了各种常见的数据结构,如数组、链表、栈、队列、树、图等。

每个实验都包括实验目的、实验环境、实验步骤和实验报告四个部分。

1.实验目的:每个实验都有明确的目的,旨在帮助学生掌握特定数据结构的实现方法、操作技巧和性能分析。

2.实验环境:提供了实验所需的环境配置和软件版本,确保学生在合适的环境下进行实验。

3.实验步骤:详细说明了实验的步骤和方法,引导学生逐步完成实验。

4.实验报告:要求学生提交实验报告,包括对实验结果的总结和分析,以及遇到的问题和解决方案。

三、实验示例本书提供了多个实验示例,包括各种数据结构的实现和应用。

以下是一个简单的链表插入操作的示例:假设我们有一个简单的链表,包含节点A、B和C。

现在要求在B 节点后插入一个新的节点D。

按照链表插入操作的规则,我们需要找到B的下一个节点(即C),然后将D连接到C后面即可。

具体步骤如下:(1)创建一个新的节点D;(2)找到B的下一个节点C;(3)将D连接到C后面,即修改C的下一个节点指针指向D;(4)返回链表。

通过这个示例,学生可以更好地理解链表插入操作的原理和实现方法。

四、实验总结通过本书的实验,学生可以加深对数据结构理论知识的理解,提高编程技能和解决问题的能力。

同时,学生还可以通过实践发现自己的不足之处,及时调整学习策略,提高学习效果。

五、参考文献在本书的最后,列出了与数据结构相关的参考文献,包括教材、论文、网站等。

这些参考文献为学生提供了更多的学习资源,有助于他们进一步了解数据结构的相关知识。

六、结语《数据结构教程上机实验指导》是一本非常实用的实践指南,对于学习数据结构的学生来说非常有帮助。

数据结构-实验指导书

数据结构-实验指导书

《数据结构》实验指导书计算机专业实验中心编2020年7月25日目录《数据结构》上机实验内容和要求............................. 错误!未定义书签。

实验一、顺序表的实现及应用................................. 错误!未定义书签。

实验二、链表的实现及应用................................... 错误!未定义书签。

实验三、栈的实现及应用..................................... 错误!未定义书签。

实验四、队列的实现及应用................................... 错误!未定义书签。

实验五、二叉树操作及应用................................... 错误!未定义书签。

实验六、图的遍历操作及应用................................. 错误!未定义书签。

实验七、查找算法的实现..................................... 错误!未定义书签。

实验八、排序算法的实现..................................... 错误!未定义书签。

《数据结构》上机实验内容和要求通过上机实验加深对课程内容的理解,增加感性认识,提高程序设计、开发及调试能力。

本实验指导书适用于16学时《数据结构》实验课,实验项目具体内容如下:实验报告要求请按照实验教师要求,按时提交实验报告电子版文件。

实验报告格式可个性化定义,内容包括但不限于以下内容:1、题目、姓名、学号、班级(首页)2、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。

3、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。

《数据结构》实验指导

《数据结构》实验指导《数据结构》C语言版实验指导目录《数据结构》上机实验的目的和要求 (1)实验一顺序结构线性表的实现 (3)实验二单链表的插入和删除 (16)实验三栈的实现 (24)实验四二叉树操作实现 (30)实验五哈夫曼树的建立与编码实现 (39)实验六图的遍历操作 (50)实验七排序 (67)实验八查找 (83)《数据结构》课程设计 (95)《数据结构》上机实验的目的和要求通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程序的能力。

要求所编的程序能正确运行,并提交实验报告。

实验报告的基本要求为:1、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。

2、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。

3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。

4、调试分析:(1)调试过程中所遇到的问题及解决方法;(2)算法的时空分析;(3)经验与体会。

5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。

6、测试结果:列出对于给定的输入所产生的输出结果。

若有可能,测试随输入规模的增长所用算法的实际运行时间的变化。

实验一顺序结构线性表的实现一、目的:掌握顺序表的表示方法,存储结构及其基本操作的实现。

二、要求:建立一顺序表,实现其基本操作。

三、示例程序:说明:一个完整的程序是由输入,处理,输出三部分组成的,每个部分还可以分为若干小部分,如输入,又可以分为声明,初始化变量,接收数据,预处理数据等。

书上列出的算法是解决问题的基本思路,也可以是解决问题的处理过程,并未给出详细的输入与输出,这一部分需要在练习过程中加入,在解决实际问题时,还需要做灵活的处理。

C语言本身有自身的特点,其基本思想是与机器的指令码相关的。

数据结构实验指导书

数据结构实验指导书院别专业班级姓名计算机学院编实验一线性表的顺序存储实验一、实验目的及要求1、掌握在TC环境下调试顺序表的基本方法2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。

二、实验学时2学时三、实验任务1、生成一个顺序表并动态地删除任意元素和在任意位置插入元素。

2、将两个有序表合并成一个有序表。

四、实验重点、难点1、在顺序表中移动元素。

2、在顺序表中找到正确的插入位置。

五、操作要点(一)顺序表基本操作的实现[问题描述] 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。

[基本要求] 要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。

[实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。

[程序实现]#include <stdio.h>#include <conio.h>typedef int DataType ;# define maxnum 20typedef struct{int data[maxnum];int length;}SeqList;/*插入函数*/int insert(SeqList *L , int i , DataType x)/* 将新结点x插入到顺序表L第i个位置 */{ int j ;if( i<0 || i>(*L).length +1){ printf(" \n i 值不合法 ! ");return 0;}if((* L).length >=maxnum-1){ printf(" \n 表满不能插入!");return 0;}for(j=(*L).length;j>=i;j--) (*L).data[j+1]=(*L).data[j];(*L).data[i] = x;(*L).length++;return 1;}/*删除函数*/int delete( SeqList *L ,int i)/*从顺序L中删除第i个结点*/{ int j ;if( i<0|| i>(*L).length ){ printf(" \n 删除位置错误 ! ") ;return 0;}for(j=i+1;j<=(*L).length;j++)(*L).data[j-1] =(*L).data[j];(*L).length--;return 1;}/*生成顺序表*/void creatlist(SeqList * L){ int n , i , j ;printf("请输入顺序表 L 的数据个数:\n") ;scanf("%d" , &n) ;for(i=0 ; i<n ; i++){ printf("data[%d] =" , i) ;scanf("%d",&((*L).data[i]));}(*L).length=n-1;printf("\n") ;}/*creatlist *//*输出顺序表 L*/printout(SeqList * L){ int i ;for (i=0 ; i<=(* L).length ; i++){ printf(" data[%d]=", i) ;printf("%d", (*L).data[i]);}/*printout */printf("\n");}main(){ SeqList *L ;char cmd ;int i , t , x;clrscr() ;creatlist(L);do{printf("\ni , I ----- 插入\n") ;printf("d , D ----- 删除\n") ;printf("q , Q ----- 退出\n") ;do{cmd=getchar() ;}while((cmd!='i')&&(cmd!='I')&&(cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')); switch(cmd){ case 'i':case 'I':printf("\nPlease input the DATA: ");scanf("%d",&x) ;printf("\nWhere? ");scanf("%d",&i) ;insert(L,i,x) ;printout(L);break ;case 'd':case 'D' :printf("\nWhere to Delete? ");scanf("%d",&i);delete(L,i);printout(L);break ;}}while((cmd!='q')&&(cmd!='Q'));}(二)有序顺序表的合并[问题描述] 已知顺序表la和lb中的数据元素按非递减有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc[基本要求] lc中的数据元素仍按非递减有序排列,并且不破坏la和lb表[程序实现]# include <stdio.h># define maxnum 20typedef int DataType ;typedef struct{ DataType data[maxnum] ;int length ;}SeqList ;int MergeQL(SeqList la , SeqList lb , SeqList *lc){ int i , j , k ;if (la.length+1 + lb.length+1>maxnum){ printf("\narray overflow!") ;return 0;}i=j=k=0;while(i<=la.length && j<=lb.length){ if (la.data[i]<=lb.data[j])lc->data[k++]=la.data[i++] ;elselc->data[k++]=lb.data[j++];}/* 处理剩余部分 */while (i<=la.length) lc->data[k++]=la.data[i++];while (j<=lb.length) lc->data[k++]=lb.data[j++];lc->length=k-1;return 1;}main(){ SeqList la={{3,4,7,12,15},4} ;SeqList lb={{2,5,7,15,18,19},5} ;SeqList lc ;int i ;if (MergeQL(la,lb,&lc)){ printf("\n") ;for(i=0;i<=lc.length ; i++)printf("%4d",lc.data[i]);}}六、注意事项1、删除元素或插入元素表的长度要变化。

数据结构上机实验指导书

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

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

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

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

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

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

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

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

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

在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试。

编码即把详细设计的结果进一步求精为程序设计语言程序,写出源程序。

对程序中的疑问应作出记号,以便上机时注意解决。

每个明确的功能模块程序一般不超过60行,程序的每一行不得超过60个字符,否则要进一步划分。

2.1.3上机前程序静态检查上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。

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

桂林电子科技大学_数据结构实验指导书

桂林电子科技大学《数据结构》实验指导书计算机科学与工程学院专升本目录实验一、熟悉实验环境和单向链表 (3)实验二、多项式运算 (14)实验三、顺序栈的编写 (17)实验四、栈的使用—括号匹配 (18)实验五、循环队列 (19)实验六、二叉排序树 (20)实验七、图 (21)实验八、排序 (22)实验九、查找 (23)实验一熟悉实验环境和单向链表一、实验目的熟悉VC 6 实验环境掌握单链表的理论,并能根据需要编写相应的代码二、实验内容1、VC 6编写控制台c程序指南和代码编写的一些规范使用VC开发c语言程序,首先要熟悉VC的IDE环境。

IDE(Integrated Development Environment),即集成开发环境。

编译器厂家将程序编辑器、编译程序、连接程序和调试程序集成在一个开发环境中,使得这个开发环境能完成所有的开发工作,这就是IDE。

当启动VC后,就可以看到它所提供的IDE环境。

如何在VC环境中用c语言编程,开发控制台应用程序。

主要的步骤分为:1.新建项目2.添加文件到新建的项目中3.编写代码4.编译链接生成可执行文件其中,代码的调试也是一个很重要的过程。

(一)、新建工程图1注意,在图1中一定要选择Win32 Console Application,这样才能编写控制台应用程序。

在图1的中的Project name下面的文本框填写自己工程的名字,在Location中选择工程要存放的硬盘。

填好后,点击OK,进入下一步。

图2在图2中,默认选择An empty project,保持默认选项,点击Finish。

就建立了一个空白的控制台工程项目。

以后可以往这个空白的项目中添加现有文件(已经编写好的.c或者.h 文件),或者是添加新的空白文件(已经编写好的.c或者.h文件),用于在其上编写自己的代码。

二、往工程中添加文件应注意,刚选择的是新建一个空白的工程,因此,新建的工程中没有任何.c或者.h文件,现在需要往工程中添加代码文件。

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

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

二、上机中:在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、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

三、用C语言编程实现两个按递增顺序排列线性表的合并。

1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。

【思考问题】结合实验过程,回答下列问题:1、何时采用顺序表处理线性结构的问题为最佳选择;2、何时采用链表处理线性结构的问题为最佳选择。

【实验报告要求】1、根据对线性表的理解,如何创建顺序表和单链表;2、实现顺序表插入和删除操作的程序设计思路;3、实现链表插入和删除操作的程序设计思路;4、实现两表合并操作的程序设计思路;5、调试程序过程中遇到的问题及解决方案;6、本次实验的结论与体会。

实验二树和二叉树【实验目的】1、掌握二叉树的结构特性,以及各种存储结构的特点及适用范围;2、掌握二叉树遍历算法。

3、掌握线索二叉树算法。

4、掌握赫夫曼编码算法。

【实验学时】2 学时【实验类型】设计型【实验内容】1、编程实现二叉树的遍历算法(可采用先序、中序和后序遍历算法之一);2、编制线索二叉树建立、遍历程序(采用中序遍历算法);3、通过给定字符a,b,c,d,e,f,g的使用频率,编程求出它们的赫夫曼编码。

【实验原理】1、在二叉树的一些些应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理,这就是遍历二叉树的问题,二叉树是由三个基本单元组成:根结点、左子树和右子树,若限定先左子树后右子树,则根据根的顺序可有三种遍历方法,即:先序遍历、中序遍历和后序遍历。

2、在二叉链表存储结构中加上前驱或后继的线索,则构成线索二叉树,在线索二叉树中进行遍历可以很方便地得到访问二叉树的线性序列。

3、赫夫曼树是一类带权路径长度最短的树,利用赫夫曼树进行编码可以得到最优的二进制前缀编码。

4、详细原理请参考教材。

【实验步骤】一、用C语言编程实现二叉树的中序遍历算法1、采用二叉链存储结构创建一个二叉树;2、用非递归方法实现二叉树的中序遍历算法;3、输出二叉树中每个结点的值;4、给定具体数据调试程序。

二、用C语言编程实现在线索二叉树上进行遍历1、先进行二叉树的线索化,即建立线索二叉树;2、在线索二叉树中遍历每个结点并输出每个结点的信息;4、给定具体数据调试程序。

三、用C语言编程实现赫夫曼编码假定用于通信的电文由8个字母A、B、C、D、E、F、G、H组成,各字母在电文中出现的概率为5%,25%,4%,7%,9%,12%,30%,8%,试编程为这8个字母设计赫夫曼编码。

1、分析问题2、编程创建此问题的赫夫曼树;3、编程求出此8个字母赫夫曼编码并输出;4、调试程序。

【思考问题】结合实验过程,回答下列问题:1、采用非递归方法实现二叉树遍历与采用递归方法实现二叉树的遍历,哪个方法执行效率高;2、为什么在线索二叉树上进行遍历,要比在二叉树上进行遍历快捷方便?3、针对同一问题,构成的赫夫曼树是否是唯一的,构成的赫夫曼编码是否唯一?【实验报告要求】1、根据对二叉树的理解,如何创建一个二叉树;2、实现二叉树遍历的程序设计思路;3、如何对二叉树进行线索化;4、创建赫夫曼树及其编码的程序设计思路;5、本次实验的结论与体会。

实验三图【实验目的】1、掌握图的基本存储方法;2、掌握图的两种搜索路径的遍历算法;3、掌握拓扑排序算法;(选做)【实验学时】2学时【实验类型】设计型【实验内容】1、编程实现图的遍历图算法(按图的深度优先搜索算法或广度优先搜索算法遍历);2、应用拓朴排序算法编制程序解决问题。

【实验原理】1、图的结构比较复杂,任意两顶点之间都可能有联系,图无顺序存储映象的存储结构,可以借助数组的数据类型表示元素之间的关系,存储图常用的存储结构有数组表示法、邻接表、邻接多重表和十字链表等;2、从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅访问一次,这就是图的遍历,图的遍历算法是求解图的连通性问题、拓朴排序和求关键路径等算法的基础,通常有两种遍历图的方法:深度优先搜索和广度优先搜索,其中深度优先搜索就是从图中某个顶点V出发,访问此顶点,然后依次从V的未被访问的邻接点出发深度优先遍历图,直至图中所有和V有路径相通的顶点都被访问到,若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止;广度优先搜索就是从图中某个顶点V出发,在访问了V之后依次访问V的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到,若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止;3、构造最小生成树的算法有:普里姆算法和克鲁卡尔算法;4、由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓朴排序,拓朴排序的方法是:在有向图中选一个没有前驱的顶点且输出之,从图中删除该顶点和所有以它为尾的弧,重复上述步骤,直至全部顶点均被输出,或当前图中不存在无前驱的顶点为止。

5、详细原理请参考教材。

【实验步骤】一、用C语言编程实现图的遍历算法1、采用邻接表存储结构创建一个图;2、编程实现图的深度优先搜索(或广度优先搜索)遍历算法3、输出遍历结果;4、给定具体数据调试程序。

二、教学计划编制问题软件专业的学生要学习一系列课程,其中有些课程必须在其先修课程完成后才能学习,具体关系见下表:假设每门课程的学习时间为一学期,试为该专业的学生设计教学计划,使他们能在最短的时间内修完这些课程。

1、分析问题;2、根据此问题创建一个图表示课程与课程之间的关系;3、利用拓扑排序算法实现该教学计划;4、输出课程开出的先后顺序5、调试程序。

【思考问题】结合实验过程,回答下列问题:1、图有哪几种存储结构,哪种适合于存储无向图,哪种适合于存储有向图?;2、列举出几种需要应用关键路径或最短路径算法解决的实际问题。

【实验报告要求】1、根据对图的理解,如何创建一个图;2、实现图的遍历的程序设计思路;3、编制教学计划问题的设计思路;4、本次实验的结论与体会。

实验四查找【实验目的】1、掌握静态查找表算法(重点掌握折半查找);2、掌握动态查找表----二叉排序树查找算法;3、掌握哈希表查找算法【实验学时】2 学时【实验类型】设计型【实验内容】1、编程实现有序表的折半查找算法;2、编程实现按二叉排序树算法进行查找。

3、利用哈希表算法进行查找【实验原理】1、有序表的折半查找过程是:先确定确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止;2、二叉排序树查找过程是:首先将给定值和根结点的关键字比较,若相等,则查找成功,否则将依据给定值和根结点的关键字之间的大小关系,分别在左子树或右子树上继续进行查找;3、在查找问题中,理想的情况是希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系,使每个关键字和结构中一个唯一的存储位置相对应。

这需要构造一个哈希函数,常用的构造函数的方法有:直接定址法、数字分析法、平方取中法、折叠法、除留余数法和随机数法。

构造的哈希表发生冲突是不可避免的,需要适当地处理冲突,处理冲突的方法有:开放定址法、再哈希法、链地址法和建立一个公共溢出区法。

4、详细原理请参考教材。

【实验步骤】一、用C语言编程实现有序表的折半查找算法1、创建一个递增的有序表;2、给定一个值,用折半查找算法在有序表中进行查找;3、输出查找结果;4、给定具体数据调试程序二、用C语言编程实现在二叉排序树中进行查找1、读入一串整数,采用二叉链存储结构创建一棵二叉排序树;2、给定一个值,在二叉排序树中进行查找;3、输出查找结果;4、给定具体数据调试程序。

三、哈希表查找针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查找程序。

1、分析问题;2、创建此问题的哈希表;3、指定一个人名,在哈希表中进行查找,并输出查找结果;4、调试程序。

【思考问题】结合实验过程,回答下列问题:何种情况适合采用折半查找、何种情况适合采用二叉排序树查找、何种情况适合采用哈希表查找?【实验报告要求】1、根据对静态查找算法的理解,实现折半查找的程序设计思路;2、根据对二叉排序树的理解,实现在二叉排序树中进行查找的程序设计思路;3、如何构造哈希函数,如何解决地址冲突;4、实现在哈希表中进行查找的程序设计思路;5、本次实验的结论与体会。

实验五内部排序【实验目的】1、掌握常用的排序方法(如:希尔排序、快速排序、选择排序、归并排序),并掌握用高级语言实现排序算法;2、深刻理解排序的定义和常用排序方法的特点,并能加以灵活应用;3、了解常用方法的排序过程及其依据的原理。

相关文档
最新文档