16年7月 VIN新手指导U19(7月13日,添加了虚空遗物掉落表)

16年7月 VIN新手指导U19(7月13日,添加了虚空遗物掉落表)
16年7月 VIN新手指导U19(7月13日,添加了虚空遗物掉落表)

有理数抽象数据类型定义

ADT Rational { //起名要易懂 数据对象:D={e1,e2|e1,e2∈Z,e2≠0} //分母不为零 数据关系:R={|e1表示分子,e2表示分母} //说明不可丢 基本操作: InitRational (&Q,v1,v2) 初始条件:v2 ≠0 操作结果:构造有理数Q,其分子和分母分别为v1与v2。 DestroyRational(&Q) 初始条件:有理数Q存在 操作结果:有理数Q被撤销。 RationalPrint(Q) 初始条件:Q存在 操作结果:以分数形式输出有理数 RationalAdd (Q1,Q2,&sum)//Substract,Multiply等操作略 初始条件:有理数Q1与Q2存在 操作结果:用sum返回Q1与Q2的和 } ADT Rational //--采用动态分配的“顺序”存储结构-- typedef int ElemType; typedef ElemType * Rational;

Status InitRational(Rational &Q,ElemType v1, ElemType v2){ //构造有理数Q,分子分母分别为v1,v2,若v2=0则Q赋空,返回Error if(v2==0){Q=NULL;return ERROR;} /*return后括号可有可无*/ Q=(ElemType *)malloc(2*sizeof(ElemType)); //莫忘malloc.h if(!Q)exit(OVERFLOW);//分配存储空间失败, stdlib.h,注意!及适用场合用法Q[0]=v1;Q[1]=v2; /*之前的else可省略,若不省略最好加花括号*/ return(OK); } Status DestroyRational(Rational &Q) //销毁有理数Q { if(Q) { free(Q); Q=NULL; return OK; } } void OutputRational(Rational Q){ //以分数形式输出有理数Q if(!Q)printf(“the rational does not exist! \n‘); printf(“ %d/%d ”,Q[0],Q[1]); }

数据结构第2章作业 线性表(答案)

第2章线性表 班级学号__________-姓名 一、判断正误 (×)1. 链表的每个结点中都恰好包含一个指针。 链表中的结点可含多个指针域,分别存放多个指针。例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。 (×)2. 链表的物理存储结构具有同链表一样的顺序。 链表的存储结构特点是无序,而链表的示意图有序。 (×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。 链表的结点不会移动,只是指针内容改变。 (×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。 (×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 正好说反了。顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜” (×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。 前一半正确,但后一半说法错误,那是链式存储的优点。顺序存储方式插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。 (×)7. 线性表在物理存储空间中也一定是连续的。 线性表有两种存储方式,顺序存储和链式存储。后者不要求连续存放。 (×)8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。 线性表有两种存储方式,在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上也相邻。 (×)9. 顺序存储方式只能用于存储线性结构。 顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如 完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。(后一节介绍) (×)10. 线性表的逻辑顺序与存储顺序总是一致的。 理由同7。链式存储就无需一致。 二、单项选择题 (C )1.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:(A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构( B )2. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(A)110 (B)108 (C)100 (D)120 ( A )3. 在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是: (A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) (B)在第i个结点后插入一个新结点(1≤i≤n) (C)删除第i个结点(1≤i≤n) (D)将n个结点从小到大排序 ( B )4. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素(A)8 (B)63.5 (C)63 (D)7 ( A )5. 链式存储的存储结构所占存储空间:

严蔚敏版数据结构课后习题答案-完整版

第1章绪论 1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据

类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1.3 设有数据结构(D,R),其中 {}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。 解: 1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。 解: ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={} 基本操作: InitComplex(&C,re,im) 操作结果:构造一个复数C ,其实部和虚部分别为re 和im DestroyCmoplex(&C)

数据结构实验一线性表

数据结构与算法 实验报告 实验一:线性表操作实验 —用循环链表实现约瑟夫环问题 姓名:沈靖雯 学号:2014326601094 班级:14信科二班 二〇一六年十月

实验一 线性表操作实验 【实验内容】 实现线性表的初始化和插入删除操作 提高部分实验:用循环链表实现约瑟夫环问题 【实验目的】 掌握线性表的顺序映象和链式映象方式,能熟练掌握链表结构的使用。 【问题描述】 一个旅行社要从n 个旅客中选出一名旅客,为他提供免费的环球旅行服务。旅行社安排这些旅客围成一个圆圈,从帽子中取出一张纸条,用上面写的正整数m(

抽象数据类型线性表的定义

抽象数据类型线性表的定义如下: ADT List { 数据对象:D={ a i | a i∈ElemSet, i =1, 2, ……, n, n≥0} 数据关系:R1 = { < a i-1 , a i > | a i-1 , a i ∈D, i =2, ……, n } 基本操作: InitList (&L ) 操作结果:构造一个空的线性表L 。 DestoryList (&L) 初始条件:线性表L已存在。 操作结果:销毁线性表L。 ClearList (&L) 初始条件:线性表L已存在。 操作结果:将L重置为空表。 ListEmpty (L) 初始条件:线性表L已存在。 操作结果:若L 为空表,则返回TRUE,否则返回FALSE。 ListLength (L) 初始条件:线性表L已存在。 操作结果:返回L中数据元素个数。 GetElem ( L, i, &e ) 初始条件:线性表L已存在,1≤i≤ListLength(L)+1。

操作结果:用e返回L中第i个数据元素的值。 LocateElem ( L,e, compare() ) 初始条件:线性表L已存在,compare()是判定函数。 操作结果:返回L中第1个与e满足关系compare() 的数据元素的位序。若这样的数据元素不存在,则返 回值0。 PriorElem ( L, cur_e, &pre_e ) 初始条件:线性表L已存在。 操作结果:若cur_e是L的数据元素且不是第1个, 则用pre_e返回它的前驱,否则操作失败。 NextElem ( L, cur_e, &next_e ) 初始条件:线性表L已存在。 操作结果:若cur_e是L的数据元素且不是最后一个, 则用next_e返回它的后继,否则操作失败。 ListInsert ( &L, i, e ) 初始条件:线性表L已存在,1≤i≤ListLength(L)+1。 操作结果:在L中第i个位置之前插入新的数据元素e, L的长度加1。 ListDelete( &L, i, &e ) 初始条件:线性表L已存在且非空,1≤i≤ListLength(L)。 操作结果:删除L的第i个数据元素,并用e返回其值,

抽象数据类型的表示与实现(实验一)

实验一抽象数据类型的表示与实现 一.实验目的及要求 (1)熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现; (2)理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组); (3)认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。 二.实验内容 (1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。 要求:将计算过程写成一个函数,并采用引用参数实现值的求解。 (2)编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。 三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。 要求:将计算过程写成一个函数,并采用引用参数实现值的求解。 程序代码部分: 头文件: #define N 10000 void comparason(double a[],int n,double &max,double &min); 主函数: #include"" #include"" int main()

{ int n; printf("请输入数据个数\n"); scanf("%d",&n); double a[N],max,min; int i; printf("请输入数据(空格隔开)\n"); for(i=0;i

线性表的抽象数据类型的实现实验报告

数据结构实验报告 实验名称:线性表的抽象数据类型的实现 学号:2011129127 姓名:刘瑞奇 指导老师:解德祥 计算机与信息学院

实验1线性表的抽象数据类型的实现 实验目的 1.掌握线性表的顺序存储结构和链式存储结构; 2.熟练掌握顺序表和链表基本算法的实现; 3.掌握利用线性表数据结构解决实际问题的方法和基本技巧; 4.按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程 序清单及及相关实验数据与运行结果); 5.按时提交实验报告。 实验环境 计算机、C语言程序设计环境 实验学时 2学时,选做实验。 实验内容 一、顺序表的基本操作实现实验 要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出): ①创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在 20之内; ②打印(遍历)该线性表(依次打印出表中元素值); ③在线性表中查找第i个元素,并返回其值; ④在线性表中第i个元素之前插入一已知元素; ⑤在线性表中删除第i个元素; ⑥求线性表中所有元素值(整数)之和; 实验步骤 C源程序代码 /*file:seqlist.cpp*/ #include #include #include #define size 20 #define elemtype int struct seqlist { elemtype elem[size]; int last; }; void menu() { printf("\n.........................................."); printf("\n0.退出操作................................"); printf("\n1.建立数据类型为整形的顺序表(长度小于20)."); printf("\n2.打印线性表.............................."); printf("\n3.在线性表中查找第i个元素,并返回其值.....");

抽象数据类型

专题1 数据结构分类与抽象数据类型 1.1 数据结构分类 数据结构讨论现实世界和计算机世界中的数据及其相互之间的联系,这体现在逻辑和存储两个层面上,相应称之为逻辑结构和存储结构。也就是说,在现实世界中讨论的数据结构是指逻辑结构,在计算机世界中讨论的数据结构是指存储结构,又称为物理结构。 数据的逻辑结构总体上分为4种类型:集合结构、线性结构、树结构和图结构。数据的存储结构总体上也分为4种类型:顺序结构、链接结构、索引结构和散列结构。原则上,一种逻辑结构可以采用任一种存储结构来存储(表示)。 对于现实世界中的同一种数据,根据研究问题的角度不同,将会选用不同的逻辑结构;对于一种逻辑结构,根据处理问题的要求不同,将会选用不同的存储结构。 对于复杂的数据结构,不论从逻辑层面上还是从存储层面上看,都可能包含有多个嵌套层次。如假定一种数据结构包含有两个层次,第一层(顶层)的逻辑结构可能是树结构,存储结构可能是链接结构;第二层(底层)的逻辑结构可能是线性结构,存储结构可能是顺序结构。第一层结构就是数据的总体结构,第二层结构就是第一层中数据元素的结构。 数据的逻辑结构通常采用二元组来描述,其中一元为数据元素的集合,另一元为元素之间逻辑关系的集合,每一个逻辑关系是元素序偶的集合,如就是一个序偶,其中x 为前驱,y为后继。当数据的逻辑结构存在着多个逻辑关系时,通常对每个关系分别进行讨论。 逻辑结构的另一种描述方法是图形表示,图中每个结点表示元素,每条带箭头的连线表示元素之间的前驱与后继的关系,其箭头一端为后继元素,另一端为前驱元素。 数据的存储结构通常采用一种计算机语言中的数据类型来描述,通过建立数据存储结构的算法来具体实现。 数据的逻辑结构或存储结构也时常被简称为数据结构,读者可根据上下文来理解。 下面通过例子来说明数据的逻辑结构。 假定某校教务处的职员简表如表1.1所示。该表中共有10条记录,每条记录都由6个数据项组成。此表整体上被看为一个数据,每个记录是这个数据中的数据元素。由于每条记录的职工号各不相同,所以可把职工号作为记录的关键字,在下面构成的各种数据结构中,将用记录的关键字代表整个记录。

数据结构 有理数抽象数据类型

#include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define TURE 1 #define FLASE 0 typedef int Status; typedef int ElemType; typedef ElemType *Rational; Status InitRational(Rational &Q,ElemType v1, ElemType v2) { Q=(ElemType*)malloc(2*sizeof(ElemType)); if(!Q || v2==0) return ERROR; else Q[0]=v1; Q[1]=v2; if(Q==NULL) exit(OVERFLOW); else return OK; } Status Rationaladd(Rational &Q,Rational Q1,Rational Q2) { if(Q1==NULL || Q2==NULL) exit(OVERFLOW); else Q=(ElemType*)malloc(2*sizeof(ElemType)); Q[0]=(Q1[0]*Q2[1]+Q1[1]*Q2[0]); Q[1]=Q1[1]*Q2[1]; return OK; } Status Rationalsubtraction(Rational &Q,Rational Q1,Rational Q2) { if(Q1==NULL || Q2==NULL) exit(OVERFLOW); else Q=(ElemType*)malloc(2*sizeof(ElemType)); Q[0]=(Q1[0]*Q2[1]-Q1[1]*Q2[0]); Q[1]=Q1[1]*Q2[1]; return OK; }

抽象数据类型的实现

第3章抽象数据类型的实现 3.1 实验概要 实验项目名称: 抽象数据类型的实现 实验项目性质: 设计性实验 所属课程名称: 数据结构 实验计划学时: 6 3.2 实验目的 对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。进而达到熟练地运用本课程中的基础知识及技术的目的。 3.3 预习与参考 1.确定要实现的抽象数据类型,并对基本操作做适当的选取和增加; 2.选择存储结构,并写出相应的类型定义; 3.设计各基本操作的实现算法,并表达为函数形式; 4.设计测试方案,编写主函数; 5.将上述4步的结果写成预习报告。 3.4 实验要求和设计指标 以教材中线性表,串,稀疏矩阵,广义表,二叉树,树,图以及查找表等抽象数据类型为对象,利用C语言的数据类型表示和实现其中某个抽象数据类型。 可选的抽象数据类型如下表所列: 注:如果基本操作数量较多,可选择实现其中一个基本操作子集。

实验要求如下: 1.参加实验的学生应首先了解设计的任务,然后根据自己的基础和能力从中选择一题。一般来说,选择题目应以在规定的时间内能完成,并能得到应有的锻炼为原则。若学生对教材以外的相关题目较感兴趣,希望选作实验的题目时,应征得指导教师的认可,并写出明确的抽象数据类型定义及说明。 2. 实验前要作好充分准备,包括:理解实验要求,掌握辅助工具的使用,了解该抽象数据类型的定义及意义,以及其基本操作的算法并设计合理的存储结构。 3. 实验时严肃认真,要严格按照要求独立进行设计,不能随意更改。注意观察并记录各种错误现象,纠正错误,使程序满足预定的要求,实验记录应作为实验报告的一部分。 4. 实验后要及时总结,写出实验报告,并附所打印的问题解答、程序清单,所输入的数据及相应的运行结果。 3.5 实验仪器设备和材料 软件实验室。 编程环境:Anyview C可视化编程环境、TC++、C++Builder或者VC++。 3.6 调试及结果测试 调试内容应包括:调试过程中遇到的问题是如何解决的以及对实验的讨论与分析;基本操作的时间复杂度和空间复杂度的分析和改进设想。列出对每一个基本操作的测试结果,包括输入和输出,测试数据应完整和严格。 3.7 考核形式 考核形式以实验过程和实验报告相结合的方式进行。在实验完成后,应当场运行和答辩,由指导教师验收,只有在验收合格后才能算实验部分的结束。实验报告作为整个设计性实验评分的书面依据。设计性实验的成绩评定以选定题目的难易度、完成情况和实验报告为依据综合评分。从总体来说,所实现的抽象数据类型应该全部符合要求,类型定义,各基本操作的算法以及存储结构清晰;各模快测试运行正确;程序的结构合理;设计报告符合规范。 3.8 实验报告要求 实验结束后要写出实验报告,以作为整个设计性实验评分的书面依据和存档材料。实验报告是反映学生实验效果的最主要的依据,也是学生正确地表达问题、综合问题和发现问题的能力的基本培养手段,因而是非常重要的内容。本设计性实验的报告要包括以下几项内容:(1)设计任务、要求及所用软件环境或工具; (2)抽象数据类型定义以及各基本操作的简要描述; (3)所选择的存储结构描述及在此存储结构上各基本操作的实现; (4)程序清单(计算机打印),输入的数据及各基本操作的测试结果; (5)实验总结和体会。 实验报告以规定格式的电子文档书写、打印并装订,排版及图表要清楚、工整。 3.9 思考题 对设计性实验进行总结和讨论,包括本实验的优、缺点,数据存储结构的特点,与其它存储结构之间的比较等。通过总结,可以对抽象数据类型有更全面、深入的认识,这是设计性实验不可缺少的重要内容。这部分内容应作为实验报告中的一个组成部分。 3.10 示例

抽象数据类型-树

数据结构实验报告 题目:树的抽像数据类型实现 一、实验目的 对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。进而达到熟练地运用本课程中的基础知识及技术的目的。 二、实验编程环境 编程环境:Visual C++。 三、实验要求 利用c语言实现树的抽象数据类型的基本操作。 四、基本操作描述 树的结构定义和树的一组基本操作: ADT Tree{ 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R: 若D为空集,则称为空树; 若D仅含有一个数据元素,则R为空集,否则R={H},H是如下二元关系: (1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2) 若D-{root}≠NULL,则存在D-{root}的一个划分D1,D2,D3,…,Dm(m>0), 对于任意j≠k(1≤j,k≤m)有D j∩Dk=NULL,且对任意的i(1≤i≤m),唯一存在 数据元素xi∈Di有∈H;

(3) 对应于D-{root}的划分,H-{,…,}有唯一的一个划 分H1,H2,…,Hm(m>0),对任意j≠k(1≤j,k≤m)有Hj∩Hk=NULL,且对任意i(1 ≤i≤m),Hi是Di上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根 root的子树。 基本操作P: InitTree(&T); 操作结果:构造空树T。 DestroyTree(&T); 初始条件:树T存在。 操作结果:销毁树T。 CreateTree(&T,definition); 初始条件:definition给出树T的定义。 操作结果:按definition构造树T。 ClearTree(&T); 初始条件:树T存在。 操作结果:将树T清为空树。 TreeEmpty(T); 初始条件:树T存在。 操作结果:若T为空树,则返回TRUE,否则返回FALSE。 TreeDepth(T); 初始条件:树T存在。 操作结果:返回T的深度。 Root(T); 初始条件:树T存在。 操作结果:返回T的根。 Value(T,cur_e); 初始条件:树T存在,cur_e是T中某个结点。 操作结果:返回cur_e的值。 Assign(T,cur_e,value); 初始条件:树T存在,cur_e是T中某个结点。 操作结果:结点cur_e赋值为value。 Parent(T,cur_e); 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非根结点,则返回它的双亲,否则函数值为“空”。 LeftChild(T,cur_e); 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返回“空”。 RightSibling(T,cur_e); 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则返回“空”。 InsertChild(&T,&p,I,c); 初始条件:树T存在,p指向T中某个结点,1≤i≤p指结点的度+1,非空树c与T不相交。 操作结果:插入c为T中p指结点的第i棵子树。

数据结构线性表实验报告

《数据结构》实验报告 院系应用科技学院专业电子信息工程 姓名陈高雪学号120352010054 10 级电信班2011 年10 月11日 1.实验目的 1.掌握线性表的基本运算。 2.掌握顺序村存储的概念,学会对顺序存储数据结构进行操作。 3.加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力。 2.需求分析 要求用c语言编写一个演示程序,首先建立一个空表,然后根据用户选择,能够在线性表的任意位置实现插入元素、删除元素、初始化线性表、查找某一元素的在线性表中得位置。 (1)建立线性表的功能 ●输入的形式和输入的范围:调用出入函数,输入插入的位置和数值,用逗号隔 开 ●输出的形式:调用输出函数,按顺序输出线性表所插入的值,以及所对应功能 的值。 (2)插入功能 ●输入的形式和输入值的范围:输入一个表示位置的正整数和一个表示插入元素 值的正整数,两个正整数之间用逗号隔开,出入位置的和法取值范围是 1

二叉树抽象数据类型

数据结构实验报告 题目:二叉树抽象数据类型 学院计算机学院 专业计算机科学与技术 年级班别 学号 学生姓名 指导教师 成绩____________________ XXXXX

一.实验概要 实验项目名称: 二叉树抽象数据类型的实现 实验项目性质: 设计性实验 所属课程名称: 数据结构 实验计划学时: 6 二.实验目的 1.了解二叉树的定义以及各项基本操作。 2.实现二叉树存储、遍历及其他基本功能 三. 实验仪器设备和材料 硬件:PC机 软件:Visual C++ 6.0 四.实验的内容 1.二叉树类型定义以及各基本操作的简要描述; ADT BinaryTree { 数据对象D:D是具有相同特性的数据元素的集合. 数据关系R: 若D=?,则R=,称BinaryTree为空二叉树; 若D≠,则R={H},H是如下二元关系: (1)在D中存在惟一的称为根的数据元素root,它在关系H下无前 驱; (2)若D-{r oot}≠?,则存在D-{root}={D1,Dr},且D1∩Dr=?; (3)若D1≠?,则D1中存在惟一的元素x1,∈H,且存 在Dr上的关系Hr∈H;H={,H1,Hr}; (4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树, 是一棵符合本定义的二叉树,称为根的右子树。 基本操作P:

InitBiTree(&T); 操作结果:构造空二叉树T。 DestroyBiTree(&T); 初始条件:二叉树T存在。 操作结果:销毁二叉树T。 CreateBiTree(&T,definition); 初始条件:definition给出二叉树T的定义。 操作结果:按definition构造二叉树T。 ClearBiTree(&T); 初始条件:二叉树T存在。 操作结果:将二叉树T清为空树。 BiTreeEmpty(T); 初始条件:二叉树T存在。 操作结果:若T为空二叉树,则返回TURE,否则FALSE。BiTreeDepth(T); 初始条件:二叉树T存在。 操作结果:返回T的深度。 Root(T); 初始条件:二叉树T存在。 操作结果:返回T的根。 Value(T,e); 初始条件:二叉树T存在,e是T中的某个结点。 操作结果:返回e的值。 Assign(T,&e,value); 初始条件:二叉树T存在,e是T中的某个结点。 操作结果:结点e赋值为value。 Parent(T,e);

数据结构线性表答案

第一章线性表 2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。 解:头指针是指向链表中第一个结点的指针。首元结点是指链表中存储第一个数据元素的结点。头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。它可以对空表、非空表以及首元结点的操作进行统一处理。 2.2 填空题。 解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。 (2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。单链表中逻辑上相邻的元素的物理位置不一定紧邻。 (3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。 (4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。 2.3 在什么情况下用顺序表比链表好? 解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。 2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。

解: 2.5 画出执行下列各行语句后各指针及链表的示意图。 L=(LinkList)malloc(sizeof(LNode)); P=L; for(i=1;i<=4;i++){ P->next=(LinkList)malloc(sizeof(LNode)); P=P->next; P->data=i*2-1; } P->next=NULL; for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2); for(i=1;i<=3;i++) Del_LinkList(L,i); 解:

实验1线性表的抽象数据类型的实现

实验1线性表的抽象数据类型的实现 实验目的 1)掌握线性表的顺序存储结构和链式存储结构; 2)熟练掌握顺序表和链表基本算法的实现; 3)掌握利用线性表数据结构解决实际问题的方法和基本技巧; 4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果); 5)按时提交实验报告。 实验环境 计算机、C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 一、顺序表的基本操作实现实验 要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出): 1)创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在25之内; 2)打印(遍历)该线性表(依次打印出表中元素值); 3)在线性表中查找第i个元素,并返回其值; 4)在线性表中第i个元素之前插入一已知元素; 5)在线性表中删除第i个元素; 6)求线性表中所有元素值(整数)之和; 二、链表(带头结点)基本操作实验 要求:数据元素类型ElemType取字符型char。按照动态单循环链表结构实现如下算法(各算法边界条件适当给出): 1)创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内; 2)打印(遍历)该链表(依次打印出表中元素值); 3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE; 4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE; 5)在链表中按照有序方式插入一已知字符元素; 6)在线性表中删除第i个结点; 7)计算链表的长度。 实验步骤 一、顺序表的源程序 #include #include #include int list[25];int i,n,a,sum=0,k,l; int eleminsert;

抽象数据类型

数据结构实验报告 1.实验题目 抽象数据类型 2.需求分析 本演示程序用TC编写,完成复数的加、减、乘、除四则运算,并获取和设置复数实、虚部,初始化等操作。 ① 输入的形式和输入值的范围:输入的实部和虚部需为两个单精度的实数。Complex 该结构类型中包括两个基本元素,分别是浮点类型的real和浮点类型的imag。 ②输出的形式:他们的结果是复数类型,返回值为单精度实数。根据复数抽象类型定义中所指的基本操作,定义并实现复数初始化,实部、虚部的获取和设置函数,并根据复数抽象类型定义中所指的基本运算,定义并实现复数的加、减、乘、除四则运算,并输出他们的结果。 ③程序所能达到的功能:完成复数的加、减、乘、除四则运算,并获取和设置复数实、虚部,初始化等操作。 ④测试数据: A.第一个复数的实部为:6.000000 ,虚部为33.000000. B.第二个复数的实部为:3.600000,虚部为7.400000. C.两个复数之和:9.600000 40.400002. D.两个复数之差:2.400000 25.600000. E.两个复数乘积:-222.600006 163.199997. F. 两个复数的商:3.924985 1.098641. 3.概要设计 1)为了实现上述程序功能,首先需要定义抽象数据类型的复数例: ADT Complex { 数据对象:D={real,imag|e1,e2为实数} 数据关系:R={} 基本操作: P:float SetReal(Complex x,float real) 赋值参数:所要操作的复数x和将为复数x赋的实部real. 操作结果:复数x的实部设置为real. float SetImag(Complex x,float imag) 赋值参数:所要操作的复数x和将为复数赋的实部imag. 操作结果:复数x 的虚部设置为imag. Complex add(Complex x,Complex y) 赋值参数:所要相加的两个复数x,y. 操作结果:返回两个复数x与y的和. Complex sub(Complex x,Complex y) 赋值参数:相减操作的被减数x,减数y. 操作结果:返回复数x-y的结果 Complex multi(Complex x,Complex y) 赋值参数:相乘操作的被乘数x,乘数y. 操作结果:返回两个复数x与y的乘积. Complex except(Complex x,Complex y)

北邮数据结构实验报告实验一线性表

数据结构实验报告 实验名称:实验一线性表——题目1 学生姓名:申宇飞 班级:信通3班 班内序号: 03 学号: 64 日期: 2013年11月4日 1.实验要求 实验目的: 熟练掌握线性表的基本操作,包括:创建、插入、删除、查找、输出、求长度、合并等运算,以及各类操作在顺序存储结构和链式存储结构上的实现。 实验内容: 根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。 线性表存储结构(五选一): 1、带头结点的单链表 2、不带头结点的单链表 3、循环链表 4、双链表 5、静态链表 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2.程序分析 存储结构 链表的具体存储表示为:

① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的) ② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址信息(称为指针) 链表的结点结构 ┌──┬──┐ │data│next│ └──┴──┘ data 域--存放结点值的数据域 next 域--存放结点的直接后继的地址(位置)的指针域(链域) 地址 内存单元 1000H 头指针 1020H 1080H 10C0H 关键算法分析 1、关键算法: 1:头插法 自然语言描述: a:在堆中建立新结点 b:将a[i]写入到新结点的数据域 c:修改新结点的指针域 d:修改头结点的指针域。将新结点加入链表中 伪代码描述 a:Node * s=new Node b:s->data=a[i] c:s->next=front->next; d:front->next=s 2:尾插法 自然语言描述: a:在堆中建立新结点: b:将a[i]写入到新结点的数据域:

抽象数据类型三元组的定义

抽象数据类型三元组的定义 ADT Triplet{ 数据对象:D= {e1,e2,e3 | e1,e2,e3属于Elemset(定义了关系的某个集合)} 数据关系:R1={|} 基本操作: —InitTriplet(&T,v1,v2,v3) —初始条件: —操作结果:用e值取代三元组T的第i个元素 —DestroyTriplet(&T) —初始条件:三元组T已经存在。 —操作结果:销毁三元组T。 —Get(T,i,&e) —初始条件:三元组T已经存在,1<=i<=3, —操作结果:用e返回三元组T的第i个元素。 —Put(&T,i,e) —初始条件:三元组T已经存在,1<=i<=3, —操作结果:用e值取代三元组T的第i个元素。 —IsAscending(T) —初始条件:三元组T已经存在。 —操作结果:如果三元组T的三个元素按升序排列,则返回TRUE;否则返回FALSE —IsDescending(T) —初始条件:三元组T已经存在。 —操作结果:如果三元组T的三个元素按降序排列,则返回TRUE;否则返回FALSE —Max(T,&e) —初始条件:三元组T已经存在。 —操作结果:用e返回三元组T的最大值。 —Min(T,&e) —初始条件:三元组T已经存在。 —操作结果:用e返回三元组T的最小值。 }ADT Triplet 抽象数据类型的表示与实现 类C语言(做了扩充和修改)的表示 如:预定义常量和类型 #define TRUE 1 #define FALSE 0

#define OK 1 #define ERROR 0 #define INFEASIVLE -1 #define OVERFLOW -2 Typedef int Status Status Get(Triple T,int i,Elemtype *e) // 初始条件:三元组T已经存在,1<=i<=3. // 操作结果:用e返回三元组T的第i个元素 { If(i<1 || i>3) return ERROR; *e = T[i-1]; Return OK; } 算法和算法分析 算法(Algorithm):对特定问题求解步骤的一种描述。 算法的五个重要特性: 1有穷性2确定性3可行性4输入4输出 算法举例————气泡排序算法 初始条件:N个待排序的数a[0]—a[n-1] 结果:排序后a[0]—a[n-1]从小到大排列 1 置标记change=TRUE; 2 i从n-1知道i=2做(3)-- (6)步 3 change = FALSE; 4 j从0知道j=i-1做(5) 5 若a[j]>a[j+1]则交换他们并置change = TRUE 6 若change = FALSE 则结束 7 算法结束 1i从n-1知道i=2 做2—3 步 2j从0知道j=i-1做3 3若a[j]>a[j+1]则交换他们 4算法结束 Void bb_sort(int a[],int n){ for(i=n-1;i > 1; --i){ for(j=0;ja[j+1]){a[j]←→a[j+1];} } // bb_sort 算法设计的要求

相关文档
最新文档