数据结构豪华精简版资料Word下载.docx
- 文档编号:17905040
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:16
- 大小:60.97KB
数据结构豪华精简版资料Word下载.docx
《数据结构豪华精简版资料Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构豪华精简版资料Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
顺序存储方法、链式存储方法、索引存储方法和散列存储方法。
a、数据元素在计算机中的存储方式称为数据的存储结构。
b、有两种基本形式:
顺序存储结构和链式存储结构。
c、顺序存储结构:
把数据元素存储在一块连续地址空间的内存中,特点是逻辑上相邻的数据元素在物理上也相邻。
d、链式存储结构:
用指针把相互直接关联的结点(直接前驱结点或直接后继结点)连接起来,特点是:
逻辑上相邻的数据元素在物理上(内存存储位置上)不一定相邻,数据间的逻辑关系表现在结点的连接关系上。
e、指针是指向物理存储单元地址的变量。
由数据元素域和指针域组成的一个结构体称为一个结点。
算法的特性:
有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。
a、算法的定义:
描述求解问题方法的操作步骤集合。
算法的实现:
文字形式、伪代码、程序设计与语言。
b、算法的设计目标:
正确性、可读性、健壮性、高时间效率、高空间效率。
计算题(算法的时间效率分析):
算法的耗时与算法所处理数据个数N的函数关系的分析,也称作算法的时间复杂度分析。
时间频度:
一个算法中的语句执行次数称为语句频度或时间频度。
记为f(n)。
时间复杂度:
对算法各基本操作的频度求和,便可得算法的时间复杂度。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。
记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。
例:
1、for(i=1;
i<
=n;
i++)
printf(“i=%d\n”,i);
因为f(n)=n
所以T(n)=O(n)
2、f(n)=2n^2+n+1
T(n)=n^2(就是n的平方)
规律:
为了方便比较,通常的做法是,从算法选取一种对于所研究的问题(或算法模型)来说是基本运算的操作,以其重复执行的次数作为评价算法时间复杂度的标准。
该基本操作多数情况下是由算法最深层环内的语句表示的,基本操作的执行次数实际上就是相应语句的执行次数。
for(i=1;
i++)
{
for(j=1;
j<
j++)
{
c[i][j]=0;
for(k=1;
k<
k++)
c[i][j]+=a[i][k]*b[k][j];
}
最深层基本语句执行次数f(n)=n^3
则该算法的时间复杂度:
T(n)=O(n^3)
O
(1)<
O(log2n)<
O(n)<
O(n*log2n)<
O(n^2)<
O(n^3)<
O(2^n)<
O(n!
)
第2章线性表
带头结点单链表和不带头结点单链表插入、删除的比较。
a、单链表是构成链表的结点只有一个指向直接后继结点的指针域。
b、单链表的表示方法:
数据域
指针域
或
Data
next
c、data域存放数据元素,next域存放指向下一个结点的指针。
d、指向单链表的指针称作头指针,头指针所指的不存放数据元素的第一个结点称作头结点。
存放第一个数据元素的结点称作第一个数据元素结点。
第一个数据元素结点在带头结点的单链表中是链表中的第二个节点,在不带头结点的单链表中是链表中的第一个结点。
带头结点的单链表
(1)带头结点单链表的插入删除。
P27
(2)不带头结点的单链表的插入删除。
P28
结论:
a、带头结点,无论是在第一个数据元素结点前插入还是在其他数据元素结点前插入,都不会改变头指针的值。
删除第一个数据元素结点和删除其他数据元素结点算法的处理方法相同。
b、不带头结点,则在第一个数据元素前插入和在其他数据元素结点前插入算法的处理方法不同。
删除第一个数据元素结点和删除其他数据元素结点的算法的处理方法不相同。
双向链表
在双向链表中,由于每个结点既包含有一个指向后继结点的指针,又包含有一个指向前驱结点的指针,所以当访问过一个结点后,既可以依次向后访问每一个结点,也可以依次向前访问每一个结点。
双向链表中,每个结点有3个域:
prior、data、next,其中prior域为指向前驱结点的指针域。
单链表中,进行结点插入和删除时涉及到前后结点的一个指针域的变化。
而在双链表中,结点的插入和删除操作涉及到前后结点的两个指针域的变化。
插入、删除操作具体看P37-40
线性结构的特点(非重点,了解)
A定义:
可以在任意位置进行插入何删除数据元素操作的、有n(n>
=0)个相同类型数据元素a0,a1,a2……an-1组成的线性结构。
B特点:
除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素。
线性结构的两种存储结构及其对应的特点(非重点,了解)
(1)顺序存储结构特点:
a线性表中所有数据元素所占的存储空间是连续的;
b线性表中各数据元素在存储空间上是按逻辑顺序依次存放的。
(2)链式存储结构特点:
a用一组任意的存储单元存储线性表的数据元素;
b利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素;
c每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息
第三章栈
给出数据元素序列A、B、C、D,给出利用一个栈可以得到的所有数据元素序列和不可以得到的所有数据元素序列(重点)
解:
可以得到的数据元素序列有:
A入,A出,B入,B出,C入,C出,D入,D出,得ABCD
A入,A出,B入,B出,C入,D入,D出,C出,得ABDC
A入,A出,B入,B出,C入,D入,D出,C出,得ACDB
A入,A出,B入,C入,C出,B出,D入,D出,得ACBD
A入,A出,B入,C入,D入,D出,C出,B出,得ADCB
A入,B入,B出,A出,C入,C出,D入,D出,得BACD
A入,B入,B出,A出,C入,D入,D出,C出,得BADC
A入,B入,B出,C入,C出,D入,D出,A出,得BCDA
A入,B入,B出,C入,C出,A出,D入,C出,得BCAD
A入,B入,B出,C入,D入,D出,C出,A出,得BDCA
A入,B入,C入,C出,B出,D入,D出,A出,得CBDA
A入,B入,C入,C出,B出,A出,D入,D出,得CBAD
A入,B入,C入,C出,D入,D出,B出,A出,得CDBA
A入,B入,C入,D入,D出,C出,B出,A出,得DCBA
除上述14个不同组合外,尚有ADBC,BDAC,CABD,CADB,CDAB,
DABC,DACB,DBAC,DBCA,DCAB组合不能得到。
栈和队列的概念(非重点,了解)
(1)栈:
a一种特殊的线性表,栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,差别是:
线性表的插入删除不受限制,而栈只能在栈顶插入和删除。
b栈中允许进行插入和删除操作的一端称为栈顶,另一端称
为栈底。
栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。
不含元素的空表称空栈
c每次进栈的数据元素都放在原来当前栈顶元素之前而成为新的栈顶元素,每次退栈的数据元素都是原当前栈顶元素,这样,最后进入栈的数据元素总是最先退出栈,因此,栈也称为后进先出线性表。
(2)队列:
a一种特殊的线性表,队列的数据元素及数据元素间的逻辑关系和线性表相同,差别是:
线性表允许在任意位置插入删除,队列只允许在队尾插入,队头删除。
b每次入队列的数据元素都放在原来的队尾数据元素之后成为新的队尾元素,每次出队列的数据元素都是原来的队头元素。
这样,最先入队列的数据元素总是最先出队列,多以队列是先进先出线性表。
栈和队列进行数据修改的原则(非重点,了解)
栈:
后进先出队列:
先进先出
第4章串
KMP算法
01234567
abaabcac
next[j]-10011201
nextval[j]-10-1102-11
以下为神将庞武锦解题破解:
(1)next[j]方法:
a、0对应的a为-1,1对应的b为0。
.神将说固定的!
结果可从下面做法推出。
b、2对应的a前面的b的前面木有与之相同对应的b,所以2对应a的next[j]为0。
.
c、3对应的a前面的a的前面有0对应的a,所以3对应的a的next[j]为0对应的a的退一格为1对应的b,即next[j]为1。
d、4对应的b前面的a有0对应的a(神将说找对应的只能找最前面的,所以2对应的a跳过,但是有种情况是前面一排的是否形成对称,对称则取中间。
如P105),所以退一格为1对应的b,即next[j]为1。
同理,可得出后面结果。
总结:
做法是先找X(0~7)对应下字母(a、b、c)前面字母Y1的前面有木有与之对应相同的字母Y2,没有与之对应相同的next[j]为0,有对应相同的则next[j]为退一格的字母上的X(0~7)。
(2)nextval[j]方法:
不要问为什么了!
b、2对应的a的next[j]为0与0对应的a有相同的a,则2对应的a的nextval[j]为0对应的a的next[j]为-1,即2对应的a的nextval[j]为-1。
c、3对应的a的next[j]为1与1对应的b,a和b不同。
则3对应的a的nextval[j]等于3对应的a的next[j]为1。
同理,可得出后面的答案。
做法是先找X(0~7)对应下的(a、b、c)的next[j]为Y,再找到Y和X相等的对应,再看Y和X对应下的字母(a、b、c)是否相同。
相同的,则nextval[j]为X对应下的next[j];
不相同的,则nextval[j]为对应下的next[j]。
(不知道有木有讲清楚。
空格串、空串的概念(非重点,了解)
空格串:
由一个或多个空格组成的串‘’称为空格串,它的长度为串中空格字符的个数。
空串:
就是神马都没有。
串相等的判断条件(非重点,了解)
当且仅当两个串的值完全相等。
第七章广义表
利用广义表的GetHead和GetTail操作写出函数表达式,将原子banana分别从下列广义表中分离出来
(1)L1=(apple,pear,banana,orange)
(2)L2=((apple,pear),(banana,orange))
(3)L3=(((apple),(pear),(banana),(orange)))
(4)L4=(apple,(pear),((banana)),(((orange))))
(5)L5=((((apple))),((pear)),(banana),orange)
(6)L6=((((apple),pear),banana),orange)
(7)L7=(apple,(pear,(banana),orange))
(1)gethead(gettail(gettail(L1)))
(2)gethead(gethead(gettail(L2)))
(3)gethead(gethead(gettail(gettail(gethead(L3)))))
(4)gethead(gethead(gethead(gettail(gettail(L4)))))
(5)gethead(gethead(gettail(gettail(L5))))
(6)gethead(gettail(gettail(gethead(L6))))
(7)gethead(gethead(gettail(gethead(gettail(L7)))))
取表头:
取第一个元素,后面的元素舍去。
(去括号)
取表尾:
除第一个元素以外的元素。
(留括号)
GetHead[(p,h,w)]P
GetTail[(b,k,p,h)](K,P,h)
GetHead[((a,b),(c,d))](a,b)
GetTail[((a,b),(c,d))]((c,d))
广义表的概念(非重点,了解)
定义:
n>
=0个数据元素组成的序列,每个数据元素或但个数据元素简称原子,或依然是一个广义表。
广义表的长度:
最外层包含的元素个数。
广义表的深度:
所有原子数据元素到达根结点的最大值。
当广义表为原子元素时深度为0;
为空表时深度为1;
其他情况的子表的最大深度+1.
(1)A=()
(2)B=(e)
(3)C=(a,(b,c,d))
(4)D=(A,B,C)=((),(e),(a,(b,c,d)))
(5)E=((a,(a,b),((a,b),c)))
第八章树和二叉树
二叉树的性质
性质1:
在一棵非空二叉树的第i层上至多有2i个节点(i>
=0)
性质2:
深度为k的二叉树至多有2k+1-1个节点(k>
=-1)
性质3:
对于一棵非空二叉树,若度为2的节点有n2个,叶子节点有n0个,则有n0=n2+1
性质4:
有n个节点的完全二叉树的深度k为
log2n
性质5:
若对一棵有n个节点的完全二叉树的节点按层的顺序编号,则对任一节点i(0<
=i<
n)有:
a)若i=0,则节点i为根节点,无双亲
若i>
0,则i的双亲节点为(i-1)/2
b)若2i+1<
n,则节点i的左孩子为2i+1
若2i+1>
=n,该节点为叶子节点
c)若2i+2<
n,则节点i的右孩子为2i+2
若2i+2>
=n,则无右孩子
d)节点i所在层数为
log2i+1
一棵完全二叉树有1000个节点
有500个叶子节点
有499个度为2的节点
具有n个节点的完全二叉树中有n/2叶子节点,有n/2-1个度为2的节点
具有n0个叶子节点的完全二叉树中共有2n0个节点或2n0-1个节点
二叉树遍历
前序遍历:
根结点—左子树—右子树
中序遍历:
左子树—根结点—右子树
后序遍历:
左子树—右子树—根结点
例1:
画出满足下列条件的二叉树:
a该二叉树中序遍历DCBGEAHFIJK;
b该二叉树后序遍历DCEGBFHKJIA。
a由后序遍历最后一个A得出为根结点。
b在中序找到A,A左边为左子树,右边为右子树。
(DCBGE)A(HFIJK)。
c后序中前5个DCEGB为左子树,后5个FHKJI为右子树。
(DCEGB)(FHKJI)A
d后序左子树、右子树的最后一个B、I为根结点A的左右子树。
(DC)B(GE)A(HF)I(JK)
e中序B左DC为结点B的左子树,右边GE为结点B的右子树;
同理I的左子树为HF,右子树为JK。
f后序DC的C在后,C为根;
EG的G在后,G为根。
g中序遍历:
左—根—右后序遍历:
左—右—根
则二叉树图自己画~~~~~
例2:
已知一棵二叉树的中序序列:
BDCEAFHG后序序列:
DECBHGFA
请画出这棵二叉树
分析
a由后序遍历特征,根节点必在后序序列尾部
b由中序遍历特征,根节点必在其中间,而且其左部必全部是左子树的子孙,其c右部必全部是右子树的子孙
d子树依此类推
树转换为二叉树、森林转换为二叉树
(1)树转换为二叉树
a兄弟相连:
将同一双亲节点的兄弟节点相连
b长兄为父:
保留节点的最左孩子连线,删除其它孩子连线
c长子靠左,弟弟靠右:
特点:
根节点没有右孩子
节点的最左孩子为左孩子,节点的右兄弟为右孩子
(2)二叉树转换为树:
将所有右孩子变为兄弟
(3)森林转换为二叉树:
首树根为根,余根变兄弟
(4)二叉树转换为森林:
把根的右子树变为森林,其余右子树变为兄弟
具体看课件,P2078-13
理解:
(1)树:
由n(n>
=0)个结点构成的集合。
n=0的树为空树n=1的树只有一个结点,对n>
1的树T有:
A有一个特殊的结点为根节点,根节点没有前驱结点
B除根结点外,其余结点被分成m(m>
0)个互不相交的集合T1,T2,。
。
Tm,其中每个集合Ti(1<
=i<
=m)本身又是一棵结构与树类同的子树。
(2)结点:
包括一个数据元素及若干指向其子树的分支。
结点的度:
结点所拥有的子树的个数。
叶结点:
度为0的结点。
分支结点:
度不为0的结点。
也称非终端结点。
孩子结点:
树中一个结点的子树的根结点称作这个结点的孩子结点。
也称后继结点。
双亲结点:
若树中某结点有孩子结点,则这个结点称作它的孩子结点的双亲结点。
也称直接前驱结点。
兄弟结点:
具有相同的双亲结点的结点。
(3)树的度:
树中所有结点的度得最大值。
结点的层次:
从根结点到树中某结点所经路径上的分支数称为该结点的层次。
树的深度:
树中所有结点的层次的最大值。
有序树——如果树中各结点的各子树从左至右是有序排列,不可互换的,则称该树为有序树,反之为无序树。
森林:
m(m>
=0)棵数的集合。
(4)二叉树:
n(n>
=0)个有限结点构成的集合。
n=0的树称为空二叉树;
n=1的树只有一个根结点;
1的二叉树由一个根结点和至多两个互不相交的、分别称作左子树和右子树的子二叉树构成。
满二叉树:
在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层,则为满二叉树。
完全二叉树:
如果一棵具有n个结点的二叉树的结构与满二叉树的前n个结点的结构相同,称为完全二叉树。
掌握哈夫曼树和哈夫曼编码的构造
(1)在二叉树中,从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。
路径上的分支数目称做结点到结点的路径长度。
树的路径长度是从树根到所有结点的路径长度之和。
(2)树的带权路径长度(WPL):
从二叉树根节点到所有叶子节点的路径长度与相应叶子节点权值的乘积之和。
WPL=1*2+2*3+3*3+4*1=21
一棵有n0个叶子节点的Huffman树,
有个节点
n=n0+n1+n2=2n0-1
Huffman树构造算法:
P194结合课件看例题:
密文。
P2088-26重点
第9章图
图的遍历(深度优先和广度优先)
(1)深度优先
a从图中某个初始顶点v出发,访问初始顶点v
b选择一个与顶点v相邻且没被访问过的顶点w为初始顶点,再从w出发进行深度优先搜索
c直到图中与当前顶点v邻接的所有顶点都被访问过为止
(2)广度优先
a访问初始点vi
b访问vi的所有未被访问过的邻接点vi1,vi2,…,vit
c按vi1,vi2,…,vit的次序,访问每一个顶点的所有未被访问过的邻接点
d依次类推,直到图中所有和初始点vi有路径相通的顶点都被访问过为止
最小生成树
带权无向连通图的所有生成树中边的权值总和最小的生成树
构造最小生成树的准则:
1.必须包括n个顶点
2.必须使用且仅使用图中的n-1条边来连接图中的n个顶点
3.不能产生回路
普利姆算法、克鲁斯卡尔算法见书本P229、P234和课件题目。
最短路径
a从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同,即路径长度不同,将路径长度最短(即经过的边数最少)的那条路径称为最短路径,其路径长度称为最短路径长度或最短距离
b考虑路径上各边上的权值,则通常把一条路径上所经边的权值之和定义为该路径的路径长度或称带权路径长度
c考虑路径上各边上的权值,则通常把一条路径上所经边的权值之和定义为该路径的路径长度或称带权路径长度
重点看课件和书P235以后。
拓扑排序结合课件例题看
设G=(V,E)是一个具有n个顶点的有向图
V中顶点序列v1,v2,…,vn称为一个拓扑序列,当且仅当该顶点序列满足下列条件:
若<
vi,vj>
是图中的边,则在序列中顶点vi必须排在顶点vj之前
在一个有向图中找一个拓扑序列的过程称为拓扑排序
拓扑排序方法
1.从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它
2.从网中删去该顶点,并且删去从该顶点发出的全部有向边
3.重复上述两步,直到剩余的网中不再存在没有前驱的顶点为止
a有n(n-1)条边的无向图称为完全图,有n(n-1)条弧的有向图称为有向完全图。
b连通图和强连通图:
无向图G,如果从顶点vi到顶点vj有路径,则称vi和vj是连通的。
如果对于无向图G中任意两个顶点vi,vj∈V,vi和vj都是连通的,则称G是连通图。
在有向图中,若如果对于每一对vi,vj∈V,vi≠vj,从vi到vj和从vj到vi都存在路径,则称G是强连通图。
c在图G=(V,E)中,若从结点vi出发有一组边(或弧)可到达结点vj,则称结点vi到vj的结点序列为从结点vi到vj的路径。
d回路——在路径中,第一个结点和最后一个结点相重合的路径叫回路或叫环
e简单路径——在路径中,序列中各结点不重复出现的路径叫简单路径
f简单回路——除了第一个结点和最后一个结点外,其余结点都不重复出现的回路叫简单回路(或简单环)
g如果无向连通图是一个带权图,那么他所有生成树必有一棵边得权值总和最小的生成树,我们称这棵树为最小生成树。
第十章排序结合课件看以下排序的例题
(1)希尔排序
1.把整个待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序
2.小组的个数逐次缩小,当完成了所有数据元素都在一个组内的排序后排序过程结束
3.小组的构成不是简单地“逐段分割”,而是将相隔某个增量span的记录组成一个小组,让增量span逐趟缩短(如依次取5,3,1),
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 豪华 精简 资料