数据结构复习资料,java数据结构期末考试

合集下载

数据结构期末考试复习总结,DOC

数据结构期末考试复习总结,DOC

《数据结构》期末考试题型及分值(1)简答题6题*5分=30分简要回答要点(2)分析题6题*5分=30分给出结果(3)设计题1题*10分=10分设计思想及结果(4)编程题1题*10分=10分完整代码(5)综合题1题*20分=20分抽象数据类型的定义、表示、实现、算法分析{定义=功能(ADT)表示=存储结构体实现=算法(基本操作)算法分析=时间、空间复杂度}考试概念有:1.数据结构{一、线性表(栈-队-列-串-数组-广义表-逻辑结构-存储结构-运算结构)二、非线性表(集合-树-图)}2.抽象数据类型数据对象-数据关系-基本操作3.算法性质-要求(设计)-效率(度量)4.实例查找:高效查找算法排序:高效的排序算法分析题考试题目参考(1)1-2-3-4-5-6顺序建BBST(2)6-5-4-3-2-1顺序建BBST简答题实例设计题:(1)(2)数据结构试卷(一)三、计算题(每题6分,共24分)1. 在如下数组A 中链接存储了一个线性表,表头指针为A[0].next ,试写出该线性表。

A01234567dat a 60 50 78 90 34 40nex t3 5 7 2 04 1线性表为:(78,50,40,60,34,90)⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡0111010111101110101011102. 请画出下图的邻接矩阵和邻接表。

3. 已知一个图的顶点集V 和边集E 分别为:V={1,2,3,4,5,6,7}; E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。

用克鲁斯卡尔算法得到的最小生成树为: (1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)20 4.画出向小根堆中加入数据4,2,5,8,3时,每加入一个数据后堆的变化。

《数据结构》期末考试试卷试题及答案

《数据结构》期末考试试卷试题及答案

《数据结构》期末考试试卷试题及答案第一部分:选择题(每题2分,共20分)1. 下面哪个数据结构是线性结构?A. 树B. 图C. 队列D. 网络流2. 下面哪个数据结构用于实现广度优先搜索算法?A. 栈B. 队列C. 散列表D. 堆3. 下面哪个数据结构用于实现深度优先搜索算法?A. 栈B. 队列C. 散列表D. 堆4. 下面哪个数据结构用于实现快速排序算法?A. 栈B. 队列C. 散列表D. 堆5. 下面哪个数据结构用于实现优先队列?A. 栈B. 队列C. 散列表D. 堆6. 下面哪个数据结构用于实现哈希表?A. 栈B. 队列C. 散列表D. 堆7. 下面哪个数据结构用于实现最小树算法?A. 栈B. 队列C. 散列表D. 堆8. 下面哪个数据结构用于实现拓扑排序算法?A. 栈B. 队列C. 散列表D. 堆9. 下面哪个数据结构用于实现最短路径算法?A. 栈B. 队列C. 散列表D. 堆10. 下面哪个数据结构用于实现并查集算法?A. 栈B. 队列C. 散列表D. 堆第二部分:填空题(每题2分,共20分)1. 链表是一种______数据结构。

2. 二叉树的节点最多有______个子节点。

3. 堆是一种特殊的______。

4. 散列表的查找效率取决于______。

5. 图的遍历算法包括______和______。

6. 快速排序算法的平均时间复杂度为______。

7. 哈希表中的冲突解决方法有______和______。

8. 最小树算法包括______和______。

9. 最短路径算法包括______和______。

10. 并查集算法用于解决______问题。

第三部分:简答题(每题10分,共50分)1. 请简述栈和队列的区别。

2. 请简述二叉搜索树的特点。

3. 请简述哈希表的原理。

4. 请简述图的深度优先搜索算法。

5. 请简述最小树算法的原理。

第四部分:编程题(每题20分,共50分)1. 编写一个函数,实现链表的插入操作。

2024吉林省JAVA版数据结构考资料

2024吉林省JAVA版数据结构考资料

2024吉林省JAVA版数据结构考资料2024年吉林省JAVA版数据结构考试资料一、题目解析2024年吉林省JAVA版数据结构考试题目主要包括以下内容:1.单项选择题:考察对数据结构基本概念、数据结构算法和JAVA编程的理解。

题目涉及到线性表、栈和队列、树、图等常见的数据结构及其操作。

2.填空题:考察对数据结构的基本概念和算法的掌握程度。

主要涉及到各种数据结构的操作和相关的算法。

3.综合应用题:考察对数据结构的综合运用能力。

主要涉及到数据结构的应用、算法的设计和实现等方面。

二、复习重点1.数据结构的基本概念和基本操作:包括线性表、栈和队列、树、图等常见数据结构的定义和基本操作的实现方法。

2.数据结构的算法设计和实现:包括排序算法、查找算法、图算法等。

需要掌握算法的原理和具体实现方法。

3.JAVA编程语言的基本语法和面向对象编程的概念和特点:需要熟悉JAVA语言的基本语法和面向对象的编程思想,以便能够用JAVA语言实现数据结构的相关算法和操作。

4.数据结构的应用:需要掌握数据结构在实际应用中的运用。

例如,树的应用可以涉及到二叉树、二叉查找树、平衡二叉树等。

三、复习方法为了提高复习效果,可以采取以下几种复习方法:1.查找资料:可以通过查阅相关的教材和参考书籍,找到相应的章节进行有针对性的学习。

同时,可以寻找一些优秀的题解和习题解析,加强对相关知识点的理解。

2.刷题和做习题:可以通过做一些历年的考试题目和习题,加深对知识点的理解和掌握。

可以选择一些典型的题目进行分析和总结,找出其中的规律和特点,从而有助于完成更复杂的题目。

3.实践和编程实现:可以通过编写一些简单的程序进行实践,例如实现一些基本数据结构的操作。

这样能够帮助更深入地理解数据结构的原理和实现。

4.组队和讨论:可以找一些有共同学习目标的同学一起组队学习,进行讨论和互相帮助。

通过思维碰撞和分享经验,能够更好地理解和应用数据结构的相关知识。

总之,2024年吉林省JAVA版数据结构考试资料主要涉及到数据结构的基本概念、算法设计和实现、JAVA编程等方面的知识。

数据结构复习题及参考答案

数据结构复习题及参考答案

数据结构复习题及参考答案《数据结构》课程复习资料一、填空题:1.设需要对5个不同的记录关键字进行排序,则至少需要比较________次,至多需要比较__________次。

2.设二叉排序树的高度为h,则在该树中查找关键字key最多需要比较_________次。

3.设在长度为20的有序表中进行二分查找,则比较一次查找成功的结点数有_________个,比较两次查找成功有结点数有_________个。

4.数据结构从逻辑上划分为三种基本类型:___________、__________和___________。

5.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。

6.向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________。

7.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。

8.在快速排序、堆排序、归并排序中,_________排序是稳定的。

9.在有n个叶子结点的哈夫曼树中,总结点数是_______。

10.一棵树T采用二叉链表存储,如果树T中某结点为叶子结点,则在二叉链表BT中所对应的结点一定_______。

11.3.已知数组A[10][10]为对称矩阵,其中每个元素占5个单元。

现将其下三角部分按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,6]对应的地址是_______。

12.在有n个结点的无向图中,其边数最多为_______。

13.取出广义表A=(x,(a,b,c,d))中原子x的函数是_______。

14.对矩阵采用压缩存储是为了___ ____。

15.带头结点的双循环链表L为空表的条件是_______。

16.设线性表中元素的类型是实型,其首地址为1024,则线性表中第6个元素的存储位置是。

数据结构(java)复习题及答案

数据结构(java)复习题及答案

数据结构(java)复习题及答案⼀、选择题1、数据结构在计算机内存中的表⽰是指____A__A.数据的存储结构 B.数据结构C. 数据的逻辑结构D.数据元素之间的关系2、若⼀个算法的时间复杂度⽤T(n)表⽰,其中n的含义是( A )A.问题规模 B.语句条数C.循环层数 D.函数数量3、下列选项中与数据存储结构⽆关的术语是( D )A.顺序表B.链表C.链队列D.栈4、已知循环队列的存储空间⼤⼩为m,队头指针front指向队头元素,队尾指针rear指向队尾元素的下⼀个位置,则向队列中插⼊新元素时,修改指针的操作是( D )A.rear=(rear-1)%m;B.front=(front+1)%m;C.front=(front-1)%m;D.rear=(rear+1)%m;5、栈和队列的共同点是__C______A.都是先进后出B.都是先进先出C.只允许在端点处插⼊和删除元素D.没有共同点6、已知⼀堆栈的进栈序列为1234,则下列哪个序列为不可能的出栈序列______D__A.1234B.4321C.2143D.41237、具有线性结构的数据结构是( C )A.树 B.图C.栈和队列 D.⼴义表8、假设以数组A[60]存放循环队列的元素,其头指针是front=47,当前队列有50个元素,则队列的尾指针值为( B )A.3 B.37C.50 D.979、若栈采⽤链式存储结构,则下列说法中正确的是( B )A.需要判断栈满且需要判断栈空B.不需要判断栈满但需要判断栈空C.需要判断栈满但不需要判断栈空D.不需要判断栈满也不需要判断栈空10、若⼀棵具有n(n>0)个结点的⼆叉树的先序序列与后序序列正好相反,则该⼆叉树⼀定是( C )A.结点均⽆左孩⼦的⼆叉树B.结点均⽆右孩⼦的⼆叉树C.⾼度为n的⼆叉树D.存在度为2的结点的⼆叉树11、若⼀棵⼆叉树中度为l的结点个数是3,度为2的结点个数是4,则该⼆叉树叶⼦结点的个数是( B )A.4B.5C.7D.812、在n个结点的线索⼆叉树中,线索的数⽬为_C_______A.n-1 B. nC.n+1D.2n13、⼀棵完全⼆叉树有1001个结点,其中有____B_____叶⼦结点A.500B.501C.503D.50515、⼀个有n个顶点的⽆向图最多有___C____条边。

数据结构期末复习资料

数据结构期末复习资料

第一章1、数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。

数据结构(Data Structure):相互之间存在一种或多种特定关系的数据元素的集合。

2、数据结构的形式定义:二元组Data_Structure=(D,S) 其中,D 是数据元素的有限集,S 是D 上关系的有限集。

3、数据元素之间关系的映像:1、顺序映像(顺序存储结构):以相对的存储位置表示后继关系。

2、非顺序映像(链式存储结构):借助指针元素存储地址的指针表示数据元素之间的逻辑关系。

任何一个算法的设计取决于数据(逻辑)结构,其实现取决于物理结构。

4、 算法的定义:对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。

特性:有穷性、确定性、可行性、输入、输出5、 算法的评价——衡量算法优劣的标准正确性(correctness):满足具体问题的需求可读性(readability):易读、易理解健壮性(robustness):当输入数据非法时,算法能够做出反应或进行处理效率与低存储量:执行时间短、存储空间小第二章 1、线性表是一种最简单的线性结构。

线性结构 是一个数据元素的有序(次序)关系特点:存在唯一的一个“第一个”的数据元素;存在唯一的一个“最后一个”的数据元素;除第一个数据元素外,均有唯一的前驱;除最后一个数据元素外,均有唯一的后继2、线性表类型的实现——顺序映像 定义:用一组地址连续的存储单元依次存放线性表中的数据元素。

⏹ 以“存储位置相邻”表示有序对<ai -1,ai >,则有:LOC (ai ) = LOC (ai -1) + l 其中l 是一个数据元素所占存储量LOC (ai ) = LOC (a 1) + (i -1)×l⏹ 特点:1、实现逻辑上相邻—物理地址相邻2、实现随机存取3、若假定在线性表中任何一个位置上进行插入的概率都是相等的,则移动元素的期望值为:∑+=+-+=11)1(11n i is i n n E 2n = 若假定在线性表中任何一个位置上进行删除的概率都是相等的,则移动元素的期望值为:∑=-=n i dl i n n E 1)(121-=n 4、 线性表类型的实现——链式映像 线性链表 特点:用一组地址任意的存储单元存放线性表中的数据元素。

(完整word版)数据结构期末复习题

(完整word版)数据结构期末复习题

数据结构期末复习题、选择题1. 以下说法中不正确的是(D)。

A. 数据元素是数据的基本单位B. 数据项是不可分割的最小可标识单位C. 数据可由若干个数据元素构成D. 数据项可由若干个数据元素构成2. 计算机所处理的数据一般具备某种内在联系,这是指(B)。

A. 数据和数据之间存在某种关系B. 元素和元素之间存在某种关系C. 元素内部具有某种结构D. 数据项和数据项之间存在某种关系3. 在数据结构中,与所使用的计算机无关的是数据的(A)结构。

A. 逻辑B. 存储C. 逻辑和存储D. 物理4. 数据的逻辑结构可以分为(C)两类。

A. 动态结构和静态结构B. 紧凑结构和非紧凑结构C. 线性结构和非线性结构D. 内部结构和外部结构5. 数据的逻辑结构是指(A)关系的整体。

A. 数据元素之间逻辑B. 数据项之间逻辑C. 数据类型之间D. 存储结构之间6. 以下数据结构中(D)属非线性结构。

A. 栈B. 串C. 队列D. 平衡二叉树7. 以下属于逻辑结构的是(C)。

A. 顺序表B. 哈希表C. 有序表D. 单链表8. 以下不属于存储结构的是(A)。

A. 栈B. 线索二叉树C. 哈希表D. 双链表9. 在计算机中存储数据时,通常不仅要存储个数据元素的值,而且还要存储(C)A. 数据的处理方法B. 数据元素的类型C.数据元素之间的关系D.数据的存储方法10. 数据结构在计算机内存中的表示是指(A)。

A. 数据的存储结构B. 数据结构C. 数据的逻辑结构D. 数据元素之间的关系11. 在数据的存储结构中,一个结点通常存储一个(B)A. 数据项B. 数据元素C. 数据结构D. 数据类型12. 在决定选择何种类型的存储结构时,一般不多考虑(A)A. 各结点的值如何B. 结点个数的多少C. 对数据有哪些运算D. 所用编程语言实现这种结构是否方便13. 计算机中算法指的是解决某一问题的有限运算序列,它必须具备输入、输出、(B)。

数据结构期末考试重点复习资料

数据结构期末考试重点复习资料

期末考试重点复习资料二、考试重点内容第一章绪论1、时间复杂度和空间复杂度的计算。

要求能够计算出程序的执行次数。

2、各种概念:数据结构、数据项、数据元素第二章线性表1、单链表的各种操作,包括单链表的建立、插入、删除结点的操作语句序列2、单链表(带头结点、不带头结点、循环单链表)的逆置运算。

3、双链表的插入和删除操作语句序列。

4、单链表的直接插入排序运算。

5、静态单链表的插入和删除操作。

6、二个有序单链表的合并、一个单链表拆分为多个单链表第三章栈和队列1、栈的输入序列和输出序列、递归函数的输出结果2、循环队列的入队、出队操作以及有效元素个数的计算第四章串1、KMP算法中的next和nextval值的计算第五章数组和广义表1、二维数组任意元素地址的计算2、稀疏矩阵的转置算法3、广义表的两个操作函数:取表头和表尾第六章树和二叉树1、二叉树的性质(特别是完全二叉树的性质,例如求完全二叉树的深度等)2、二叉树的遍历(特别是中序和先序遍历,要求能够使用堆栈完成非递归遍历编程和递归算法编程,在遍历基础上的各种操作,例如求二叉树的叶子数、二叉树结点数等操作,包括有编程算法和编程填空题)3、线索二叉树(特别是中序线索化二叉树和中序线索化二叉树的中序遍历,包括编程算法和编程填空题,希望大家着重研究)4、哈夫曼编码(主要是应用题,包括哈夫曼的编码与解码,也包括哈夫曼树的特点)5、树与森林在转化成二叉树时,左右子树的结点数有何特点)6、树的层次遍历(使用队列完成、借助树的层次遍历可以判断二叉树是否为完全二叉树)、判断二叉树是否为排序二叉树等,可能有编程题或编程填空题)补充:二叉树的物理存储结构(链式和顺序存储)*第七章图1、图的两种物理存储方式(邻接矩阵与邻接表存储表示)2、图的生成树与最小生成树(生成树特点)、图的遍历3、求最小生成树的两种算法(重点是PRIM 算法,特别会写出用PRIM算法求最小生成树的过程)4、使用迪杰斯特拉算法求单源最短路径,写出求解过程5、拓扑排序6、求关键路径,要求写出事件和活动的最早和最晚开始时间,深刻理解关键路径的含义。

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

第二章算法分析1.算法分析是计算机科学的基础2.增长函数表示问题(n)大小与我们希望最优化的值之间的关系。

该函数表示了该算法的时间复杂度或空间复杂度。

增长函数表示与该问题大小相对应的时间或空间的使用3.渐进复杂度:随着n的增加时增长函数的一般性质,这一特性基于该表达式的主项,即n 增加时表达式中增长最快的那一项。

4.渐进复杂度称为算法的阶次,算法的阶次是忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出来的。

算法的阶次为增长函数提供了一个上界。

5.渐进复杂度:增长函数的界限,由增长函数的主项确定的。

渐进复杂度类似的函数,归为相同类型的函数。

6.只有可运行的语句才会增加时间复杂度。

7. O() 或者大O记法:与问题大小无关、执行时间恒定的增长函数称为具有O(1)的复8.所有具有相同阶次的算法,从运行效率的角度来说都是等价的。

9.如果算法的运行效率低,从长远来说,使用更快的处理器也无济于事。

10.要分析循环运行,首先要确定该循环体的阶次n,然后用该循环要运行的次数乘以它。

(n 表示的是问题的大小)11.分析嵌套循环的复杂度时,必须将内层和外层循环都考虑进来。

12.方法调用的复杂度分析:如:public void printsum(int count){int sum = 0 ;for (int I = 1 ; I < count ; I++)sum += I ;System.out.println(sun);}printsum方法的复杂度为O(n),计算调用该方法的初始循环的时间复杂度,只需把printsum方法的复杂度乘以该循环运行的次数即可。

所以调用上面实现的printsum方法的复杂度为O(n2)。

13指数函数增长> 幂函数增长> 对数函数增长第三章集合概述——栈1.集合是一种聚集、组织了其他对象的对象。

它定义了一种特定的方式,可以访问、管理所包含的对象(称为该集合的元素)。

集合的使用者——通常是软件系统中的另一个类或对象——只能通过这些预定的方式与该集合进行交互。

2.集合可分为线性集合和非线性集合。

线性集合是一种元素按直线方式组织的集合。

非线性集合是一种元素按某种非直线方式组织的集合,例如按层次组织或按网状组织。

从这种意义上来说,非线性集合也许根本就没有任何组织形式。

3.集合中的元素通常是按照它们添加到集合的顺序,或者是按元素之间的某种内在关系来组织的。

4.抽象能隐藏某些细节。

5.集合是一种隐藏了实现细节的抽象。

6.对象是用于创建集合一种完美机制,因为只要设计正确,对象的内部工作对系统其他部分而言是被封装的。

几乎在所有情况下,在类中定义的实例变量的可见性都应声明为私有的(private)。

因此,只有该类的方法才可以访问和修改这些变量。

用户与对象的唯一交互只能通过其公用方法。

公用方法表示了对象所能提供的服务。

7.数据类型是一组值及作用于这些数值上的各种操作。

8.抽象数据类型(ADT)是一种在程序设计语言中尚未定义其值和操作的数据类型。

ADT 的抽象性体现在,ADT必须对其实现细节进行定义,且对这些用户是不可见的。

因此,集合是一种抽象数据类型。

9.数据结构是一种用于实现集合的基本编程结构。

10.Java集合API(应用程序编程接口)是一个类集,表示了一些特定类型的集合,这些类的实现方式各不相同。

11.栈的元素是按照后进先出(LIFO)的方式进行处理的,最后进入栈中的元素最先被移出。

栈是一种线性集合,元素的添加和删除都在同一端进行。

在科学计算中,栈的基本使用就是用于颠倒顺序(如一个取消操作)。

12.通常垂直的绘制栈,栈的末端称为栈的顶部,元素的添加和删除在顶部进行。

13.如果pop或者peek可作用于空栈,那么栈的任何实现都要抛出一个异常。

集合的作用不是去确定如何处理这个异常,而是把它报告给使用该栈的应用程序。

在栈中没有满栈的概念,应由栈来管理它自己的存储空间。

14.栈的toString()操作可以在不修改栈的情况下遍历和现实栈的内容,对调试非常有用。

15.类型兼容性是指把一个对象赋给引用的特定赋值是否合法。

16.继承就是通过某个现有类派生出一个新类的过程。

多态:使得一个引用可以多次指向相关但不同的对象类型,且其中调用的方法是在运行时与代码。

多态引用是一个引用变量,它可以在不同地点引用不同类型的对象。

继承可用于创建一个类层次,其中,一个引用变量可用于只想与之相关的任意对象。

类层次:通过继承创建的类之间的关系,某个类的子类可以成为其他类的父类17.一个Object引用可用于引用任意对象,因为所有类最终都是从Object类派生而来的。

18.泛型,用泛型定义类:使这个类能存储、操作和管理在实例化之前没有指定是何种类型的对象。

19.泛型不能被实例化。

它只是一个占位符,允许我们去定义管理特定类型的对象的类,且只有当该类被实例化时,才创建该类的对象。

20.计算后缀表达式:从左到右扫描,把每个操作符应用到其之前的两个紧邻操作数,并用该计算结果代替该操作符。

21.栈是用于计算后缀表达式的理想数据结构。

22.用栈计算后缀表达式时,操作数是作为一个Integer对象而不是作为一个int基本数值被压入栈中的,这是因为栈被设计为存储对象的。

注意:第一个弹出的操作数是表达式的第二个操作数,第二个弹出的操作数是表达式的第一个操作数。

23.Javadoc注释以/** 开始,以*/ 结束。

Javadoc标签用于标识特定类型的信息。

@auther 标签用于标识编写代码的程序员。

@version标签用于制定代码的版本号。

@return标签用于表明该方法的返回值。

@param标签用于标识传递给该方法的每个参数。

24.异常就是一个对象,它被定义了一种非正常或错误的情况。

异常由程序或运行时环境抛出,可以按预期的被捕获或被正确处理。

错误与一场异常类似,只不过错误往往表示一种无法恢复的情况,且不必去捕获它。

25.接口的命名:用集合名+ADT来为集合接口命名。

26.取消操作通常是使用一种名为drop-out的栈来实现。

它与栈唯一的不同是,它对存储元素的数量有限制,一旦达到限制,如果有新元素要压入,那么栈底的元素将从栈中被丢弃。

27.数组一旦创建好,其容量是不能改变的。

28.处于运行效率的考虑,给予数组的栈实现总是使栈底位于数组的索引0处。

29.ArrayStack类有两个构造函数,一个使用的是默认容量,一个使用的是制定容量。

30.构造函数与成员方法的区别:a)构造函数是初始化一个类的对象时调用,无返回值。

名字与类名相同b)成员函数由类对象主动调用,使用点操作符(“.”),又返回值。

31. private T[] stack;Stack = (T[]) ( new Object[DEFAULT_CAPACITY]);由于不能实例化一个泛型对象,这里实例化了一个Object数组,然后将它转换为一个泛型数组。

32.push()public void push(T element) {if(size()==stack.length)expandCapacity();stack[top]= element;top++;}33.pop()public T pop() throws EmptyCollectionException{if (isEmpty())throw new EmptyCollectionException("Stack");top--;T result=stack[top];stack[top]=null;return result;}34.peek()public T peek()throws EmptyCollectionException {if(isEmpty())throw new EmptyCollectionException("Stack");return stack[top-1];}35.private void expandCapacity(){T[]larger = (T[])(new Object[stack.length*2]);for (int index=0; index<stack.length;index++)larger[index]=stack[index];stack = larger;}第四章链式结构——栈1.对象引用变量可以用来创建链式结构。

链式结构是一种数据结构,它使用对象引用变量来创建对象之间链接。

链式结构是基于数组的集合实现的主要替代方案。

2.对象引用变量存放的是对象的地址,表示该对象在内存中的存储位置。

我们通常并不是显示地址,而是把引用变量描绘成一种“指向”对象的名字,这种引用变量又称为指针。

3.链表由一些对象构成,是一种链式结构,其中的一个对象可以指向另一个对象,从而在链表中创建一个对象的线性次序。

链表中存储的对象通常泛称为该链表的结点。

4.需要一个单独的引用变量来表示链表的首结点。

链表终止于其next引用为空的结点。

5.链表只是链式结构的一种。

如果建立的类含有多个指向对象的引用,就可以创建更复杂的链式结构。

链接的管理方式表明了这种链式结构的特定组织形式。

6.链表会按需动态增长,因此在本质上,它没有容量限制(在不考虑计算机本身的内存限制下)。

7.链表的大小可以按需伸缩以容纳要存储的元素数量,因此链表被认定为是一种动态结构。

在java语言中,所有动态创建的对象都来自于一个名为系统堆或自由存储的内存区。

8.对于链表来说,访问链表的元素的唯一方式是,从第一个元素开始,顺着该链表往下进行。

9.结点可以被插入到链表的任意位置。

在链表前端架结点时,需重新设置指向整个链表的引用:a)新添加结点的next引用被设置为指向链表的当前首结点;b)指向链表前端的引用重新设置为指向这个新结点。

如果颠倒顺序,即先重新设置front引用,那么就失去了那个唯一指向现有链表的引用,于是再也检索不到该链表了。

10.改变引用顺序是维护链表的关键。

11.链表的任一结点都可被删除。

要删除链表的首结点,需要重置指向链表前端的引用,使其指向链表当前的次。

如果其他地方需要这个被删除的结点,那么在重制front引用之前,必须创建一个指向被删除结点的单独引用。

12.链表的一个关键特征:必须把链表结构的细节内容与链表所储存的元素区分开来13.存储在集合中的对象不应该含有基本数据结构的任何实现细节。

14.节点类含有两个引用:一个引用指向链表的下一结点,另一个引用指向将存储到链表中的那个元素。

这时,链表中所存储的实际元素是使用结点对象中单独引用来访问的。

15.双向链表中,需维护两个引用:一个指向链表的首结点,一个指向链表的末结点。

相关文档
最新文档