ImageVerifierCode 换一换
格式:DOCX , 页数:69 ,大小:695.71KB ,
资源ID:29943188      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29943188.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构期末复习总结汇编.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构期末复习总结汇编.docx

1、数据结构期末复习总结汇编第1章 绪论1.数据(Data) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。2.数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点顶点、记录);数据元素是数据的基本单位。3.数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。一个数据元素可由若干个数据项组成。4.数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。如字符集合C =A,B,C, 。数据(Da

2、ta) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。 数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点、顶点、记录);数据元素是数据的基本单位。 数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。一个数据元素可由若干个数据项组成。 数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。如字符集合C =A,B,C, 。 数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合和

3、定义在此集合上的若干关系来表示。 四种逻辑结构:集合、线性结构、树型结构、图状结构。 数据结构的形式定义是一个二元组: Data-Structure=(D,S) 其中:D是数据元素的有限集,S是D上关系的有限集。例1:设数据逻辑结构 B=(K,R) K=k1, k2, , k9 R= ,有时候关系图不唯一(一般是无向图) 数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示。 两种不同的存储结构:顺序存储结构和链式存储结构。 顺序结构:数据元素存放的地址是连续的; 链式结构:数据元素存放的地址是否连续没有要求,用该指针来表示数据元素之间的逻辑结构(关系)。 顺序存储使用一组连续

4、的内存单元依次存放数据元素,元素在内存中的物理存储次序体现它们的逻辑次序。通常使用程序设计语言中的数组来实现。 链式存储使用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻。数据元素间的逻辑关系通过结点间的链接关系来体现。通常使用指针记载直接前驱元素或直接后继元素的存储地址。数据操作指对一种数据结构中的数据元素进行各种运算或处理。每种数据结构都有一组数据操作。 初始化。 判断是否空状态。 统计元素的个数。 遍历:按某种次序访问所有元素,每个元素只被访问一次。 取值:获取指定元素值。 置值:设置指定元素值。 插入:增加指定元素。 删除:移去指定元素。 查找:在数据结

5、构中寻找满足给定条件的数据元素。 排序:将数据元素 . 数据操作定义在数据的逻辑结构上;数据操作的实现依赖于数据的存储结构。 数据结构三方面的关系:数据的逻辑结构、数据的存储结构及操作这三方面是一个整体例6:线性表是一种逻辑结构,若采用顺序存储,可称其为顺序表;若采用链式存储,则可称其为链表;若采用散列存储,则可称为散列表。 在给定了数据的逻辑结构和存储结构之后,按定义的操作集合及其操作的性质不同,也可能导致完全不同的数据结构。 类型(type)是具有相同逻辑意义的一组值的集合。 数据类型是指一个类型和定义在这个类型上的操作集合。 数据类型定义了数据的性质、取值范围以及对数据所能进行的各种操作

6、例7: Java中整型类型int的值集是 -231,-2,-1,0,1,2,231-1 这个值集上的操作集合+,-,*,/,%,=,=,!=,= 抽象数据类型(Abstract Data Type ,简称ADT):是指一个数学模型以及定义在该模型上的一组操作。 ADT的定义仅是一组逻辑特性描述,与其在计算机内的表示和实现无关。因此,不论ADT的内部结构如何变化,只要其数学特性不变,都不影响其外部使用。 ADT的形式化定义是三元组:ADT=(D,S,P) 其中:D是数据对象,S是D上的关系集,P是对D的基本操作集。ADT的一般定义形式是: ADT 数据对象: 数据关系: 基本操作: ADT 例8

7、: 复数抽象数据类型描述如下:ADT Complex double real,imag; Complex(double real, double imag); Complex add(Complex c); Complex sub(Complex c); 1、算法定义:一个算法(algorithm)是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列(D.Knuth)。算法的规则必须满足以下5个特性: 有穷性: 一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。 确定性:算法中每一条指令必须有确切的含义。不存在二义性。且算法只有一个入口和一个出口。 可行性: 一个

8、算法是能行的。即算法描述的操作都可以通过已经实现的基本运算执行有限次来实现。 输入: 一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。 输出: 一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。 2、算法设计目标 正确性 健壮性 高时间效率 高空间效率 可读性3、算法描述 自然语言描述 伪码描述 传统流程图描述 程序设计语言描述(本课程选Java)4、算法与数据结构 算法建立在数据结构之上,对数据的操作需用算法来描述。 算法设计依赖数据的逻辑结构,算法实现依赖数据的存储结构。 实现一种抽象数据类型,需要选择合适的存储结构。求解同一问题可能有许多不同的算法,如何去评价这

9、些算法的优劣?主要考虑如下三点:A. 执行算法所耗费的时间;B. 执行算法所耗费的存储空间,其中主要考虑辅助存储空间;C. 算法应易于理解,易于编码,易于调试等等。1、时间代价分析算法的时间效率指算法的执行时间随问题规模的增长而增长的趋势,通常采用时间复杂度来度量算法的时间效率,用大O表示法来记: T(n)=O(f(n)例1 void fun() +x; s=0 ; 将x自增看成是基本操作,则语句频度为,即时间复杂度为(1) 。 如果将s=0也看成是基本操作,则语句频度为,其时间复杂度仍为(1),即常量阶。一个简单语句的时间复杂度为(1)。例2 for(i=1; i=n; +i) +x; s+

10、=x ; 语句频度为:2n,其时间复杂度为:(n) ,即为线性阶。一个循环的时间复杂度为(n)。例3 for(i=1; i=n; +i) for(j=1; j=n; +j) + x; s += x; 语句频度为:2n2 ,其时间复杂度为:O(n2) ,即为平方阶。 定理:若A(n)=a m n m + a m-1 n m-1 +a1n+a0是一个m次多项式,则A(n)=O(n m) 例4 两个n阶方阵的乘法 for(i=1,i=n; +i) for(j=1; j=n; +j) cij=0 ; for(k=1; k=n; +k) cij+=aik*bkj ; 由于是一个三重循环,每个循环从1到n

11、,则总次数为: nnn=n3时间复杂度为T(n)=(n3) 例5 for(i=2;i=n;+i) for(j=2;j=i-1;+j) +x; ai,j=x; 语句频度为: 1+2+3+n-2 =(1+n-2) (n-2)/2 =(n-1)(n-2)/2 =n2-3n+2 时间复杂度为O(n2),即此算法的时间复杂度为平方阶。 例6: int n=8, count=0; for (int i=1; i=n; i*=2) for (int j=1; j=n; j+) count+; 循环次数为 。时间复杂度为O(nlog2n)。 例7:int n=8, count=0; for (int i=1;

12、 i=n; i*=2) for (int j=1; j=i; j+) count+; 总的循环次数为 。时间复杂度为O(n)。 以下六种计算算法时间的多项式是最常用的。其关系为: O(1)O(n)O(n)O(nn)O(n2)O(n3)指数时间的关系为: O(2n)O(n!)0时,将非空的线性表记作: (a0,a1,an-1) 线性表的顺序表示指的是一组地址连续的存储单元依次存储线性表的数据元素。 用顺序存储实现的线性表称之为顺序表。 线性表的逻辑顺序与物理顺序一致。 顺序表是一种随机存取结构。通常采用数组存储数据元素。 设线性表的每个元素需占用c个存储单元。 public boolean is

13、Empty() /时间复杂度O(1) return this.len = 0; public int length() /时间复杂度O(1) return this.len; public T get(int i) /时间复杂度O(1) if(i=0 & i =0 & i0) str += this.element0.toString(); for(int i = 1; i this.len; i +) str +=“,”+ this.elementi.toString(); return str + “)”; 两个线性表相等是指,它们长度相同并且各对应元素相等。 链式存储 :用一组任意的存储

14、单元存储线性表中的数据元素。存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。 链表中结点的逻辑顺序和物理顺序不一定相同。 链表中的结点结构:数据域和地址域n个结点构成的链表表示为 (a0, a1, ., an-1) 链表中每个结点只含一个地址域,又称为线性链表或单链表。 每个结点有两个地址域的线性链表称为双链表。 单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名。头结点的作用是,使所有链表(包括空表)的头指针非空,则对单链表的插入、删除操作不需要区分操作位置。头结点中不存储数据。头插入和头删除操作不会改变head指针总结-顺序表

15、和链表的比较(1)直接访问元素的性能 顺序表能够直接访问数据元素,即只要给出顺序表底层数组element的下标就可以访问数组中的任何一个数据元素。(随机存取) 而链表中不能随机地直接访问大多数元素,只能从链表的第一个结点开始,沿着链的方向,依次查找后续结点,直至到达所需访问的结点。(顺序存取)(2)存储空间的利用 由于需要估计顺序表底层数组element的大小(顺序表的容量),因此顺序表存在存储空间的浪费问题。 顺序表在进行插入操作时,要判断顺序表是否为满。如果满,则需要扩充容量。 而链表每插入一个结点,就向系统申请一个存储单元,只要系统资源足够,系统就会为该结点分配存储空间。(3)存储密度

16、存储密度(Storage Density)是指结点数据本身所占的存储量和整个结点结构所占的存储量之比,即: (结点数据本身所占的存储量) (整个结点所占的存储总量) 顺序表的全部空间都用来存放数据元素,因此存储密度=1; 而链表中每个结点都要包含其后继结点或者前驱结点的链,因此存储密度 =0)个相同类型的数据元素a0,a1,。an-1组成的有限序列,记为:a0,a1,an-1。 其中,n为数据元素的个数,称为栈的长度。n=0时,为空栈。 栈的溢出: 当栈满时进栈运算称为“上溢”。 当栈空时退栈运算称为“下溢”。 栈上溢是一种出错状态,应该设法避免之;而下溢则可能是正常现象,通常下溢用来作为程序

17、控制转移的条件。 由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。 栈的顺序存储结构简称为顺序栈(Sequential Stack),它是运算受限的线性表。因此,可用数组来实现顺序栈。 因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,一般需用一个整型变量top。 栈的顺序存储结构及操作实现public class SeqStack implements Stack /顺序栈类,实现栈接口 Object element; /存储栈数据元素的数组 int top; /栈顶元素下标 注意:element数组存储栈的数据元素;

18、top表示当前栈顶元素的下标。 经典实现:(1)栈的初始化 public SeqStack(int size) /构造容量为size的空栈 this.element = new ObjectMath.abs(size); this.top= -1; public SeqStack() /构造默认容量的空栈 this(64); (2)判读栈是否为空 public boolean isEmpty() /判断栈是否空,若空返回true return this.top=-1; 判读栈是否为满? 本实现采用与顺序表同样的处理:当容量不够时,则将数组容量扩充一倍。 (3)入栈 public void pu

19、sh(T x) /元素x入栈,空对象不能入栈 if (x=null) return; /空对象不能入栈 if (this.top=element.length-1) /若栈满,则扩充栈容量 Object temp = this.element; /重新申请一个容量更大的数组 this.element = new Objecttemp.length*2; for (int i=0; itemp.length; i+) /复制数组元素,O(n) this.elementi = tempi; this.top+; this.elementthis.top = x; (4)出栈栈不空时,取走top位置

20、处栈顶元素,top减1,下一位置数据元素作为新的栈顶元素 public T pop() /出栈,返回栈顶元素,若栈空返回null return this.top= -1 ? null : (T) this.elementthis.top -; (5)获得栈顶数据元素栈不空时,获取top位置处栈顶元素,此时数据元素未出栈,top值不变 public T get() /取栈顶元素,未出栈,若栈空返回null return this.top=-1 ? null : (T)this.elementthis.top; /顺序栈类,最终类,实现栈接口,T表示元素类型public final class S

21、eqStack implements Stack private SeqList list; /顺序表 public SeqStack(int capacity) /构造栈 public SeqStack() /构造空栈 public boolean isEmpty() /判空 public void push(T x) /x入栈 public T peek() /返回栈顶(未出栈) public T pop() /出栈,返回栈顶元素 栈的链式存储,称为链栈。 链式栈的基本运算同顺序栈,定义也同线性表的链表定义,它是对链表实现的简单化(因为它只是对链表的头部操作)。 可用单链表实现链栈。 它的

22、元素只能在表头进行插入和删除。在链式存储结构中,不需要给出表头结点(head),因为其中惟一的已知条件是栈顶指针top,它是指向链式栈的第一个结点(相当于头指针)。 栈的各种运算比链式存储的普通线性表运算实现时要方便得多,主要原因是栈的各种运算只能在栈的一端操作,栈是特殊的线性表,我们只要考虑对线性表的一端操作的情况,并且只能在一端插入删除(栈顶) 而线性表除此之外(不限定一端插入删除),还需要考虑另外一端结点以及中间的结点的插入、删除、查询等操作,理解时,我们可以把栈的入出栈运算当作线性表的一端进行插入删除的特例即可。链式栈实现(经典实现) 栈的链式存储结构及操作实现public class

23、 LinkedStack implements Stack private Node top;(1)栈的初始化 public LinkedStack() /构造空栈 this.top=null; (2)判读栈是否为空 public boolean isEmpty() /判断栈是否空,若空返回true return this.top=null; (3)入栈 public void push(T x) /元素x入栈,空对象不能入栈 if (x!=null) this.top = new Node(x, this.top); /头插入,x结点作为新的栈顶结点 (4)出栈 public T pop()

24、 /出栈,返回栈顶元素,若栈空返回null if (this.top=null) return null; T temp = this.top.data; /取栈顶结点元素 this.top = this.top.next; /删除栈顶结点 return temp; (5)获得栈顶元素 public T get() /取栈顶元素,未出栈,若栈空返回null return this.top=null ? null : this.top.data; 链式栈实现(基于单链表)/链式栈类,最终类,实现栈接口,T表示数据元素的数据类型public final class LinkedStack implement

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1