数据结构试验指导书V2[1].0

合集下载

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。

具体而言,实验的目的包括: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、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。

辽宁科技大学 《数据结构实验指导书》(自动化tongxin)

辽宁科技大学 《数据结构实验指导书》(自动化tongxin)

目次前言 (1)实验一线性表的操作 (3)实验二栈和队列的操作 (11)实验三图算法 (16)实验四排序选择 (18)前言《数据结构》是计算机及相关专业的一门核心基础课程,也是很多高校考研专业课之一。

它主要介绍线性结构、树结构、图结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法及时、空效率分析。

这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。

通过学习,要求学生能够掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。

学习这门课程,习题和实验是两个关键环节。

学生理解算法,上机实验是最佳的途径之一。

因此,实验环节的好坏是学生能否学好《数据结构》的关键。

为了更好地配合学生实验,特编写试验指导书。

希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《数据结构》成为具有省内一流水平的课程。

一、实验目的更好的理解算法的思想、培养编程能力。

二、实验要求1、每次实验前学生必须根据试验内容认真准备实验程序及调试时所需的输入数据。

2、在指导教师的帮助下能够完成实验内容,得出正确的实验结果。

3、实验结束后总结实验内容、书写实验报告。

4、遵守实验室规章制度、不缺席、按时上、下机。

5、实验学时内必须做数据结构的有关内容,不允许上网聊天或玩游戏,如发现上述现象,取消本次上机资格,平时成绩扣10分。

三、实验环境VC++6.0四、说明1、本实验的所有算法中元素类型可以根据实际需要选择。

2、实验题目中带*者为较高要求,学生可自选;其余部分为基本内容,应尽量完成(至少完成70%,否则实验不合格)。

3、数据结构是很多高校的硕士研究生入学考试的专业课之一,希望有志于考研的学生能够在学习过程中注意各种算法的理解,以便为考研做一定的准备。

五、实验报告的书写要求1.明确实验的目的及要求;2.记录实验的输入数据和输出结果;3.说明实验中出现的问题和解决过程;4.写出实验的体会和实验过程中没能解决的问题;六、参考书目《数据结构-----C语言描述-》耿国华等高等教育出版社《DATA STRUCTURE WITH C++》William Ford,William Topp 清华大学出版社(影印版)《数据结构》(C语言描述)严蔚敏清华大学出版社实验一线性表的操作实验类型:验证性实验要求:必修实验学时:2学时一、实验目的参照给定的顺序表和链表的程序样例,验证给出的线性表的常见算法线性表理解。

《数据结构》实验指导书

《数据结构》实验指导书

数据结构实验课程大纲本大纲是针对计算机科学与技术专业本科对数据结构的基本要求而编写的。

一、目的与任务数据结构是一门实践性很强的课程,每个学生必须完成一定数量的上机作业。

通过上机作业,要求在数据结构的逻辑特性和存贮表示、基本数据结构的选择和应用、算法设计及其实现等方面加深对课程基本内容的理解。

同时,在程序设计方法、程序设计风格及上机操作等基本技能和科学作风方面受到比较系统的、严格的训练。

提高分析问题和用计算机解决实际问题的能力。

为后续课程的学习以及为应用软件特别是非数值软件的开发打下良好的理论基础和实践基础。

二、课程内容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) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。

要求尽可能少地修改前面的程序来得到新程序。

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

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

数据结构与算法课程实习实验指导书上海第二工业大学计算机与信息学院软件工程系目录实验一顺序表的基本操作 (2)实验二链表的基本操作 (3)实验三二叉树的基本操作 (4)实验四综合应用 (5)附录A 实验报告示例 (9)附录B 实验报告封面、评语得分表 (12)附录C 最后要提交的文档形式 (15)实验一顺序表的基本操作【实验目的】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.每个学生需配备一台计算机,操作系统需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、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。

数据结构实验指导书(本科正式)

数据结构实验指导书(本科正式)

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

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

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

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

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

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立线性表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

三、用C语言编程实现两个按递增顺序排列线性表的合并1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。

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

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

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

V 2.0 数据结构与算法实验指导书编写:陆绍飞校核:______湖南大学软件学院2011年9月目录实验教学大纲 (1)一、课程所占的学时、学分及实验课所占学时、学分 (1)二、实验适用专业: (1)三、实验的任务、性质和目的 (1)四、实验的基本理论 (1)五、实验方式与基本要求 (2)六、实验项目的设置与内容提要 (2)七、考核方式与评分办法 (3)实验项目1——三元组ADT (4)实验项目2——复数四则运算 (6)实验项目3——基本线性表运算 (8)实验项目4——基本线性表就地逆置 (13)实验项目5——数制转换 (15)实验项目6——回文判断 (17)实验项目7——算术表达式求值演示 (19)实验项目8——迷宫问题 (22)实验项目9——树与二叉树 (27)实验项目10——图遍历演示 (30)实验项目11——二叉排序树 (33)实验项目12——内部排序算法比较 (35)实验项目13——哈希表设计 (36)实验项目14——约瑟夫环 (37)实验项目15——停车场管理 (38)实验项目16——旅游导游系统 (39)实验教学大纲课程名称:数据结构与算法课程编号:26547本大纲主笔人:李睿陆绍飞修改一、课程所占的学时、学分及实验课所占学时、学分总学时:80 总学分:4实验课时:48 实验学分:1二、实验适用专业:软件工程、计算机专业、通信、信息类本科学生三、实验的任务、性质和目的数据结构与算法是一门技术性与实践性很强的课程,实验的设置十分重要。

为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,通过要求完成对一些典型问题的分析及其实现的各环节,使学生掌握所用到的一些技术,扩充知识面。

通过实验内容的训练,突出构造性思维训练的特征,提高学生组织数据与进行编写大型程序能力。

同时,上机实习是对学生的一种全面综合的训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

实习题中的问题比平时的习题复杂得多,也更接近实际。

实习着眼于原理与应用的结合点,使学生学会把书上学到的知识解决实际问题,培养软件工程所需要的动手能力;另一方面,能使书本知识变“活”,起到深化理解和灵活掌握教学内容的目的。

平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。

此外,还有很重要的一点是:机器是比任何教师都严厉的检查者。

四、实验的基本理论“数据结构与算法”是计算机专业一门重要的专业技术基础课程。

本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法;介绍了常用的多种查找和排序技术,并对进行性能分析和比较,内容非常丰富。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础,数据结构与算法课程是计算机专业的一门核心的关键性课程。

为了使学生熟练掌握并运用所学知识,本实验安排了16个主实习单元,除实习1、2作为预备练习之外,其它各单元的训练重点在于基本的数据结构,而不强调面面俱到。

各实习单元与教科书的各章只具有粗略的对应关系,一个实习题常常涉及几部分教学内容。

每个实习题采取统一的格式,由问题描述、基本要求、测试数据、实现提示和选做内容等5个部分组成。

问题描述旨在为读者建立问题提出的背景环境,指明问题“是什么”;基本要求则对问题进一步求精,划出问题的边界,指出具体的参量或前提条件,并规定该题的最低限度要求;测试数据部分旨在为检查学生上机作业提供方便,在完成实习题时应自己设计完整和严格的测试方案,当数据输入量较大时,提倡以文件形式向程序提供输入数据;实现提示对实现中的难点及其解法思路等问题作了简要提示;选做内容向那些尚有余力的读者提出了更严峻的挑战,同时也能开拓其他读者的思路,在完成基本要求时就力求避免就事论事的不良思想方法,尽可能寻求具有普遍意义的解法,使得程序结构合理,容易修改扩充。

五、实验方式与基本要求为了培养一个软件工作者所应具备的科学工作的方法和作风,实验过程要求按以下5个步骤进行:1.问题分析和任务定义;2.数据类型和系统设计;3.编码实现和静态检查;4.上机准备和上机调试;5.总结和整理实习报告。

六、实验项目的设置与内容提要七、考核方式与评分办法以实验报告及程序完成情况计算成绩,实验成绩占总成绩的20%。

实验项目1——三元组ADT1.1 实验目的本次实验的主要目的是在于帮助读者熟悉抽象数据类型的表示和实现方法。

抽象数据类型需要借助固有数据类型来表示和实现,即利用高级程序设计语言中已经存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节依赖于所用语言的功能。

通过本次实验还可帮助学生复习高级语言的使用方法。

1.2实验内容[问题描述]设计实现抽象数据类型“三元组”。

每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,两个三元组的对应分量相加或相减,给三元组的各分量同乘一个比例因子,显示三元组,销毁三元组等。

[基本要求]实现创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操作。

[算法描述]template <class Elem> class Triple{Private:Elem e1;Elem e2Elem e3;public:Triple(Elem v1, Elem v2, Elem v3){ e1=v1; e2=v2; e3=v3; }Elem Get(i){初始条件:三元组已经存在,1≤i≤3;操作结果:返回三元组的第i个分量}Bool put(i,e){初始条件:三元组已经存在,1≤i≤3;操作结果:将三元组的第i个分量赋值为e,成功返回true,否则返回false;}Elem GetMax(){初始条件:三元组已经存在,操作结果:返回三元组中最大分量值e;}Elem GetMin(){初始条件:三元组已经存在,操作结果:返回三元组中最小分量值e;}void Output(){初始条件:三元组已经存在,操作结果:输出三元组中所有分量值;}[测试数据]由学生任意指定。

[选作内容]实现两个三元组的对应分量相加或相减,给三元组的各分量同乘一个比例因子,销毁三元组等操作。

实验项目2——复数四则运算2.1 实验目的本次实验与实验项目1为同一类型实验,主要目的是在于帮助读者进一步熟悉抽象数据类型的表示和实现方法。

抽象数据类型需要借助固有数据类型来表示和实现,即利用高级程序设计语言中已经存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节依赖于所用语言的功能。

2.2实验内容[问题描述]设计实现一个可进行复数运算的演示程序。

[基本要求]实现下列六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积;5)从已知复数中分离出实部;6)从已知复数中分离出虚部;运算结果以相应的复数或实数的表示形式显示。

[算法描述]该算法中Elem 为float 或double类型template <class Elem> class Complex{Private:Elem reality;Elem falsehoodpublic:Triple(Elem r, Elem f){ reality=r; falsehood=f; }Complex operate+(const complex &){初始条件:已经存在两个复数;操作结果:将两个复数的实部和虚部分别进行向加得到一个新的复数}Complex operate-(const complex &){初始条件:已经存在两个复数;操作结果:将两个复数的实部和虚部分别进行向减得到一个新的复数}Complex operate*(const complex &){初始条件:已经存在两个复数;操作结果:按照复数乘法规则将两个复数的实部相乘结果减去两个复数虚部相乘结果为新生成复数的实部;将两个复数的虚部和实部交叉相乘再相加的结果作为新生成复数的虚部。

}Elem reality(){初始条件:复数已经存在;操作结果:返回复数的实部;}Elem falsehood (){初始条件:复数已经存在;操作结果:返回复数的虚部;}void Output(){初始条件:复数已经存在,操作结果:以复数形式输出复数到屏幕上;}[测试数据]由学生依据软件工程的测试技术自己确定。

注意测试边界数据,如复数0。

[实现提示]定义复数为两个相互之间存在次序关系的实数构成抽象数据类型,利用实数的操作来实现复数的操作。

[选作内容]实现复数的其他运算,如:两个复数相除、求共轭。

实验项目3——基本线性表运算3.1 实验目的(1)掌握基本线性表顺序存储的类型定义及C++语言实现。

(2)掌握基本线性表链式存储的类型定义及C++语言实现。

(3)掌握基本线性表顺序存储结构中的各种基本操作。

(4)掌握基本线性表链式存储结构中的各种基本操作。

3.2实验内容[问题描述]基本线性表经常进行的运算操作有创建基本线性表、求基本线性表的长度、在基本线性表中查找某个数据元素、在某个位置插入一个新数据元素、在某个线性表中删除某个数据元素以及基本线性表的输出等操作。

试编程实现基本线性表的这些基本运算。

[基本要求]实现基本线性表的基本运算可以采用链式存储方式实现,也可以采用顺序存储的方式实现,在此给出这两种存储方式的实现方法,学生可任选其一进行具体实现。

[算法描述]1 顺序存储方式templet <class Elem>class AList:public List<Elem>{private:int maxSize;int listSize;int fence;Elem* listArray;public://线性表创建操作实现AList(int size=DefaultListSize){maxSize=size;listSize=fence=0;listArray=new Elem[maxSize]}~AList(){delete [] listArray;}void clear(){delete [] listArray;listSize=fence=0;listArray=new Elem[maxSize];}bool insert(const Elem&);bool append(const Elem&);bool remove(Elem&);void setStart(){fence=0;}void setEnd(){fence=listSize;}void prev(){if(fence!=0) fence--;}void next(){if(fence<=listSize) fence++}int Length() const{return listSize;}int leftLength() const{return fence;}int rightLength() const{return listSize-fence;}bool setPos(int Pos){if((pos>=0)&&(pos<=listSize))fence=pos;return(pos>=0)&&(pos<=listSize)}//线性表中插入操作实现templet <class Elem>bool AList:: insert(const Elem&item){if(listSize==maxSize) return false;for (int i=listSize;i>fence;i--)listArray[i]=listArray[i-1];listArray[fence]=item;listSize++;return true;}//在线性表末尾追加数据操作实现templet <class Elem>bool AList:: append(const Elem&item){if(listSize==maxSize)return false;listArray[listSize++]=item;return true;}//线性表中删除操作实现templet <class Elem> bool AList:: remove(Elem&it){ if(rightlLenth()==0)return false;it=listArray[fence;];for(int i=fence;i<listSize-1;i++)listArray[i]=listArray[i+1];listSize--;return true; }//线性表中查找操作实现templet <class Elem> bool AList::bool find(Elem k){ Elem it;for(L.setStart();L.getV alue(it);L.next())if(K==it) return true;//found itreturn false;// K not found}2 链式存储方式template <class Elem>class LList:public List<Elem>{private:Link<Elem>*head;Link<Elem>*tail;Link<Elem>*fence;int leftcnt, rightcnt;//基本线性表的创建操作实现void init(){fence=head=tail=new Link<Elem>;leftcnt=rightcnt=0;}//initvoid removeall(){while(head!=null){fence=head;head=head.next; delete fence;} } //removeallpublic:LList(int size=DefaultListSize){init();}~LList(){removeall();}void clear(){removeall(); init();}bool insert(const Elem&);bool append(const Elem&);bool remove(Elem&);void setStart(){fence=head;rightcnt+=leftcnt;leftcnt=0;}//setStart;void setEnd(){fence=tail;leftcnt+=rightcnt;rightcnt=0;}//setEndvoid prev();void next(){if(fence!=tail){fence=fence->next;rightcnt--; leftcnt++}}//next;int leftLength()const{ return leftcnt;}int rightLength() const{return rightcnt;}bool setPos(int Pos);bool getV alue(Elem &it) const{if(rightLength()==0) return false;it=fence->next->element; return true;}//getV aluevoid print() const;};//基本线性表插入操作的实现template <class Elem>bool LList<Elem>::insert(const Elem&item){fence->next=new Link<Elem>(item,fence->next);if(tail==fence)tail=fence->next;rightcnt++;return true;}//基本线性表末尾追加数据操作的实现template <class Elem>bool LList<Elem>::append(const Elem&item){tail=tail->next=new Link<Elem>(item,null);rightcnt++;return true;}//基本线性表删除操作的实现template <class Elem>bool LList<Elem>::remove(Elem& it){if(fence->next==NULL) return false;it=fence->next->element;Link<Elem>*Itemp=fence->next;fence->next=Itemp->next;if(tail==Itemp) tail=fence;delete Itemprightcnt--;return true;}template <class Elem>void LList<Elem>::prev(){Link<Elem> * temp=head;if (fence==head) return;while(temp->next!=fence)temp=temp->next;fence=temp;leftcnt--; rightcnt++;}template <class Elem>bool LList<Elem>::setPos(int pos){if((pos<0)||(pos>(rightcnt+leftcnt)))return false;setStart();for(int i=0;i<pos;i++)next();return true;}template <class Elem>void LList<Elem>::print() const{Linl<Elem>*temp=head;cout<<“<”;while(temp!=fence){cout<<temp->next->element<<“”;temp=temp->next;}//while;cout<<“|”;while(temp->next=NULL){cout<<temp->next->element<<“”;temp=temp->next;}//while;cout<<“>\n”;}[测试数据]由学生依据软件工程的测试技术自己确定。

相关文档
最新文档