数据结构知识要点.docx
- 文档编号:11184746
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:22
- 大小:98.48KB
数据结构知识要点.docx
《数据结构知识要点.docx》由会员分享,可在线阅读,更多相关《数据结构知识要点.docx(22页珍藏版)》请在冰豆网上搜索。
数据结构知识要点
第1章绪论知识要点
1.1基本概念
1. 数据
数据是对客观事物的符号表式,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
随着计算机科学的发展,数据概念的内涵在逐步扩大。
2. 数据元素
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
一个数据元素由若干个数据项组成,数据项是数据的不可分割的最小单位。
3. 数据对象
数据对象是性质相同的数据元素的集合,是一个数据的子集。
4.数据结构
数据结构的定义:
由某一数据对象及该对象中所有数据成员之间的关系组成。
记为:
Data_Structure={D,R}
其中,D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。
具体来说,数据结构包含三个方面的内容,即数据的逻辑结构,数据的存储结构和对数据所施加的运算。
这三个方面的关系为:
(1)数据的逻辑结构独立于计算机,是数据本身所固有的。
(2)存储结构是逻辑结构在计算机存储器中的映像,必须依赖于计算机。
(3)运算是指所施加的一组操作总称。
运算的定义直接依赖于逻辑结构,但运算的实现必依赖于存储结构。
数据的逻辑结构是相互之间存在一种或多种特定关系的数据元素的集合。
根据数据元素之间关系的不同特性,基本逻辑结构通常有4种:
(1)集合:
数据元素之间除了“同属于一个集合”的关系外,别无其他关系。
(2)线形结构:
数据元素之间存在一个一对一的关系,有且仅有一个开始结点和终端结点,除开始结点外,每个结点有且仅有一个前趋结点,除终端结点外,每个结点有且仅有一个后继结点。
(3)树形结构:
数据元素之间存在一个一对一的关系,有一个开始结点和多个终端结点,除开始结点外,每个结点有且仅有一个前趋结点,除终端结点外,每个结点可能有多个后继结点。
(4)网状结构或图状结构:
数据元素之间存在多个对多个的关系,每个结点可能有多个前趋结点和多个后继结点。
集合是数据元素之间关系极为松散的一种结构,因此也可以用其他结构来表示。
树型结构和网状结构又称为非线形结构。
数据的存储结构或物理结构是逻辑结构在计算机存储器里的实现,它是依赖于计算机的。
元素之间的逻辑关系在计算机中有两类不同的表示方法:
顺序映象和非顺序映象。
顺序存储是把结点存储在物理上相邻的一组存储单元里,结点之间的关系由存储单元的邻接关系来体现。
链式存储是将结点所占的存储单元分为两部分:
一部分存放结点本身的信息,即数据项;另一部分存放该结点的后继结点所对应的存储单元的地址,即指针项。
5. 抽象数据类型
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。
1.2算法及其分析
1. 算法及其特性
算法是对特定问题求解步骤的一种描述,是指令的有序序列。
由于数据的逻辑结构和储存结构不是唯一的,在很大程度上可以由用户自行选择和设计,所以处理同一问题的算法也不是唯一的。
即使对相同的逻辑结构和储存结构而言,其算法的设计思想和技巧不同,编写出的算法也大不相同。
算法的含义与程序十分相似,但又有区别。
一个程序不一定满足有穷性。
算法的5个重要特性:
(1)输入;
(2)输出;(3)确定性;(4)有穷性;(5)有效性。
2.算法的评价
评价一个算法一般从以下五个方面进行:
(1)正确性;
(2)可使用性;(3)可读性;(4)效率;(5)健壮性。
算法的效率主要是指算法执行时计算机资源的消耗,包括存储和运行时间开销。
在计算机科学中时间效率(运算量少)与空间效率(低存储量)往往是矛盾的,在实际应用中需要根据问题的要求和特点而选择侧重点。
难点和重点
3.时间复杂度
一个程序的时间复杂度(Timecomplexity)是指程序运行从开始到结束所需要的时间。
一个算法是由控制结构和原操作构成的,其执行时间取决于两者的综合效果。
为了便于比较同一问题的不同的算法,通常的做法是:
从算法中选取一种对于所研究的问题来说是基本运算的原操作,以该原操作重复执行的次数作为算法的时间度量。
一般情况下,算法中原操作重复执行的次数是规模n的某个函数T(n)。
许多时候要精确地计算T(n)是困难的,我们引入渐进时间复杂度在数量上估计一个算法的执行时间,也能够达到分析算法的目的。
定义(大Ο记号):
如果存在两个正常数c和n0,使得对所有的n,n≥n0,有:
f(n)≤cg(n)则有:
f(n)=Ο(g(n))
例如,一个程序的实际执行时间为T(n)=2.7n3+3.8n2+5.3。
则T(n)=Ο(n3)。
使用大Ο记号表示的算法的时间复杂度,称为算法的渐进时间复杂度(AsymptoticComplexity)。
记作:
T(n)=Ο(f(n)),n表示问题的规模。
通常用Ο
(1)表示常数计算时间。
常见的渐进时间复杂度有:
Ο
(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<Ο(2n)
4.空间复杂度
一个程序的空间复杂度(Spacecomplexity)是指程序运行从开始到结束所需的存储量,记作:
S(n)=Ο(f(n)),n表示问题的规模。
1.在数据结构中,从逻辑上可以把数据结构分成
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
2.线性表的顺序存储结构是一种__的存储结构,线性表的链式存储结构是一种__的存储结构。
A.直接存取B.顺序存取C.索引存取D.HASH存取
3.计算机算法指的是___
A.计算方法B.排序方法
C.解决问题的步骤序列D.调度方法
4.计算机算法具备有输入、输出、____等五个特征
A.有效性、可移植性和可扩充性
B.有效性、确定性和有穷性
C.确定性、有穷性和稳定性
D.易读性、稳定性和安全性
5.线性表若采用链表存储结构时,要求内存中可用存储单元的地址___
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续不连续都可以
6.以下时间段的时间复杂度是。
for(i=o;i for(j=0;j A[i][j]=0; 7.以下程序段的时间复杂度是。 s=0; for(i=0;i<0;i++) for(j=0;j s+=B[i][j]; sum=s; 8.以下程序段的时间复杂度是。 i=s=0; while(s {i++; s++; } 第2、3章知识要点 线形表的特点: 表中元素属于同一数据对象,元素之间存在一种序偶关系: 第一个元素有一个直接后继,最后一个元素有一个直接前趋,其余元素有且仅有一个直接后继和一个直接前趋。 1、线性表的顺序存储 1.线形表的顺序存储特点 逻辑上相邻的元素,物理位置也相邻。 可随机访问表中元素,表中元素的存储位置可用一个简单,直观的公式表达,但作插入或删除操作时需移动大量元素,效率不高,适合元素个数变化不大的情况。 此时,如数据元素值按一定顺序存储时,则称为顺序存储的有序表,简称静态有序表。 2、线形表的链式存储特点 逻辑上相邻的元素,物理位置可以不相邻,表中元素只能顺序访问,插入,删除等操作只需修改指针而不需移动元素,存储空间利用率高,表的容量可以动态变化。 适合元素个数变化较大的情况。 3、循环链表 特点: 最后一个结点的指针域指向头结点,从任意结点出发都可以找到表中的其他结点。 循环线形链表和单链表的有关操作的差别仅在于,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。 线形结构可用顺序表或链表存储,试问两种存储表示各有哪些主要优缺点? 4、双向链表 双向链表克服了在单链表中求前趋需要遍历链表而导致效率较低的缺点。 对于双向链表“查询”和单链表相同;但在“插入”和“删除”操作时需要同时修改两个方向上的指针。 为操作方便,双向链表常常被置成循环链表。 即最后一个结点的一个指针域指向头结点,头结点的一个指针域指向最后一个结点形成环路,从任意结点出发都可以找到表中的其他结点 重点和难点: 1、数组的顺序存储方式 要求掌握一维、两维、三维数组元素的存放地址计算。 2、理解顺序表的定义和特点,顺序表的类定义及其主要操作,如查找、插入和删除等,掌握查找算法的平均查找长度,插入与删除算法中的对象平均移动次数。 3、字符串的定义及其操作的实现。 4、单链表: 单链表定义、相应操作的实现 单链表中插入和删除操作; 单链表中设置表头结点的作用; 5、循环链表: 循环链表的定义,单链表与循环链表的异同 6、双向链表: 带表头结点的双向循环链表 双向循环链表的定义,带表头结点的优点 双向链表的查找、插入与删除算法 1.一个顺序表(即顺序存储的线性表,以下相同)第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是_____ 2.对于一个二维数组a[n][m],若采用按行存放(行优先存储)的方式,则任一数组元素a[j][k]相对于a[0][0]的地址为。 3.顺序表的插入和删除要求仍然保持各个元素原来的次序。 设在等概率情形下,对有127个元素的顺序表进行插入,平均需要移动个元素。 删除一个元素又平均需要移动个元素。 4.在一个长度为n的顺序表中,向第I个元素(1≤I≤n+1)之前插入一个新元素时,需要向后移动____个元素。 5.从一个长度为n的顺序表中删除第I个元素(1≤I≤n)时,需要向前移动____个元素。 6.非空的循环单链表head的尾结点(由p所指向)满足____ A.p->next=NULLB.p=NULLC.p->next=headD.p=head 7.单链表中已知指针q所指结点是指针p所指结点的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作? ()。 A.p→link=s;s→link=q; B.p→link=s→link;s→link=p; C.s→link=p→link;p→link=s; D.q→link=s;s→link=p; 8.在循环双链表的p所指结点之后插入s所指结点的操作是___ A.p->right=s;s->left=p;p->right->left=s;s->right=p->right; B.p->right=s;p->right->left=s;s->left=p;s->right=p->right; C.s->left=p;s->right=p->right;p->right=s;p->right->left=s; D.s->left=p;s->right=p->right;p->right->left=s;p->right=s; 9.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较____个结点。 10.在一个具有n个结点的有序单链表之插入一个新结点并仍然有序的时间复杂度是____ 11.给定有n个元素的顺序表,建立一个有序单链表的时间复杂度是___ 第4章知识要点 本章主要讨论了三种线形结构: 栈、队列和优先级队列。 这3种结构都是顺序存取的表,而且都是限制存取点的表。 栈限定只能在表的一端(栈顶)插入和删除,其特点是先进后出。 队列和优先级队列限定只能在表的一端(队尾)插入和在另一端(队头)删除,不过优先级队列从队列中取出的是具有最高优先权的元素。 1、栈及其应用 理解栈的定义和特点;栈的抽象数据类型;栈的顺序存储表示和链式存储表示;栈在表达式计算中的应用;在栈式铁路调车线上当进栈序列为1,2,3……,n时,可能的出栈序列计数。 注意: 栈的特点: 栈是限定仅在表一端(栈顶)进行插入,删除操作的线形表,是后进先出(LIFO)的线形表。 链式栈的栈顶应在链头,插入与删除都在链头进行。 2、队列及其应用 理解队列的定义和特点;队列的抽象数据类型;队列的顺序存储表示(循环队列);队列的链式存储表示;优先级队列的定义和特点;优先级队列的存储表示。 注意: 队列的特点: 队列是限定仅在表尾进行插入和表头进行删除操作的线形表,是先进先出(FIFO)的线性表。 链式队列的对头应在链头,队尾应在链尾。 重点和难点: 1、栈: 栈的特性、栈的基本运算 (1)栈的数组实现、栈的链表实现; (2)栈满及栈空条件 (3)栈的5种操作(进栈、退栈、取栈顶元素、判栈空、置栈空) 2、栈的应用: 用后缀表示计算表达式,中缀表示改为后缀表示 3、队列: 队列的特性、队列的基本运算 (1)队列的数组实现: 循环队列中队头与队尾指针的表示,队满及队空条件; (2)队列的链表实现: 链式队列中的中队头与队尾指针的表示。 4、优先级队列: 优先级队列的插入与删除算法 1.栈和队列的共同点是___ 都是先进后出 都是先进先出 只允许在端点处插入和删除元素 没有共同点 2.一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是___ edcba decba dceab abcde 3.一个栈的入栈序列是1,2,3,4,则栈的可能的输出序列是___ 1,4,2,3 2,1,4,3 4,2,1,3 4,2,3,1 4.一个队列的入对序列是1,2,3,4,则队列的输出序列是____ 4,3,2,1 1,2,3,4 1,4,3,2 3,2,4,1 5.表达式a*(b+c)-d的后缀表达式是___ abcdd+- abc+*d- abc*+d- -+*abcd 6.向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行____ HS->next=s; s->next=HS->next;HS->next=s; s->next=HS;HS=s; s->next=HS;HS=HS->next; 7.从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行____ x=HS;HS=HS->next; x=HS->data; HS=HS->next;x=HS->data; x=HS->data;HS=HS->next; 8.对于一个栈,给出输入项A,B,C。 如果输入项序列由A,B,C所组成,试给出全部可能的输出序列。 9.用单链表实现队列,其头结点的指针为head,尾结点指针是rear。 令front=rear=NULL表示队列为空,编写实现队列的如下5种运算的函数: makenull: 将队列置成空队列; front: 返回队列的第一个元素; enqueue: 把元素x插入到队列的后端; dequeue: 删除队列的第一元素; empty: 判定队列是否为空。 4-10 第5章知识要点 本章主要讨论递归过程和广义表。 一个递归的定义可以用递归的过程计算,一个递归的数据结构可以用递归的过程实现它的各种操作,一个递归的问题也可以用递归的过程求解。 在设计递归算法时,可以先考虑在什么条件下可以直接求解。 如果可以直接求解,考虑求解的步骤,设计基本项;如果不能直接求解,考虑是否可以把问题规模缩小求解,设计归纳项,从而给出递归求解的算法。 广义表是一种表,它的特点是允许表中套表。 因此,它不一定是线形结构。 它可以是复杂的非线形结构,甚至允许递归。 1、递归 理解递归的定义、递归的数据结构、递归问题以及递归问题的递归求解方法。 理解递归过程的机制与利用递归工作栈实现递归的方法。 通过迷宫问题,理解递归解法,从而掌握利用栈如何实现递归问题的非递归解法。 2、广义表 理解广义表的概念,广义表的几个性质,用图表示广义表的方法,广义表操作的使用,广义表存储结构的实现,广义表的访问算法,以及广义表的递归算法。 重点和难点: 1、递归: 递归的定义、递归的数据结构、递归问题用递归过程求解 链表是递归的数据结构,可用递归过程求解有关链表的问题。 2、递归实现时栈的应用 3、广义表: 广义表定义、长度、深度、表头、表尾 (1)用链表表示广义表的存储结构; (2)广义表的递归算法,包括复制、求深度、求长度、删除等算法。 1、设有一个递归算法如下 intfact(intn) {if(n<=0)return1; elsereturnn*fact(n-1); } 2、设有一个递归算法如下 LongFib(longn) {if(n<=1)returnn; elsereturnFib(n-1)+Fib(n-2); } 3.Template : Size(constBinaryTree if(t==null)return0;//递归结束条件 elsereturn1+Size(t→leftchild)+Size(t→rightchild); } 5-6 5-7 第6章知识要点 6.1树的结构特点 树中只有根结点没有前趋,其余结点有且仅有一个前趋,所有结点可有零个或多个后继。 树是一种典型的递归结构。 6.2二叉树及其性质 二叉树: 二叉树是结点的有限集,该集合或者为空或者是由一个根结点和两棵互不相交的被称为该根的左子树和右子树所组成。 二叉树中的分支有左右之分,而树中分支无左右之分。 二叉树的重要性质: 性质1二叉树的第i层至多有2i个结点(设根结点的层次为0)。 性质2高度为k的二叉树至多有2k+1-1个结点(k≥-1)。 满二叉树: 高度为k且结点数为2k+1-1的二叉树 完全二叉树: 高度为k有n个结点的二叉树,当且仅当每一个结点都与高度为k的满二叉树中编号从1到n的结点一一对应。 也可以看成将满二叉树中若干个编号最大的结点去掉而成,除开最底层,以上各层构成满二叉树。 , 性质3对任何一棵二叉树T,若其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。 性质4具有n个结点的完全二叉树的深度为log2(n+1)-1。 性质5具有n个结点的完全二叉树的结点按层次编号(按上到下,从左往右的方式连续编号),则对任一结点i(0≤i≤n-1)有: (1)若i=0,则结点i为二叉树的根,无双亲;若i>0则其双亲结点为(i-1)/2。 (2)若2i+1 (3)若2i+1 6.3二叉树的存储结构 1.顺序存储结构 二叉树的顺序存储——按照完全二叉树的结构对二叉树的结点进行编号。 缺点: 完全利用率低,不利于插入和删除。 2.链式存储结构 有二叉链表,三叉链表,双亲链表,线索链表。 6.4二叉树的遍历 遍历二叉树指以一定的次序访问二叉树的每一个结点,且每一个二叉树的结点仅被访问一次。 遍历二叉树的过程,实际上是按某种规律把二叉树的结点排成序列(对非线形结构线形化)。 常用的遍历(周游)方式有: 前序遍历,中序(对称序)遍历,后序遍历,层次(按宽度方向)遍历。 一棵二叉树的遍历序列是唯一的,但二叉树不能由某一遍历序列所唯一确定。 由前序遍历(或后序遍历,层次遍历)与中序遍历序列可唯一确定一棵二叉树,前序(后序,层次)定根,中序分左右。 6.5线索二叉树 线索二叉树: 加上线索的二叉树。 线索化: 对二叉树以某种次序遍历使其变为线索二叉树的过程。 线索化的过程既是在遍历过程修改指针的过程。 中序线索二叉树 6.6树的存储结构 树的存储结构有三种: 广义表表示法,双亲表示法,树的二叉链表(孩子-兄弟)存储表示法。 双亲表示法利用了每个结点(除根以外)只有唯一的双亲的性质,但这种表示法中,求结点的孩子需要遍历整个结构。 孩子-兄弟表示法,又称二叉树表示法,或二叉链表表示法。 利用这种存储结构便于实现各种树的操作。 6.7二叉树与树、森林之间的转换 1.树转换成的二叉树有以下特点: (1)根结点没有右子树; (2)各结点的右孩子是原来树中该结点的兄弟,而该结点的左孩子还是原来树中该结点的孩子。 2.树和森林的遍历 树有两种遍历方法: 先根(次序)遍历树,即: 先访问树的根结点,然后依次先根遍历根的每棵子树;后根(次序)遍历树,即: 先依次后根遍历每棵子树,然后访问根结点。 森林的两种遍历方法: (1)先序遍历森林 (2)中序遍历森林 当以二叉链表作存储结构时,树的先根遍历和后根遍历可借用二叉树的先序遍历和中序遍历算法实现。 6.8哈夫曼(Huffman)树 1.有关概念 路径长度: 从一个结点到另一个结点的分支数目。 树的路径长度: 从根结点到每一结点的路径长度之和。 结点的带权路径长度: 从该结点到根结点之间的路径长度与结点上的权的乘积。 树的带权路径长度: 树中所有叶子结点的带权路径长度之和,通常记作WPL。 哈夫曼树(最优二叉树): 带权路径长度最小的二叉树。 在结点数固定的二叉树中,完全二叉树的路径长度达到最小,但带权路径长度最小的不一定是完全二叉树而是哈夫曼树。 6.8哈夫曼(Huffman)树 2.哈夫曼树的构造 直观地可以看到: 构造哈夫曼树时,权值越大的结点应放在离根结点越近的位置。 哈夫曼树的构造步骤如下: (1)根据给定的n个权值{w1,w2,…wn}构成n棵只有根结点的二叉树的集合F={T1,T2,…Tn}. (2)在F中选取两棵根结点的权值最小的树作为左右子树构成一棵新的二叉树,并将左右子树的根结点权值之和作为根结点的权值。 (3)从F中删除这两棵子树,而新的二叉树加入到F中。 (4)重复步骤 (2)和(3),直到中只有一棵树为止,这棵树就是哈夫曼树。 3.哈夫曼树编码 在哈夫曼树中,左分支用“0”表示,右分支用“1”表示,则从根结点到叶结点的路径上分支字符组成的字符串构成该叶结点的哈夫曼编码。 它是一种长短不等的前缀编码,可以使电文总长最短。 重点和难点: 1、树: 树的定义、树的基本运算 (1)树的分层定义是递归的; (2)树中结点个数与高度的关系 2、二叉树: 二叉树定义、二叉树的基本运算 (1)二叉树性质、二叉树中结点个数与高度的关系、不同种类的二叉树棵数; (2)完全二叉树的顺序存储、完全二叉树的双亲、子女和兄弟的位置; (3)二叉树的前序、中序、后序遍历的递归算法和使用栈的非递归算法; (4)二叉树的层次遍历算法; (5)中序线索化二叉树、前驱与后继的查找方法、建立中序线索化二叉树的算法。 3、霍夫曼树: 霍夫曼树的构造方法、霍夫曼编码、带权路径长度的计算 (1)霍夫曼树是带权路径长度最小的扩充二叉树; (2)构造霍夫曼树时,按构造算法,每次具最小关键码的子树是根的左子树,具次小关键码的子树是根的右子树; (3)在构造过程中,新二
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 知识 要点