1、每个实验完成后要认真书写实验报告,对程序运行的结构,要认真分析,总结每次实验项目的体会与收获。四、报告与考核每个实验都要求学生根据上机内容写出实验报告,报告要求包括以下七个方面的内容:1实验目的;2实验内容;3实验要求;4算法设计;5详细程序清单;6程序运行结果;7实验心得体会。考核方式:每个实验项目根据以下两个方面进行考核:1指导教师随堂抽查学生的实验过程(包括实验预习、实验出勤、实验结果的测试),并根据抽查结果评定学生成绩,此成绩占此实验总成绩的70%;2学生编写课程实验报告,每位学生按照实验报告的内容和要求编写详细的实验报告上交给指导老师,由指导老师根据每位学生的完成情况评定成绩,此成绩
2、占实验总成绩的30%。五、设备及器材材料配置硬件:奔腾以上PC机软件:Netbeans 6.5以上或Eclipse、MyEclipse等编程环境六、实验指导书及主要参考书1刘小晶.数据结构实验指导书(Java语言版)2 Robert Lafore著,计晓云等译. Java数据结构和算法(第二版)M. 北京:中国电力出版社,2004.3 Sartaj Sahni著,孔芳,高伟译. 数据结构、算法与应用(Java语言描述)M. 北京:中国水利水电出版社,2007.4 叶核亚. 数据结构(Java版)M. 北京:电子工业出版社,2004.5 邓俊辉. 数据结构与算法(Java语言描述)M. 北京:机
3、械工业出版社,2006.6 朱战立. 数据结构- Java语言描述M. 北京:清华大学出版社,2005.7 张铭.数据结构与算法. 高教出版社.2008.68 张铭.数据结构与算法学习指导与习题解析. 高教出版社.20099 耿国华等 数据结构-C语言描述. 高教出版社.2005.710 刘怀亮. 数据结构(C语言描述) .冶金出版社.2005.211 刘怀亮. 数据结构(C语言描述)习题与实验指导导.冶金出版社.2005.212 蔡子经,施伯乐.数据结构教程.上海:复旦大学出版社.199413 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社.1999;14 严蔚敏,吴伟民.数据结
4、构题集(C语言版).北京:15 徐孝凯.数据结构课程实验.北京:清华大学出版社.2002; 16 孟佳娜,胡潇琨.算法与数据结构实验与习题.北京:机械工业出版社.2004.七、实验项目与内容提要序号实验名称目的要求、内容提要(限20字)每组人数实验学时实验类型必做选做所在实验分室1顺序表的基本操作熟悉并完成顺序表上基本操作的算法及其应用问题的编程实现。1个班2验证与设计链表的基本操作熟悉并完成单链表和双向链表基本操作算法的编程实现。3栈的基本操作熟悉并完成顺序栈和链栈基本操作算法及其应用问题的编程实现4队列的基本操作熟悉并完成循环顺序队列和循环链队列基本操作算法及其应用问题的编程实现。5二叉树
5、的操作熟悉并完成二叉树遍历算法及其应用问题的编程实现。6静态查找表的查找操作熟悉并完成静态查找表上的顺序查找、二分查找和索引查找算法的编程实现7二叉排序树的查找操作熟悉并完成在二叉排序树上进行查找、插入和删除操作的编程实现。8哈希表上的查找操作熟悉并完成哈希表的建立、查找和插入操作的编程实现9排序操作熟悉并完成几种主要排序操作的编程实现。10图的遍历熟悉并完成图的遍历、最小生成树及其应用问题的编程实现实验B01: 顺序表的操作实验一、实验名称和性质所属课程数据结构顺序表的操作实验性质验证 综合 设计必做/选做必做 选做二、实验目的1掌握线性表的顺序存储结构的表示和实现方法。2掌握顺序表基本操作
6、的算法实现。3了解顺序表的应用。三、实验内容1建立顺序表。2在顺序表上实现插入、删除和查找操作(验证性内容)。3删除有序顺序表中的重复元素(设计性内容)。4完成一个简单学生成绩管理系统的设计(应用性设计内容)。四、实验的软硬件环境要求硬件环境要求: PC机(单机)使用的软件名称、版本号以及模块: Netbeans 6.5以上或Eclipse、MyEclipse等编程环境下 。五、知识准备前期要求熟练掌握了Java语言的编程规则、方法和顺序表的基本操作算法。六、验证性实验1实验要求编程实现如下功能:(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容
7、与输出的内容是否一致。(2)在顺序表的第i(0in)个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。(3)删除顺序表中第i(0in-1)个元素,并输出删除后的顺序表中各元素值。(4)在顺序表中查找值为x的数据元素初次出现的位置。如果查找成功,则返回该数据元素在顺序表中的位序号;如果查找失败,则返回-1。2. 实验相关原理线性表的顺序存储结构称为顺序表,线性表的顺序存储结构在线性表Java接口的实现类中描述如下:public class SqList implements IList private Object listElem; / 线性表存储空间 private int c
8、urLen; /线性表的当前长度 【核心算法提示】顺序表插入操作的基本步骤:要在当前的顺序表中的第i(0in, n为线性表的当前长度)个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法, i的合法值范围:1in+1,若是合法位置,就再判断顺序表是否满,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将待插入的数据元素x插入到该位置上,最后将线性表的当前长度值增加1,否则抛出异常。顺序表删除操作的基本步骤:要删除当前顺序表中的第i(0in-1)个数据元素,首先仍然要判断i的合法性,i 的合法范围是0in-1,若是合法位置,则将第i个数据元素
9、之后的所有数据元素都前移一个位置,最后将线性表的当前长度减1,否则抛出异常。顺序表查找操作的基本步骤:要在当前顺序表中查找一个给定值的数据元素,则可以采用顺序查找的方法,从顺序表中第0个数据元素开始依次将数据元素值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,如果所有数据元素都与x比较但都不相等,表明值为x的数据元素在顺序表中不存在,则返回-1值。【核心算法描述】在当前顺序表上的插入操作算法void insert(int i, Object x) throws Exception if (curLen = listElem.length) / 判断顺序表是否已满 throw new
10、 Exception(顺序表已满); / 抛出异常 if (i curLen) / i不合法插入位置不合法/ 抛出异常 for (int j = curLen; j i; j-) listElemj = listElemj - 1;/ 插入位置及其之后的所有数据元素后移一位 listElemi = x; / 插入x curLen+; / 表长加1 在当前顺序表上的删除操作算法void remove(int i) throws Exception curLen - 1) / i不合法删除位置不合法 for (int j = i; j curLen - 1; j+) listElemj = lis
11、tElemj + 1;/ 被删除元素及其之后的数据元素左移一个存储位置 curLen-; / 表长减1 在当前顺序表是的查找操作算法int indexOf(Object x) int j = 0; / j指示顺序表中待比较的数据元素,其初始值指示顺序表中第0个数据元素 while (j curLen & !listElemj.equals(x) /依次比较 j+; if (j curLen) / 判断j的位置是否位于顺序表中 return j; / 返回值为x的数据元素在顺序表中的位置 else return -1; / 值为x的数据元素在顺序表中不存在3源程序代码参考package sy;i
12、mport java.util.Scanner;class SqList / 当前长度 public int getCurLen() return curLen; public void setCurLen(int curLen) this.curLen = curLen; public Object getListElem() return listElem; public void setListElem(Object listElem) this.listElem = listElem; / 顺序表的构造函数,构造一个存储空间容量为maxSize的空线性表 public SqList(i
13、nt maxSize) curLen = 0; / 置顺序表的当前长度为0 listElem = new ObjectmaxSize;/ 为顺序表分配maxSize个存储单元 / 在线性表的第i个数据元素之前插入一个值为x的数据元素。其中i取值范围为:0icurLen。 public void insert(int i, Object x) throws Exception if (curLen = listElem.length) / 判断顺序表是否已满 throw new Exception(/ 输出异常 if (i curLen) / i小于0或者大于表长插入位置不合理 listElem
14、j = listElemj - 1;/ 插入位置及之后的元素后移 listElemi = x; curLen+;/ 表长度增1 / 将线性表中第i个数据元素删除。0icurLen- 1,如果i值不在此范围则抛出异常 public void remove(int i) throws Exception curlew - 1) / i小于1或者大于表长减1删除位置不合理 listElemj = listElemj + 1;/ 被删除元素之后的元素左移 curLen-; / 表长度减1 /查找顺序表中值的x元素,若查找成功则返回元素在表中的位序(0curLen-1),否则返回-1 public in
15、t indexOf(Object x) int j = 0; / 输出顺序表中的数据元素 public void display() for (int j = 0; curLen; System.out.print(listElemj + System.out.println();/ 换行/测试类public class SY1_SqList public static void main(String args) throws Exception SqList L=new SqList(20); /构造一个存储容量为0的空顺序表 Scanner sc=new Scanner(System.i
16、n); System.out.println(请输入顺序表的长度: int n=sc.nextInt();请输入顺序表中的各个数据元素: for(int i=0;in;i+) L.insert(i,sc.nextInt();请输入待插入的位置i(0curLen): int i=sc.nextInt();请输入待插入的数据值x: int x=sc.nextInt(); L.insert(i, x);插入后的顺序表为: L.display();请输入待删除元素的位置(0curLen-1): i=sc.nextInt(); L.remove(i);删除后的顺序表为:请输入待查找的数据元素: x=sc
17、.nextInt(); int order=L.indexOf(x); if (order=-1)此顺序表中不包含值为+x+的数据元素!值为元素在顺序表中的第+order+个位置上 4运行结果参考如图1-1所示:图1-1: 验证性实验运行结果备注: 以下设计性和应用性实验内容学生可根据自己的掌握程度或兴趣自行选择其一或其二完成。七、设计性实验编程实现删除有序顺序表中的所有重复元素,即使有序顺序表中相同的元素只保留一个。1. 实验要求 根据输入的n个非递减的有序数据建立一个有序顺序表,并输出有序顺序表中各元素值。 删除有序顺序表中所有的重复元素,并显示删除后的有序顺序表中各元素值。2. 核心算法
18、提示要在有序顺序表中删除重复的元素,首先就要抓住有序顺序表的特性:重复的元素总是在相邻的位置上,如:12,15,15,15,35,56,56,78。则删除重复元素后所得的有序表为:12,15,35,56,78。下面给出大致的操作步骤:从第0个元素开始,依次将它与后面相邻的元素进行比较,如果相等则将前面那个相等的元素从顺序表中删除;如果不相等,则继续往下比较,如此重复,直到最后一个元素为止。3. 核心算法描述/ 删除有序顺序表L中的所有重复元素,即使得有序顺序表中相同的元素只保留一个public static void remove_repeat(SqList L) int i=0; while
19、(iL.getCurLen()-1) if (L.getListElem()i.equals(L.getListElem()i+1) /如果第i个及第i+1个相邻元素值相等 for (int j=i+1;jL.getCurLen();j+) /将第i+1个元素及其之后的所有元素前移一个位地置 L.getListElem()j-1=L.getListElem()j; L.setCurLen(L.getCurLen()-1); /有序顺序表的表长减1 i+; 八、应用性设计实验编程实现一个简单学生成绩管理系统的设计。实验要求此系统的功能包括:1查询:按特定的条件查找学生2修改:按学号对某个学生的某
20、门课程成绩进行修改3插入:增加新学生的信息4删除:按学号删除已退学的学生的信息。学生成绩表的数据如下:学号姓名性别大学英语高等数学2008001AlanF93882008002DanieM75692008003Helen56772008004Bill87902008006Peter7986Amy68要求采用顺序存储结构来实现对上述成绩表的相关操作。实验B02: 链表的操作实验链表的操作1掌握线性表的链式存储结构的表示和实现方法。2掌握链表基本操作的算法实现。1建立单链表,并在单链表上实现插入、删除和查找操作(验证性内容)。2建立双向链表,并在双向链表上实现插入、删除和查找操作(设计性内容)。3
21、计算已知一个单链表中数据域值为一个指定值x的结点个数(应用性设计内容)。 Netbeans 6.5以上或Eclipse、MyEclipse等编程环境下。前期要求熟练掌握了Java语言的编程规则、方法和单链表和双向链表的基本操作算法。(1)根据输入的一系列整数,以0标志结束,用头插法建立单链表,并输出单链表中各元素值,观察输入的内容与输出的内容是否一致。(2)在单链表的第i个元素之前插入一个值为x的元素,并输出插入后的单链表中各元素值。(3)删除单链表中第i个元素,并输出删除后的单链表中各元素值。(4)在单链表中查找第i个元素,如果查找成功,则显示该元素的值,否则显示该元素不存在。2. 实验相关原理:线性表的链式储结构是用一组任意的存储单元依次存放线性表中的元素,这组存储单元可以是连续的,也可以是不连续的。为反映出各元素在线性表中的前后逻辑关系,对每个数据元素来说,除了存储其本身数据值之外,还需增加一个或多个指针域,每个指针域的值称为指针,又称作链,它用来指示它在线性表中的前驱或后继的存储地址。这两个部分的的一起组成一个数据元素的存储映像,称为结点,若干个结点链接成链表。如果一个结点中只含一个指针的链表,则称单链表。单链表中结点类描述如下:clas
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1