数据结构实验指导-手把手教你做实验

合集下载

数据结构实验指导-手把手教你做实验

数据结构实验指导-手把手教你做实验
2018/11/28 数据结构实验课件 8
如何进行数据结构的实验

五、设计算法


在确定相关数据结构的存储表示后,应给出每 一个操作对应的算法定义及算法实现。 以复数的基本操作InitComplex(&C,vr,vi)为例:

InitComplex(&C,vr,vi)的定义如下: Status InitComplex(Complex &C, float vr, float vi) InitComplex(&C,vr,vi)的实现如下: Status InitComplex(Complex &C, float vr, float vi) { C.real = vr; C.image =vi; return OK; }

对离散数学课程的教学要求是:
1.掌握离散数学的基本理论。 2.具有一定的逻辑思维和推理能力。 3.熟练掌握命题代数和图论的基本理论。
2018/11/28
数据结构实验课件
2
如何进行数据结构的实验



一、首先弄清楚问题(实验题目,需求分析) 二、完成问题的模型的建立(ADT) 三、选择实验环境 四、设计数据结构的存储结构 五、设计算法 六、完成代码的编写 七、上机完成程序的调试、数据测试 八、整理实验报告 九、完成实验的总结
2018/11/28 数据结构实验课件 5
如何进行数据结构的实验

以下是复数的抽象数据类型表示(参考)
ADT complex{


数据对象:D={a,b|a,b∈FloatSet } 数据关系:R={ <a,b>|a,b ∈D } 基本操作:
InitComplex(&C,vr,vi); 操作结果:构造一个复数,元素a,b分别被赋以参数vr,vi的值 OutComplex(C); 操作结果: 输出一个复数 AddComplex(&C,C1,C2); 操作结果:求两个复数C1,C2之和,结果存入C

数据结构实验-实验指导书

数据结构实验-实验指导书

实验一线性表操作一、实验目的1熟悉并掌握线性表的逻辑结构、物理结构。

2熟悉并掌握顺序表的存储结构、基本操作和具体的函数定义。

3熟悉VC++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。

4熟悉VC++操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。

二、实验要求1实验之前认真准备,编写好源程序。

2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。

3不断积累程序的调试方法。

三、实验内容基本题:1对元素类型为整型的顺序存储的线性表进行插入、删除和查找操作。

加强、提高题:2、编写一个求解Josephus问题的函数。

用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人。

然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。

最后分析所完成算法的时间复杂度。

定义JosephusCircle类,其中含完成初始化、报数出圈成员函数、输出显示等方法。

(可以选做其中之一)加强题:(1)采用数组作为求解过程中使用的数据结构。

提高题:(2)采用循环链表作为求解过程中使用的数据结构。

运行时允许指定任意n、s、m数值,直至输入n = 0退出程序。

实验二栈、队列、递归应用一、实验目的1熟悉栈、队列这种特殊线性结构的特性2熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。

二、实验要求1实验之前认真准备,编写好源程序。

2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。

3不断积累程序的调试方法。

三、实验内容基本题(必做):1分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。

2、假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设头指针,试设计相应的置队空、入队和出队的程序。

加强题:3设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。

数据结构实验指导书

数据结构实验指导书

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

具体而言,实验的目的包括: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:顺序表基本操作一、实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。

2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。

3.掌握对多函数程序的输入、编辑、调试和运行过程。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对顺序表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

4.整理并上交实验报告。

三、实验内容:1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La。

(2)将La置为空表。

(3)销毁La。

(4)在La中插入一个新的元素。

(5)删除La中的某一元素。

(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。

(7)打印输出La中的元素值。

2.编写程序完成下面的操作:(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。

(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。

(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。

四、思考与提高假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ?一、实验目的1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。

2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对单链表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

4.整理并上交实验报告。

三、实验内容1.编写程序完成单链表的下列基本操作:(1)初始化单链表La。

(2)在La中插入一个新结点。

(3)删除La中的某一个结点。

(4)在La中查找某结点并返回其位置。

〈数据结构〉上机实验指导

〈数据结构〉上机实验指导

〈数据结构〉上机实验指导数据结构是计算机科学中的一门重要课程,它研究的是数据的组织、存储和管理方式,以及对数据进行操作和处理的算法。

上机实验是数据结构课程的重要组成部分,通过实践操作,能够更好地理解和掌握数据结构的基本概念、算法和应用。

在进行〈数据结构〉上机实验之前,首先需要准备实验环境。

通常情况下,我们会使用一种编程语言来实现数据结构的相关操作,比如C++、Java等。

根据自己的实际情况和实验要求,选择一种合适的编程语言,并确保在实验环境中已经正确安装了相应的编译器或解释器。

接下来,我们可以开始进行具体的上机实验了。

下面以链表为例,介绍一下〈数据结构〉上机实验的指导步骤和要求:1. 实验目的:掌握链表的基本概念、操作和应用,理解链表与数组的区别和联系。

2. 实验原理:链表是一种动态数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。

链表的特点是插入和删除操作的时间复杂度为O(1),但是查找操作的时间复杂度为O(n)。

3. 实验步骤:3.1 创建链表:首先,我们需要定义一个链表的结构体,包含数据和指针两个成员变量。

然后,通过动态内存分配来创建链表的节点,并将节点之间通过指针连接起来,形成一个完整的链表。

3.2 插入节点:可以在链表的任意位置插入一个新的节点。

插入节点的操作包括:创建一个新的节点,将新节点的指针指向插入位置的下一个节点,将插入位置的前一个节点的指针指向新节点。

3.3 删除节点:可以删除链表中的任意一个节点。

删除节点的操作包括:将要删除的节点的前一个节点的指针指向要删除的节点的下一个节点,然后释放要删除的节点的内存空间。

3.4 遍历链表:可以通过遍历链表来访问链表中的每一个节点,并对节点进行相应的操作。

遍历链表的操作包括:从链表的头节点开始,依次访问每个节点,直到链表的尾节点。

3.5 查找节点:可以根据节点的值来查找链表中的某一个节点。

查找节点的操作包括:从链表的头节点开始,依次比较每个节点的值,直到找到目标节点或者链表结束。

《数据结构》实验指导书

《数据结构》实验指导书

《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。

实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。

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

实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。

2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。

3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。

对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。

4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。

在程序调试通过后, 打印输出程序清单和运行结果。

5.上机结束后, 总结和整理实习报告。

实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。

2.简述存储结构和算法的基本思想。

3.列出调试通过的源程序。

4.列出上面程序对应的运行结果。

分析程序的优缺点、时空性能以及改进思想, 写出心得体会。

实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。

要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。

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

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

《数据结构》实验指导书实验一线性表【实验目的】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.熟悉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;注意结点的建立方法及构造新结点时指针的变化。

数据结构 实验指导手册

数据结构  实验指导手册

数学与计算机科学学院计算机科学与技术专业
《数据结构》课程实验
指导手册
目录
实验1:顺序表的定义及其相关操作算法的实现 (1)
实验2:链表的定义及其相关操作算法的实现 (2)
实验3:栈和队列的定义及其基本操作算法的实现 (4)
实验4:串模式匹配算法的设计与实现 (5)
实验5:二叉树的创建、遍历及其它基本操作的实现 (6)
实验6:哈夫曼树及哈夫曼编码的算法实现 (7)
实验7:查找算法的实现(1) (8)
实验8:查找算法的实现(2) (9)
实验9:几个主要排序算法的实现与比较 (10)
实验1:顺序表的定义及其相关操作算法的实现
实验2:链表的定义及其相关操作算法的实现
实验3:栈和队列的定义及其基本操作算法的实现
实验4:串模式匹配算法的设计与实现
实验5:二叉树的创建、遍历及其它基本操作的实现
实验6:哈夫曼树及哈夫曼编码的算法实现
实验7:查找算法的实现(1)
实验8:查找算法的实现(2)
实验9:几个主要排序算法的实现与比较。

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

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

《数据结构和算法》实验指导书郁松软件学院第一部分:《数据结构》实验步骤和实验报告规范一、《数据结构》实验步骤随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加,因此软件开发需要系统的方法。

一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。

虽然数据结构课程中的实习题的复杂度远不如实际中真正的软件系统,但为了培养一个软件工作者所应具备的科学工作的方法和作风,我们制订了如下所述完成实习的5个步骤:1、问题分析和任务定义通常,实验题目的陈述比较简洁,或者说有模棱两可的含义。

因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么。

注意:本步骤强调的是做什么,而不是怎么做。

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

例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等等。

这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式输入的数据。

2、数据类型和系统设计在设计这一步骤中需分逻辑设计和详细设计两步实现。

逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。

详细设计则为定义相应的存储结构并写出各过程和函数的伪码算法。

在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。

作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的规格说明),各个主要模块的算法,并画出模块之间的调用关系图。

详细设汁的结果是对数据结构和基本操作的规格说明作出进一步的求精,写出数据存储结构的类型定义,按照算法书写规范用类C语言写出过程或函数形式的算法框架。

《数据结构》实验指导(一)

《数据结构》实验指导(一)

实验一线性表一、实验目的线性表是最简单、最常用的基本数据结构,在实际问题中有着广泛的应用。

通过本章的实验,巩固对线性表逻辑结构的理解,掌握线性表的存储结构及基本操作的实现,为应用线性表解决实际问题奠定良好的基础,并进一步培养以线性表作为数据结构解决实际问题的应用能力。

(1)掌握线性表的顺序存储结构;(2)验证顺序表及其基本操作的实现;(3)掌握数据结构及算法的程序实现的基本方法。

(4)掌握线性表的链接存储结构;(5)验证单链表及其基本操作的实现;(6)进一步掌握数据结构及算法的程序实现的基本方法。

二、实验示例学习——顺序表操作实验要求:(1)建立含有若干个元素的顺序表;(2)对已建立的顺序表实现插入、删除、查找等基本操作。

实现提示:首先定义顺序表的数据类型——顺序表类SeqList,包括题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。

const int MaxSize=10;template <class T> //定义模板类SeqListclass SeqList{public:SeqList( ){length=0;} //无参构造函数SeqList(T a[ ], int n);//有参构造函数void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素T Delete(int i); //删除线性表的第i个元素int Locate(T x ); //按值查找,求线性表中值为x的元素序号void PrintList( ); //遍历线性表,按序号依次输出各元素private:T data[MaxSize]; //存放数据元素的数组int length; //线性表的长度};其次,建立含有n个数据元素的顺序表,即设计构造函数。

算法如下:template <class T>SeqList:: SeqList(T a[ ], int n){if (n>MaxSize) throw "参数非法";for (i=0; i<n; i++)data[i]=a[i];length=n;}最后,对建立的顺序表设计插入、删除、查找等基本操作的算法。

《数据结构》实验指导及实验报告栈和队列

《数据结构》实验指导及实验报告栈和队列

《数据结构》实验指导及实验报告栈和队列实验四栈和队列⼀、实验⽬的1、掌握栈的结构特性及其⼊栈,出栈操作;2、掌握队列的结构特性及其⼊队、出队的操作,掌握循环队列的特点及其操作。

⼆、实验预习说明以下概念1、顺序栈:2、链栈:3、循环队列:4、链队三、实验内容和要求1、阅读下⾯程序,将函数Push和函数Pop补充完整。

要求输⼊元素序列1 2 3 4 5 e,运⾏结果如下所⽰。

#include#include#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存储空间初始分配量*/#define STACKINCREMENT 5 /*存储空间分配增量*/typedef int ElemType; /*定义元素的类型*/typedef struct{ElemType *base; /*定义栈底部指针*/ElemType *top; /*定义栈顶部指针*/int stacksize; /*当前已分配的存储空间*/}SqStack;int InitStack(SqStack *S); /*构造空栈*/int push(SqStack *S,ElemType e); /*⼊栈操作*/int Pop(SqStack *S,ElemType *e); /*出栈操作*/int CreateStack(SqStack *S); /*创建栈*/void PrintStack(SqStack *S); /*出栈并输出栈中元素*/int InitStack(SqStack *S){S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType)); if(!S->base) return ERROR;S->top=S->base;int Push(SqStack *S,ElemType e){if(S->top-S->base>=S->stacksize){S->base=(ElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(ElemType)); S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*S->top++=e;return 1}/*Push*/int Pop(SqStack *S,ElemType *e){if(S->top!=S->base){*e=*--S->top;return 1;}elsereturn 0;}/*Pop*/int CreateStack(SqStack *S){int e;if(InitStack(S))printf("Init Success!\n");else{printf("Init Fail!\n");return ERROR;}printf("input data:(Terminated by inputing a character)\n"); while(scanf("%d",&e))Push(S,e);return OK;}/*CreateStack*/while(Pop(S,&e))printf("%3d",e);}/*Pop_and_Print*/int main(){SqStack ss;printf("\n1-createStack\n");CreateStack(&ss);printf("\n2-Pop&Print\n");PrintStack(&ss);return 0;}●算法分析:输⼊元素序列1 2 3 4 5,为什么输出序列为5 4 3 2 1?体现了栈的什么特性?2、在第1题的程序中,编写⼀个⼗进制转换为⼆进制的数制转换算法函数(要求利⽤栈来实现),并验证其正确性。

数据结构上机实验指导

数据结构上机实验指导

《数据结构》课程上机实验指导书实验一【实验名称】顺序表的基本算法【实验目的】创建一个顺序表,掌握线性表顺序存储的特点。

设计和验证顺序表的查找、插入、删除算法。

【实验要求】(1)从键盘读入一组整数,按输入顺序形成顺序表。

并将创建好的顺序表元素依次打印在屏幕上。

(2)设计一个带选择菜单的主函数,菜单中具备任意选择删除、插入、查找数据元素的功能。

(3)当选择删除功能时,从键盘读入欲删除的元素位置或元素值,按指定方式删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号。

(4)每种操作结束后,都能在屏幕上打印出此时顺序表元素的遍历结果。

【实验步骤】1、实验前先写好算法。

2、上机编写程序。

3、编译。

4、调试。

例程:书上参考算法2-1,2-4,2-5,2-6,2-8!带菜单的主函数参考书上2.5综合实例!注意:顺序表的结构体!typedef struct{datatype items[listsize];int length;}SpList;实验二【实验名称】单链表的基本算法【实验目的】创建一个单链表,掌握线性表链式存储的特点。

设计和验证链表的查找、插入、删除、求表长的算法。

【实验要求】(1)从键盘读入一组整数,按输入顺序形成单链表。

并将创建好的单链表元素依次打印在屏幕上。

(注意:选择头插法或者尾插法!)(2)设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找数据元素,和求单链表表长等几项功能。

(3)当选择删除功能时,从键盘读入欲删除的元素位置,按指定位置删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号;当选择求表长功能时,返回该单链表表长的数值。

(4)每种操作结束后,都能在屏幕上打印出此时单链表元素的遍历结果。

【实验步骤】1、实验前先写好算法。

数据结构实验指导书

数据结构实验指导书

实验一线性表的基本操作一、实验目的线性表是最简单的一种线性结构,它有两种存储方法:顺序存储和链式存储。

实验目的如下:1、会定义线性表的顺序存储结构和链式存储结构。

2、熟悉顺序表和链表的一些基本操作和应用。

3、加深对线性表的理解,逐步培养解决实际问题的编程能力。

二、实验环境运行C或VC++的微机。

三、实验内容1.基本操作:●初始化线性表●向线性表指定位置插入元素●删除指定元素值的线性表记录●删除指定位置的线性表记录●查找线性表中的元素●输出线性表元素2.提高题目(1)已知线性表LA的数据元素(n个,n为偶数),现要求将LA 拆开成两个新的线性表LB,LC。

要求LB中的数据元素为LA中的奇数位序的数据元素(a1, a3, …, a n-1),LC中的数据元素为LA中的偶数位序的数据元素(a2, a4, …, a n)。

2. 已知线性表LA的数据元素(n个),现要求将LA的数据元素复制到另一个线性表LB中。

3. 设有一个线性表采用顺序存储结构,表中的数据元素值为正整数(n个)。

设在O(n) 时间内,将线性表分成两为两部分,其中左半部分每个元素都小于原表的第一个元素,而右半部分则相反。

4. 将一个头结点指针为a的单链表A分解成两个单链表A和B,其头结点指针分别为a和b,使得A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。

5. 约瑟夫问题:设编号为1,2,…,n的n(n>0)个人按顺时针方向围坐一圈,每人持有一正整数密码。

开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m 时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新从1报数。

如此下去,直到所有人全部出列为止。

令n最大值取30。

要求设计一个程序模拟此过程,求出出列编号序列(采用循环单链表结构)。

四、实验报告所有的基础操作和5到题目都需要课堂检查,直接打分。

《数据结构》实验指导书(C语言版)(浦江学院)

《数据结构》实验指导书(C语言版)(浦江学院)

实验1: 顺序表的操作实验一、实验名称和性质二、实验目的1.掌握线性表的顺序存储结构的表示和实现方法。

2.掌握顺序表基本操作的算法实现。

3.了解顺序表的应用。

三、实验内容1.建立顺序表。

2.在顺序表上实现插入、删除和查找操作(验证性内容)。

3.删除有序顺序表中的重复元素(设计性内容)。

四、实验的软硬件环境要求硬件环境要求:PC机(单机)使用的软件名称、版本号:Windows环境下的VC++6.0五、知识准备前期要求熟练掌握了C语言的编程规则、方法和顺序表的基本操作算法。

六、验证性实验1.实验要求编程实现如下功能:(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。

(2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。

(3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。

(4)在顺序表中查找值为e的数据元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。

2. 实验相关原理线性表的顺序存储结构称为顺序表,顺序表的存储结构描述为:#define MAXLEN 30 /*线性表的最大长度*/typedef struct{Elemtype elem[MAXLEN]; /*顺序表中存放元素的数组,其中elemtype为抽象数据类型,在程序具体实现时可以用任意类型代替*/int length; /*顺序表的长度,即元素个数*/}Sqlist; /*顺序表的类型*/【核心算法提示】(1)顺序表插入操作的基本步骤:要在顺序表中的第i个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法,假设线性表的表长为n,则i的合法值范围:1≤i ≤n+1,若是合法位置,就再判断顺序表是否满,如果满,则增加空间或结束操作,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将待插入的数据元素x插入到该位置上,最后将线性表的表长增加1。

《数据结构》实验指导(一)-无删减范文

《数据结构》实验指导(一)-无删减范文

《数据结构》实验指导(一)数据结构实验指导(一)1. 实验背景数据结构是计算机科学中的一个重要概念,它描述了如何组织和存储数据以及如何通过不同的操作来访问和修改这些数据。

在本实验中,我们将学习和实践数据结构中的线性表和链表。

2. 实验目的通过本次实验,我们将达到以下目的:- 理解线性表和链表的概念- 学会如何使用线性表和链表来解决常见的问题- 掌握线性表和链表的基本操作3. 实验内容3.1 线性表线性表是由 n 个数据元素 a1, a2, , an 组成的有序序列。

常见的线性表有数组和链表两种实现方式。

3.1.1 线性表的基本操作线性表的基本操作包括:- 初始化线性表- 判断线性表是否为空- 获取线性表的长度- 获取线性表中的元素- 在线性表的指定位置插入元素- 删除线性表中的指定元素- 清空线性表3.1.2 数组数组是一种连续的内存空间,可以存储相同类型的数据元素。

在数组中,每个元素的位置是通过下标来访问的,下标从 0 开始。

3.1.2.1 数组的插入操作数组的插入操作是将一个元素插入到数组的指定位置,同时需要将原位置的元素及其后续元素后移一位。

3.1.2.2 数组的删除操作数组的删除操作是将数组中指定位置的元素删除,同时需要将后续元素前移一位。

3.2 链表链表是一种离散的数据结构,它的元素包含两个部分:数据和指针。

每个节点都包含一个数据元素和一个指向下一个节点的指针。

3.2.1 链表的基本操作链表的基本操作包括:- 初始化链表- 判断链表是否为空- 获取链表的长度- 获取链表中的元素- 在链表的指定位置插入元素- 删除链表中的指定元素- 清空链表3.2.2 单链表单链表是最简单的链表形式,它的每个节点只包含一个指向下一个节点的指针。

3.2.2.1 单链表的插入操作单链表的插入操作是将一个元素插入到链表的指定位置,同时需要调整指针的指向。

3.2.2.2 单链表的删除操作单链表的删除操作是将链表中指定位置的节点删除,同时需要调整指针的指向。

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

7
如何进行数据结构的实验

四、设计数据结构的存储结构


在完成与题目相关的抽象数据类型的定义后, 应给出相关的数据结构的定义(即相关数据 结构的存储表示)。 以下为复数的数据结构的说明。
typedef struct Complex {
float real; float image;
}Complex;

主要内容


目的




2018/11/28
数据结构实验课件
1

对先修课的基本要求:

程序设计语言和离散数学是数据结构的两门主要的先 修课程。

对程序设计语言课程的教学要求是:
1.掌握程序设计语言的基本概念。 2.掌握结构化程序设计的基本原理,能熟练地运用三种基本控制 结构进行一般问题的程序设计,具备较好的程序调试能力,并 具有良好的程序设计习惯。 3.掌握复合数据类型的基本思想,能正确理解和应用指针类型。

对离散数学课程的教学要求是:
1.掌握离散数学的基本理论。 2.具有一定的逻辑思维和推理能力。 3.熟练掌握命题代数和图论的基本理论。
2018/11/28
数据结构实验课件
2
如何进行数据结构的实验



一、首先弄清楚问题(实验题目,需求分析) 二、完成问题的模型的建立(ADT) 三、选择实验环境 四、设计数据结构的存储结构 五、设计算法 六、完成代码的编写 七、上机完成程序的调试、数据测试 八、整理实验报告 九、完成实验的总结
2018/11/28
数据结构实验课件
4
如何进行数据结构的实验

二、完成问题的模型的建立(ADT)




在正确理解实验题目之后,不要着急编写代码, 代码写的越早,并不代表你写程序的能力越高, 更不能代表你的程序质量好。 首先给出问题的ADT数据类型的表示,即用ADT 完成问题的模型的建立。 以本例题为例:应首先给出复数的抽象数据类型 的建立。 以下是复数的抽象数据类型表示(参考)


} ADT complex;
2018/11/28 数据结构实验课件 6
如何进行数据结构的实验

三、选择实验环境


操作系统:Windows XP 语言平台
选用C:Turbo C 2.0或以上兼容版本 选用Visual C++: VC++6.0或以上兼容版本

2018/11/28
数据结构实验课件

运行VC6.0,如下图所示,在目录9500101 张扬下建立工程LAB01,
数据结构实验课件 10
2018/11/28
2018/11/28
数据结构实验课件
11
2018/11/28
数据结构实验课件
12
2018/11/28
数据结构实验课件
13
2018/11/28
数据结
15
2018/11/28
数据结构实验课件
16
2018/11/28
数据结构实验课件
17
2018/11/28
数据结构实验课件
18
数据结构实验课件 9
2018/11/28
如何进行数据结构的实验

六、完成代码的编写

首先在磁盘上建立目录9500101张扬

假定9500101为你的学号 假定张扬为你的姓名

在目录9500101张扬下建立WORD文件 LAB01.DOC

假定这是第一次实验,LAB01.DOC为本次的实验 报告
2018/11/28 数据结构实验课件 3
如何进行数据结构的实验

一、首先弄清楚问题(实验题目,需求 分析)

题目:设计一个可进行复数运算的演示程序。

要求:实现下列六种基本运算:
1. 2. 3. 4. 5. 6. 7. 由输入的实部和虚部生成一个复数; 两个复数求和; 两个复数求差; 两个复数求积; 从已知复数中分离出实部; 从已知复数中分离出虚部。 运算结果以相应的复数或实数的表示形式显示。
2018/11/28 数据结构实验课件 5
如何进行数据结构的实验

以下是复数的抽象数据类型表示(参考)
ADT complex{


数据对象:D={a,b|a,b∈FloatSet } 数据关系:R={ <a,b>|a,b ∈D } 基本操作:
InitComplex(&C,vr,vi); 操作结果:构造一个复数,元素a,b分别被赋以参数vr,vi的值 OutComplex(C); 操作结果: 输出一个复数 AddComplex(&C,C1,C2); 操作结果:求两个复数C1,C2之和,结果存入C
数据结构课程实验
数据结构是一门专业技术基础课程,是计算机程序设计的重要理论技术基础。

本课程的教学目的和任务

训练学生进行复杂程序设计的技能和培养学生良好的程序设计习惯。
讨论线性结构、树型结构和图等各种常用数据结构的实现方法 研究数据结构的步同的存储结构的实现 研究各种操作在不同的存储结构上的算法实现 另外讨论查找和排序的各种算法的设计思想。 通过本课程的学习,将为学生进一步学习计算机专业的相关专业课程,例如操 作系统、编译原理等,打下坚实的基础。 为了使学生学会分析、研究计算机处理的数据的结构特征,以便为实际问题所 涉及的数据设计合适的逻辑结构、存储结构及其相应的算法。 本课程的教学实验环节将训练学生进行较为的复杂程序设计,注意培养学生进 行存储结构设计和算法设计的能力。 要求学生在正确理解各类数据结构的基本概念和实现方法,编写出结构清楚、 正确易读、符合软件工程规范的程序。 为数据结构课程设计(实现一个复杂的系统)做好准备
2018/11/28 数据结构实验课件 8
如何进行数据结构的实验

五、设计算法


在确定相关数据结构的存储表示后,应给出每 一个操作对应的算法定义及算法实现。 以复数的基本操作InitComplex(&C,vr,vi)为例:

InitComplex(&C,vr,vi)的定义如下: Status InitComplex(Complex &C, float vr, float vi) InitComplex(&C,vr,vi)的实现如下: Status InitComplex(Complex &C, float vr, float vi) { C.real = vr; C.image =vi; return OK; }
相关文档
最新文档