《数据结构》实验指导书(Java语言版)
数据结构实验指导书

《数据结构》实验指导书实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。
(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
(这里用于比较的字段为分数)练习及思考题:(1)顺序表的操作上有什么特点?(2)不固定数据元素的个数,而通过特殊数据来标记输入数据的结束,实现这样的输入操作。
实验二、链表实验目的:熟悉链式表的逻辑特性、存储表示方法的特点和链式表的基本操作。
实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。
(2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。
(3) 键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。
(用于比较的关键字字段为分数)。
(4) 输入关键字值x,删除表中所有关键字值<=x的结点。
(用于比较的关键字字段为分数)。
练习及思考题:(1)不同类型的数据元素所对应的链式表在类型定义和操作实现上有什么异同?(2)有头结点的链式表,有什么特点?实验三、栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。
实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。
实验内容:(1) 判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。
数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。
具体而言,实验的目的包括: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.每个学生需配备一台计算机,操作系统需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.单击“保存”按钮保存源程序。
《数据结构》实验指导书

《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。
同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。
2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。
4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。
在程序调试通过后, 打印输出程序清单和运行结果。
5.上机结束后, 总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
分析程序的优缺点、时空性能以及改进思想, 写出心得体会。
实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。
要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。
数据结构-实验指导书

《数据结构》实验指导书计算机专业实验中心编2020年7月25日目录《数据结构》上机实验内容和要求............................. 错误!未定义书签。
实验一、顺序表的实现及应用................................. 错误!未定义书签。
实验二、链表的实现及应用................................... 错误!未定义书签。
实验三、栈的实现及应用..................................... 错误!未定义书签。
实验四、队列的实现及应用................................... 错误!未定义书签。
实验五、二叉树操作及应用................................... 错误!未定义书签。
实验六、图的遍历操作及应用................................. 错误!未定义书签。
实验七、查找算法的实现..................................... 错误!未定义书签。
实验八、排序算法的实现..................................... 错误!未定义书签。
《数据结构》上机实验内容和要求通过上机实验加深对课程内容的理解,增加感性认识,提高程序设计、开发及调试能力。
本实验指导书适用于16学时《数据结构》实验课,实验项目具体内容如下:实验报告要求请按照实验教师要求,按时提交实验报告电子版文件。
实验报告格式可个性化定义,内容包括但不限于以下内容:1、题目、姓名、学号、班级(首页)2、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
3、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
《数据结构》实验书

目录实验一线性表基本操作的编程实现 (201)实验二堆栈或队列基本操作的编程实现 (49)实验四二维数组基本操作的编程实现 (18)实验五二叉树基操作的编程实现 (20)实验六图基本操作的编程实现 (45)(特别提示:程序设计包含两个方面的错误。
其一是错误,其二是能错误。
为了提高学生的编程和能力,本指导书给出的程序代码并的两种错误。
并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的要求。
希望大家以自己所学高级语言的基本功和点为基础,不要过于依赖给出的参考代码,这样才能有所进步。
如果学生能够根据要求完全自己编制,那就不好了。
)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结分主要功能,也可以用菜单进行管理完成大部分功能。
还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
【实验性质】【实验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。
建议实现键盘输入数据以实现程序的通据的函数。
【注意事项】【思考问题】1.线性表的顺序存储和链表存储的差异?优缺点分析?2.那些操作引发了数据的移动?3.算法的时间效率是如何体现的?4.链表的指针是如何后移的?如何加强程序的健壮性?【参考代码】(一)利用顺序表完成一个班级学生课程成绩的简单管理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个位置。
数据结构_java_实验1指导

实验一线性表及其应用一、实验目的1.掌握数据结构中线性表的基本概念。
2.熟练掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的实现。
3.熟练掌握链表的各种操作和应用。
二、本实验使用的接口public interface SimpleList {/***返回此列表中的元素个数。
此列表中的元素个数@return**/int size();/**将指定的元素插入到此列表中的指定位置。
** @param obj 要插入的元素* @param index 指定元素插入位置的索引如果索引超出范围ArrayIndexOutOfBoundsException*@throws*/void insert(Object obj, int index);/**删除此列表中指定位置的元素。
** @param index 要删除元素的索引如果索引超出范围ArrayIndexOutOfBoundsException@throws**/void delete(int index);/**返回列表中指定位置的元素。
** @param index 指定的索引指定索引处的元素@return*如果索引超出范围ArrayIndexOutOfBoundsException@throws**/Object get(int index);}三、实验内容1.设计一个带头结点的循环单链表类。
(1)要求z实现SimpleList接口,成员函数包括取数据元素个数、插入、删除、取数据元素。
z设计一个测试主函数,实际运行验证其各成员函数的正确性。
(2)测试z将1,2,3,…,9,10依次插入链表;z将0插入到索引为0的地方;z将100插入到链表末端;z删除索引为10的元素;z根据当前链表元素个数依次取得数据元素并打印。
(3)算法思想参见教材第二章。
注意:每次包含索引操作时检查索引是否合法,插入、删除操作时正确调整size大小。
《数据结构》实训指导书

《数据结构》实训指导书实训一线性表基本操作算法设计一、实训目的与要求1、掌握线性表的顺序存储结构的实现及其基本操作的算法设计;2、掌握线性表的链式存储结构的实现及其基本操作的算法设计;3、掌握算法转化为C程序的方法。
二、实训内容1、根据线性表L=(a,b,c,d,e,f),编写程序建立其顺序存储结构并完成插入或删除操作。
2、根据线性表L=(a,b,c,d,e,f),编写程序建立其链式存储结构并完成插入或删除操作。
三、实训步骤1、根据算法设计编写源程序;2、输入并编辑源程序;3、运行并分析程序;四、实训总结与体会[根据本次实训过程,总结你对线性表基本操作算法设计的基本体会]实训二栈和队列基本操作的算法设计一、实训目的与要求1、掌握栈的基本操作算法设计的实现;2、掌握队列的基本操作算法设计的实现。
二、实训内容1、根据栈S=(a,b,c,d,e),建立其顺序存储结构或链式存储结构,并完成对该栈的进栈或出栈操作;2、根据队列Q=(a,b,c,d,e),建立其顺序存储结构或链式存储结构,并完成对该队列的进队或出队操作;三、实训步骤1、根据算法编写源程序;2、输入并编辑源程序;3、调试、分析程序。
四、实训总结[根据本次实训内容和过程,总结你对栈、队列的基本操作算法设计的体会]实训三二叉树的遍历算法设计一、实训目的与要求1、掌握二叉树的链式存储结构的算法实现;2、掌握遍历二叉树的算法实现。
二、实训内容1、根据算法编写程序建立下图所示二叉树的链式存储结构(建立二叉链表);2、根据算法编写程序完成对该二叉树的中序遍历(或先序遍历、后序遍历)。
三、实训步骤1、根据算法编写程序;2、输入并编辑程序;3、运行并分析程序。
四、实训总结与体会【根据本次实训内容及过程,简述对二叉树存储结构的实现及遍历二叉树算法设计的体会】实训四图的存储及遍历算法设计一、实训目的与要求1、掌握图的邻接矩阵、邻接表存储结构的算法实现;2、掌握图的遍历算法设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验指导书(Java 语言版)《数据结构》课程实验指导《数据结构》实验教学大纲课程代码:0806523006 开课学期:3 开课专业:信息管理与信息系统总学时/实验学时:64/16 总学分/实验学分:3.5/0.5一、课程简介数据结构是计算机各专业的重要技术基础课。
在计算机科学中,数据结构不仅是一般程序设计的基础,而且是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础。
数据结构课程主要讨论各种主要数据结构的特点、计算机内的表示方法、处理数据的算法以及对算法性能的分析。
通过对本课程的系统学习使学生掌握各种数据结构的特点、存储表示、运算的原理和方法,学会从问题入手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储机构及其相应的操作算法,并初步掌握时间和空间分析技术。
另一方面,本课程的学习过程也是进行复杂程序设计的训练过程,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。
二、实验的地位、作用和目的数据结构是一门实践性较强的基础课程,本课程实验主要是着眼于原理和应用的结合,通过实验,一方面能使学生学会把书上学到的知识用于解决实际问题,加强培养学生如何根据计算机所处理对象的特点来组织数据存储和编写性能好的操作算法的能力,为以后相关课程的学习和大型软件的开发打下扎实的基础。
另一方面使书上的知识变活,起到深化理解和灵活掌握教学内容的目的。
三、实验方式与基本要求实验方式是上机编写完成实验项目指定功能的程序,并调试、运行,最终得出正确结果。
具体实验要求如下:1.问题分析充分地分析和理解问题本身,弄清要求,包括功能要求、性能要求、设计要求和约束,以及基本数据特性、数据间联系等等。
2.数据结构设计针对要解决的问题,考虑各种可能的数据结构,并且力求从中选出最佳方案(必须连同算法实现一起考虑),确定主要的数据结构和全程变量。
对引入的每种数据结构和全程变量要详细说明其功用、初值和操作的特点。
3.算法设计算法设计分概要和详细设计。
概要设计着重解决程序的类的设计问题,这包括考虑如何把被开发的问题程序分解成若干个类,并决定类与类之间的关系。
详细设计则要决定每个类内部的具体算法,包括输入、处理和输出。
4.测试用例设计准备典型测试数据和测试方案。
测试数据要有代表性、敏感性。
测试方案包括单元测试和单元集成测试。
5.上机调试对程序进行编译,纠正程序中可能出现的语法错误。
调试前,先运行一遍程序看看究竟将会发生什么。
如果情况很糟,则根据事先设计的测试方案并结合现场情况进行错误跟踪,包括打印执行路径或输出中间变量值等手段。
6. 程序性能分析在运行结果正确的前提下再分析程序中主要算法是否具有较好的时间复杂度和空间复杂度。
如果没有,则通过改变数据结构或操作方法使编写的程序性能达到最佳。
7. 实验总结每个实验完成后要认真书写实验报告,对程序运行的结构,要认真分析,总结每次实验项目的体会与收获。
四、报告与考核每个实验都要求学生根据上机内容写出实验报告,报告要求包括以下七个方面的内容:1.实验目的;2.实验内容;3.实验要求;4.算法设计;5.详细程序清单;6.程序运行结果;7.实验心得体会。
考核方式:每个实验项目根据以下两个方面进行考核:1.指导教师随堂抽查学生的实验过程(包括实验预习、实验出勤、实验结果的测试),并根据抽查结果评定学生成绩,此成绩占此实验总成绩的70%;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]. 北京:机械工业出版社,2006.[6] 朱战立. 数据结构- Java语言描述[M]. 北京:清华大学出版社,2005.[7] 张铭.数据结构与算法.高教出版社.2008.6[8] 张铭.数据结构与算法--学习指导与习题解析. 高教出版社.2009[9] 耿国华等数据结构-C语言描述. 高教出版社.2005.7[10] 刘怀亮. 数据结构(C语言描述) .冶金出版社.2005.2[11] 刘怀亮. 数据结构(C语言描述)习题与实验指导导.冶金出版社.2005.2[12] 蔡子经,施伯乐.数据结构教程.上海:复旦大学出版社.1994[13] 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社.1999;[14] 严蔚敏,吴伟民.数据结构题集(C语言版).北京:清华大学出版社.1999;[15] 徐孝凯.数据结构课程实验.北京:清华大学出版社.2002;[16] 孟佳娜,胡潇琨.算法与数据结构实验与习题.北京:机械工业出版社.2004.七、实验项目与内容提要序号实验名称目的要求、内容提要(限20字)每组人数实验学时实验类型必做选做所在实验分室1 顺序表的基本操作熟悉并完成顺序表上基本操作的算法及其应用问题的编程实1个班2 验证与设计必做现。
2 链表的基本操作熟悉并完成单链表和双向链表基本操作算法的编程实现。
1个班2 验证与设计必做3 栈的基本操作熟悉并完成顺序栈和链栈基本操作算法及其应用问题的编程实现1个班2 验证与设计必做4 队列的基本操作熟悉并完成循环顺序队列和循环链队列基本操作算法及其应用问题的编程实现。
1个班2 验证与设计必做5 二叉树的操作熟悉并完成二叉树遍历算法及其应用问题的编程实现。
1个班2 验证与设计必做6 静态查找表的查找操作熟悉并完成静态查找表上的顺序查找、二分查找和索引查找算法的编程实现1个班2 验证与设计必做7 二叉排序树的查找操作熟悉并完成在二叉排序树上进行查找、插入和删除操作的编程实现。
1个班2 验证与设计选做8 哈希表上的查找操作熟悉并完成哈希表的建立、查找和插入操作的编程实现1个班2 验证与设计选做9 排序操作熟悉并完成几种主要排序操作的编程实现。
1个班2 验证与设计必做10 图的遍历熟悉并完成图的遍历、最小生成树及其应用问题的编程实现1个班2 验证与设计选做实验B01: 顺序表的操作实验一、实验名称和性质所属课程数据结构实验名称顺序表的操作实验学时 2实验性质√验证□综合√设计必做/选做√必做□选做二、实验目的1.掌握线性表的顺序存储结构的表示和实现方法。
2.掌握顺序表基本操作的算法实现。
3.了解顺序表的应用。
三、实验内容1.建立顺序表。
2.在顺序表上实现插入、删除和查找操作(验证性内容)。
3.删除有序顺序表中的重复元素(设计性内容)。
4.完成一个简单学生成绩管理系统的设计(应用性设计内容)。
四、实验的软硬件环境要求硬件环境要求:PC机(单机)使用的软件名称、版本号以及模块:Netbeans 6.5以上或Eclipse、MyEclipse等编程环境下。
五、知识准备前期要求熟练掌握了Java语言的编程规则、方法和顺序表的基本操作算法。
六、验证性实验1.实验要求编程实现如下功能:(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。
(2)在顺序表的第i(0≤i≤n)个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。
(3)删除顺序表中第i(0≤i≤n-1)个元素,并输出删除后的顺序表中各元素值。
(4)在顺序表中查找值为x的数据元素初次出现的位置。
如果查找成功,则返回该数据元素在顺序表中的位序号;如果查找失败,则返回-1。
2. 实验相关原理线性表的顺序存储结构称为顺序表,线性表的顺序存储结构在线性表Java接口的实现类中描述如下:public class SqList implements IList{private Object[] listElem; // 线性表存储空间private int curLen; //线性表的当前长度……}【核心算法提示】⑴顺序表插入操作的基本步骤:要在当前的顺序表中的第i(0≤i≤n, n为线性表的当前长度)个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法,i的合法值范围:1≤i≤n+1,若是合法位置,就再判断顺序表是否满,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将待插入的数据元素x插入到该位置上,最后将线性表的当前长度值增加1,否则抛出异常。
⑵顺序表删除操作的基本步骤:要删除当前顺序表中的第i(0≤i≤n-1)个数据元素,首先仍然要判断i的合法性,i 的合法范围是0≤i≤n-1,若是合法位置,则将第i个数据元素之后的所有数据元素都前移一个位置,最后将线性表的当前长度减1,否则抛出异常。
⑶顺序表查找操作的基本步骤:要在当前顺序表中查找一个给定值的数据元素,则可以采用顺序查找的方法,从顺序表中第0个数据元素开始依次将数据元素值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,如果所有数据元素都与x比较但都不相等,表明值为x 的数据元素在顺序表中不存在,则返回-1值。
【核心算法描述】⑴在当前顺序表上的插入操作算法void insert(int i, Object x) throws Exception {if (curLen == listElem.length) // 判断顺序表是否已满throw new Exception("顺序表已满"); // 抛出异常if (i < 0 || i > curLen) // i不合法throw new Exception("插入位置不合法");// 抛出异常for (int j = curLen; j > i; j--)listElem[j] = listElem[j - 1];// 插入位置及其之后的所有数据元素后移一位 listElem[i] = x; // 插入xcurLen++; // 表长加1}⑵在当前顺序表上的删除操作算法void remove(int i) throws Exception {if (i < 0 || i > curLen - 1) // i不合法throw new Exception("删除位置不合法");// 抛出异常for (int j = i; j < curLen - 1; j++)listElem[j] = listElem[j + 1];// 被删除元素及其之后的数据元素左移一个存储位置 curLen--; // 表长减1}⑶在当前顺序表是的查找操作算法int indexOf(Object x) {int j = 0; // j指示顺序表中待比较的数据元素,其初始值指示顺序表中第0个数据元素while (j < curLen && !listElem[j].equals(x)) //依次比较j++;if (j < curLen) // 判断j的位置是否位于顺序表中return j; // 返回值为x的数据元素在顺序表中的位置elsereturn -1; // 值为x的数据元素在顺序表中不存在}3.源程序代码参考package sy;import java.util.Scanner;class SqList {private Object[] listElem; // 线性表存储空间private int curLen; // 当前长度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(int maxSize) {curLen = 0; // 置顺序表的当前长度为0listElem = new Object[maxSize];// 为顺序表分配maxSize个存储单元}// 在线性表的第i个数据元素之前插入一个值为x的数据元素。