数据结构最新考研知识点完全贴合大纲.docx
- 文档编号:24432647
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:52
- 大小:1.75MB
数据结构最新考研知识点完全贴合大纲.docx
《数据结构最新考研知识点完全贴合大纲.docx》由会员分享,可在线阅读,更多相关《数据结构最新考研知识点完全贴合大纲.docx(52页珍藏版)》请在冰豆网上搜索。
数据结构最新考研知识点完全贴合大纲
数据结构知识点
基本概念
1.数据
能被计算机识别、存储和加工处理的信息的载体。
2.数据元素
数据的基本单位,可由若干个数据项组成。
例如,一本书的书目信息为一个数据元素,而书目信息的每一项(如书名,作者名等)为一个数据项。
3.数据结构
数据之间的相互关系,即数据的组织形式。
它包括三个要素:
数据的逻辑结构(数据之间的逻辑关系)、数据的存储结构(数据在计算机中的存储方式)和数据的运算。
4.数据的逻辑结构
1线性结构:
若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
栈、队列等都是线性结构。
2非线性结构:
一个结点可能有多个直接前趋和直接后继。
数组、广义表、树和图等数据结构都是非线性结构。
5.数据的存储结构
1顺序存储
借助数据在连续的存储空间中的相对位置表示元素
关系,通常用数组描述。
2链接存储
借助数据元素的存储地址的指针表示元素关系。
索引存储
储存结点信息的同时,建立附加索引表,。
索引表由若干索引项组成。
索引项的一般形式是:
(关键字、地址)。
有稠密索引和稀疏索引。
④散列存储
按结点的关键字直接计算出存储地址
第一章栈、队列和数组
一、栈和队列的基本概念
1.栈(Stack)
1.1概念
1栈是仅在表的一端进行插入和删除运算的线性表,
又称栈为LIFO表(LastInFirstOut)。
栈的修改是按后进先出的原则进行的。
2称插入、删除这一端为栈顶,另一端称为栈底。
表中无元素时为空栈。
通常栈有顺序栈和链栈两种存储结构。
1.2栈的基本运算
构造空栈:
InitStack(S)判栈空:
StackEmpty(S)判栈满:
StackFull(S)进栈:
Push(S,x)退栈:
Pop(S)取栈顶元素:
StackTop(S)
2队列(Queue)
2.1概念
①队列是一种运算受限的线性表,又称作FIFO表
(FirstInFirstOut),插入在表的一端进行,而删除在表的另一端进行,队列的操作原则是先进先出的。
②允许删除的一端称为队头(front),允许插入的一端称为队尾(rear),队列也有顺序存储和链式存储两种存储结构。
2.2队列的基本运算
置空队:
InitQueue(Q)
判队空:
QueueEmpty(Q)
判队满:
QueueFull(Q)
入队:
EnQueue(Q,x)
出队:
DeQueue(Q)
取队头元素:
QueueFront(Q)
二、栈和队列的顺序存储结构
1.栈的顺序存储结构
1.1概念
①开辟一组地址连续的存储单元,依次存放自栈底到栈顶的数据元素。
设top指针指示栈顶元素的当前位置。
基本操作
栈示意图:
新元素入栈顶时:
先入栈,
②当栈满时,做进栈运算必定产生空间溢出,称“上溢”当栈空时,做退栈运算必定产生空间溢出,称
“下溢”。
上溢是一种错误应设法避免,下溢常用作程序控制转移的条件。
1.2基本运算
1新元素入栈顶时:
先入栈,再移指针top=top+1
2删除元素时:
先移指针top=top-1,后删栈顶元素
3栈的长度:
top-base
2.队列的顺序存储结构
2.1概念
①用一组地址连续的存储单元依次存放从队
rear
front
Maxsize-10
头到队尾的元素。
设队头指针为front,指向队头元素队尾指针为rear,指向队尾元素的下一个位。
当front=rear=0,表示空队列。
2顺序队列中存在“假上溢”现象,由于入队和出队操作使头尾指针只增不减导致被删元素的空间无法利用,队尾指针超过向量空间的上界而不能入队。
3将队列的头、尾相连形成一个环,构成循环队列。
并引入数学中的模运算计算队头和队尾指针。
2.2基本运算
①入队操作:
Q.base[Q.rear]=x;
an
a2
al
A
最迟入栈元
最早入栈兀
Q.rear=(Q.rear+1)%MAXQSIZE;
②出队操作:
x=Q・base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
、栈和队列的链式存储结构
1.栈的链式存储结构1.1概念
采用链式存储结构称链栈,并由其栈顶指针惟一确
设Is为栈顶指针,栈=(a1,a2,…,an),a1为栈底元素,an为栈顶元素。
1.2基本运算
①建栈。
Voidinitstack(linkstack*s){
s->top=NULL;
}
2判栈空。
Intstackempty(linkstack*s)
{
returns->top==NULL;
}
3进栈。
Voidpush(linkstack*s,datatypex)
{
stacknode*p=(stacknode*)malloc(sizeof(stacknode));
p->data=x;
p->next=s->top;
s->top=p;
}
4退栈。
Datatypepop(linksatck*s)
{
datatypex;
stacknode*p=s->top;
if(stackempty(s))
error(“stackunderflow);
x=p->data;
s->top=p->next;
free(p);
returnx;
}
5取栈顶元素。
Datatypestacktop(linkstack*s)
{
if(stackempty(s))
error(“stackisempty);
returns->top->data;
}
2.队的链式存储结构
2.1概念
用链表示的队列简称为链队列。
设两个指针front、
an
A
rear分别指示队头和队尾。
为了链队列的操作方便,增加一个头结点,front指向头结点,rear指向队尾元素。
如图所示:
al
头结点臥头元素队尾元索
2.2基本运算
1建空队
Voidinitqueue(linkqueue*q)
{
q->front=q->rear=NULL;
}
2判队空。
Intqueueempty(linkqueue*q)
{
returnq->front==NULL&&q->rear==NULL;
}
3入队。
Voidenqueue(linkqueue*q,datatypex)
{
queuenode*p=(queuenode
*)malloc(sizeof(queuenode));
p->data=x;
p->next=NULL;
if(queueempty(q))
q-front=q->rear=p;
else{
q->rear->next=p;
q->rear=p;
}
}
4出队。
Datatypedequeue(linkqueue*q){
datatypex;
queuenode*p;if(queueempty(q))error(“queueisunderflow);
p=q->front;
x=p->data;q->front=p->next;if(q->rear==p)q->rear=NULL;free(p);
returnx;
}
5取队头元素。
Datatypequeuefront(linkqueue*q){
if(queueempty(q))error(“queueisempty);
returnq->front->data;}
第二章树与二叉树
一、树的基本概念
1.树是n个结点的有限集合,非空时必须满足:
只有
一个称为根的结点;其余结点形成m个不相交的子
集,并称根的子树。
2.树的表示方法:
①树形表示法;②嵌套集合表示法;
3凹入表表示法;④广义表表示法;
3.—个结点拥有的子树数称为该结点的度;一棵树的度是指树中结点最大的度数。
4.度为零的结点称叶子或终端结点;度不为零的结点称分支结点或非终端结点
5.根结点称开始结点,根结点外的分支结点称内部结
占・
八、、5
6.树中某结点的子树根称该结点的孩子;该结点称为孩子的双亲;
7.树中存在一个结点序列K1,K2,…Kn,使Ki为Ki+1的双亲,则称该结点序列为K1到Kn的路径或道路;
8.树中结点K到Ks间存在一条路径,则称K是Ks的祖先,Ks是K的子孙;
9•结点的层数从根算起,若根的层数为1,则其余结点层数是其双亲结点层数加1;双亲在同一层的结点
互为堂兄弟;树中结点最大层数称为树的高度或深
度;
10.树中每个结点的各个子树从左到右有次序的称有序树,否则称无序树;
11.森林是m棵互不相交的树的集合。
二、二叉树
1.二叉树的定义及其主要特性
1.1定义
1树中每个结点至多有两棵子树,且子树有序。
2满二叉树是一棵深度为k,结点数为2k-1的二叉树;
3完全二叉树是至多在最下两层上结点的度数可以小于2,并且最下层的结点集中在该层最左的位置的二叉树。
1.2二叉树的五种基本形态
(1)空二叉树
(2)只有-个根结点
1.3二叉树的主要特性
1二叉树第i层上的结点数最多为2i-1;
2深度为k的二叉树至多有2k-l个结点;
3在任意二叉树中,叶子数为no,度为2的结点数为
n2,贝Uno=n2+1;
1.4满二叉树与完全二叉树
1满二叉树
深度为k,且有2k-1个结点。
(对满二叉树中的结点约定编号:
自根起,从上到下,从左到右)
2完全二叉树
仅允许最下层右侧分支不满,若按从上到下,从左到右为树中结点编号,则与满二叉树相同。
二者关系:
满二叉树是完全二叉树。
完全二叉树不一定是满二叉树
1.5完全二叉树性质
1n个结点,深度为K的完全二叉树,其K=log2N+1
2对一棵n个结点深度为K的完全二叉树上的结点按
层次编码(从第一层到第K层,从左到右),则树中编
号为啲结点(1v=iv=n)有:
a:
当i=1时,此点是根;
b:
当i>1时,i的双亲是i/2;
c:
当2i>n时,i是叶点(无左孩子);当2i<=n时,2i
是i的左孩子;
d:
当2i+1>n时,i结点无右孩子;当2i+1v=n时,2i+1是i的右孩子。
2.二叉树的顺序存储结构和链式存储结构
2.1顺序存储结构
用一维数组A作为二叉树的存储结构,A[i]表示编号
为i的结点。
各个结点编号间的关系:
1i=1是根结点;i>1则双亲结点是i/2取整;
2左孩子是2i,右孩子是2i+1;(要小于n)
3i>(n/2取整)的结点是叶子;
4奇数没有右兄弟,左兄弟是i-1;偶数没有左兄弟,右兄弟是i+1。
01234
站A
A
B
C
特点:
浪费存储空间
特例:
深度为K,只有K个结点的单支树需要2K・1个存储单元。
(由二叉树的性质2知,深度为K的二叉树至多有2K-1个结点)o而真正有用的只有K个空间,其它绝大多数空间是空闲的。
造成了存储空间的极大浪费。
但顺序存储结构适用于完全二叉树特点:
即不浪费空间,又可以快速确定其结点的位置;对已
知的结点i,其左孩子为2i,右孩子为2i+1,双亲为
i/2
2.2链式存储结构
链表中每个结点至少含有三个域:
数据域、左指针域和右指针域。
指向左孩子指向右孩子t
3.二叉树的遍历
根据访冋结点的次序不同可分为:
先序遍历(前序遍历或先根遍历),中序遍历(或中根遍历)、后序遍历(或后根遍历)。
遍历线索二叉树。
时间复杂度为0(n)。
先序:
先访问根结点,然后访问左子树,再访问右
子树
中序:
先访问左子树,然后访问根结点,再访问右子树。
后序:
先访问左子树,然后访问右子树,再访问根结点。
例4
:
ABCDEFGHIJK
:
CEDFBGAIKJH
例2;已知先序、中序可以惟一确定一棵二叉树
已知:
中序:
GDHBAECIF
先序:
ABDGHCEFI
:
EFDCGBKJIHA
例力已知中序、后序可以惟一确定一棵二叉树
已知:
屮序’DBGEAHFIC
后序:
DGEBHIFCA
4.线索二叉树的基本概念和构造
4.1概念
利用二叉链表中的n+1个空指针域存放指向某种遍历次序下的前趋和后继结点的指针,这种指针称线索。
加线索的二叉链表称线索链表。
相应二叉树称线索二叉树。
4.2构造
(1)增加两个标志位
每个标志位仅占1个存储位(bit)
结点结构:
lchild
LTag
data
RTag
rchild
若LTag=O(Link),则lchild指向左孩子;
RTag=O(Link),则rchild指向右孩子;
若LTag=l(Thread),则lchild指向线索——前趋;
RTag=l(Thread),则rchild指向线索后继。
带头结点的中序线索链表:
、树和森林
1.树的存储结构
1双亲表示法(顺序存储结构):
开辟一组连续空间存储树的结点,每个结点中附设一个指示双亲结点的双亲域。
A
B
C
D
E
•1
0
0
0
3
Data:
Parent:
01234
特点:
找结点双亲容易,但找孩子不容易
2孩子表示法(链式存储结构):
A.按树的度设结点指针域。
特点=
每个结点的结构一致,操作简单,但浪费存储空间
B.按结点的度设结点指针域
特点2
每个结点的结构不-致,操作复杂,但节省存储空间。
C.按孩子结点排成线性表
特点=
节省空间.
操作也较容易;
问题2
这种结构不能反映出树的层次性特征。
每个结点的孩子链表
3孩子兄弟表示法(二叉树表示法):
在这种表示法中,树中每个结点有三个域。
数据域:
存放结点数据
左指针域:
指向该结点的第一个孩子结点
右指针域:
指向该结点的右兄弟结点
/
data
fchnsib
特点=
便于实现树的冷种操作,肖省空间,并且能够描述树的层次结构。
2.森林与二叉树的转换
二叉树和树都可以用二叉链表作为其存储结构。
因此,以二叉链表作为中间介,可以导出树与二叉树之间存在对应关系。
一棵树与惟一的一棵二叉树一一对应。
2.1树转换成二叉树
1保持双亲和第一个孩子连线,其他连线去掉;
2兄弟之间连线;
3使右兄弟结点成为右孩子,使第一个孩子成为左孩子。
2.2森林转换为二叉树
1将每棵树转化为二叉树;
2将各棵二叉树的根相连;
3使二叉树的根成为右孩子。
2.3二叉树转换成森林
1若某结点是其父结点的左孩子,则把该结点的右孩
子、右孩子的右孩子、,都与该结点的父结
点用线线连;
2去掉树中所有父结点到其右孩子的连线,生成森林。
3.树和森林的遍历
3.1树的遍历
1先根遍历
先访问树根,再依次先根遍历根的每棵子树。
2后根遍历
先依次后根遍历根的每棵子树,再访问树根。
例:
先根:
ABCEFD后根:
BEFCDA
先序:
ABCEFD中牙:
BEFCDA
结论:
树的先根遍历相当于其转化的二叉树的先序遍历:
树的后根遍历相当于其转化的二叉树的中序遍历;
先序:
ABCDEF
3.2森林的遍历
先序(先根)遍历森林
化访问第一棵树的树根;
乩先序遍历第棵树根的子树森林;
u先序遍历除第一棵树之后,剩余的树构成的森林
中序(后根)遍历森林
A.中序遍历森林中第一棵树的根结点的子树森林;
B.访问第棵树的根结点:
C.中序遍历除第一棵树之后剩余的树构成的淼林。
中序:
BCDAFE
例:
先根:
ABCDEFGHJIK(二叉树的先序)后根:
BADEFCJHKIG(二叉树的中庙)
森林转化的二叉树:
四、树与二叉树的应用
1.概念:
1树的路径长度是从树根到每一结点的路径长度之
和。
将树中的结点赋予实数称为结点的权。
2结点的带权路径是该结点的路径长度与权的乘积。
树的带权路径长度又称树的代价,是所有叶子的带权路径长度之和。
带权路径长度最小的二叉树称最优二叉树(哈夫曼树)。
3具有2n-1个结点其中有n个叶子,并且没有度为1的分支结点的树称为严格二叉树。
4对字符集编码时,要求字符集中任一字符的编码都不是其它字符的编码前缀,这种编码称前缀码。
◎字符出现频度与码长乘积之和称文件总长;字符出现概率与码长乘积之和称平均码长;
6使文件总长或平均码长最小的前缀码称最优前缀
码
7利用哈夫曼树求最优前缀码,左为0,右为1。
编码平均码长最小;没有叶子是其它叶子的祖先,不可能
出现重复前缀。
例:
给定四个叶子结点弧b、ddt分别带权0.1、0.K0.4、64*由它们构成不同的带权二叉树,分别求WP—
2■哈夫曼树构造算法)
1
根据给定的n个权值{w1,w2,…,wn}构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树为空。
2在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为左右子树上根结点的权值之和。
3在F中删除这两棵树,同时将新得到的二叉树加入F中。
4重复②和③,直到F只含一棵树为止。
这棵树便是哈夫曼树。
3.前缀码
给定一个码的集合序列,若没有一个序列是另一个序
列的前缀,则称这个集合中的码为前缀码。
例:
{000,00bOb10,11}询细刈
乂容易翻译。
[0,I,10,11}——不是前缀码特点:
前缀码是码长不等的编码,既可以缩短报文的长度'
第四章图
一、图的基本概念
1.图:
图G是由顶点集V和边集E组成,顶点集是有穷非空集,边集是有穷集;
2.G中每条边都有方向称有向图;有向边称弧;边的始点称弧尾;边的终点称弧头;G中每条边都没有方向的称无向图。
3.顶点n与边数e的关系:
无向图的边数e介于
0~n(n-1)/2之间,有n(n-1)/2条边的称无向完全图;有向图的边数e介于0~n(n-1)之间,有n(n-1)条边的称有向完全图;
4.无向图中顶点的度是关联与顶点的边数;有向图中
顶点的度是入度与出度的和。
所有图均满足:
所有顶点的度数和的一半为边数。
5.图G(V,E),如V是V的子集,E'是E的子集,且E中关联的顶点均在V'中,则G(V',已是G的子图。
6.在有向图中,从顶点出发都有路径到达其它顶点的图称有根图;
7.在无向图中,任意两个顶点都有路径连通称连通图;极大连通子图称连通分量;
8.在有向图中,任意顺序两个顶点都有路径连通称强
连通图;极大连通子图称强连通分量;
9.将图中每条边赋上权,则称带权图为网络
二、图的存储及基本操作
1.邻接矩阵表示法
用一维数组存储图中顶点的信息;
用矩阵(二维数组)表示图中各顶点之间的相邻关系
(1)邻接矩阵的定义
图G二(叽E)」个顶点,邻接矩阵用A[1…入I…n]存放:
A[i][j]=fl若<vifvj>或Wi,vj)eE,i幻
10否则
对带权的图:
A[i][j]二prij若<vitvj>或(vi,vj)eE,i±j,且权为wij
So否则
2.邻接表法
头结点翠表结点=
构造方法:
与同一顶点邻接的所有邻接点构成一个单链表,用表结点描述;
各链表设置表头结点,由头结点描述;各表头结点构成一个顺序表。
(2)有向图的邻接表及其逆邻接表
邻接表(出度表):
结点结构同无向图。
以#i为顶点的邻接点单链表上的结点都是以门为弧尾的邻接点。
顺序表部分定义同无向图的邻接表。
逆邻接表(入度表):
结点结构同无向图-
以门为顶点的邻接点单链表上的结点都是以vi为弧头的邻接点。
顺序表部分定义同无向图的邻接表。
3.邻接矩阵表示法与邻接表表示法的比较
1邻接矩阵是唯一的,邻接表不唯一;
2存储稀疏图用邻接表,存储稠密图用邻接矩阵;
3求无向图顶点的度都容易,求有向图顶点的度邻接矩阵较方便;
4判断是否是图中的边,邻接矩阵容易,邻接表最坏时间为0(n);
5求边数e,邻接矩阵耗时为O(n2),与e无关,邻接表的耗时为O(e+n);
三、图的遍历
1.深度优先搜索(DFS搜索策略:
访问当前顶点vi,寻找与vi相邻且未被访问顶点vj,若存在,将其作为当前点,访问,并重复上述搜寻过程。
否则(所有邻接点都被访问过),退回一步,寻找与前一个顶点相邻的未被访问顶点,访问,并重复上述过程。
若上述过程无法访问图中的所有顶点,则另选一个新顶点重新开始。
深度优先搜索是一种纵向搜索的过程。
2.广度优先搜索(BFS
访问出发点vO,依次访问v0的各个未曾访问过的邻接点,然后分别从这些邻接点出发重复上述过程。
若上述过程无法访问图中的所有顶点,则另选一个新顶点重新开
始。
广度优先搜索是一种横向搜索的过程。
使用队列结构。
四、图的基本应用
1.概念
1将没有回路的连通图定义为树称自由树。
2生成树:
连通图G的一个子图若是一棵包含G中
所有顶点的树,该子图称生成树。
有DFS生成树和
BFS生成树,BFS生成树的高度最小。
非连通图生成的是森林。
3最小生成树:
连通网G=(V,E),边是带权的,因而G的生成树的各边也是带权的。
将生成树的各边的权
值总和称为生成树的权,并把权最小的生成树称为G
的最小生成树。
例:
用Prim算法求最小生成树
连通图如下所示:
例:
用克鲁斯卡尔算法求最小生成树
连通图如下所示:
2.最短路径
路径的开始顶点称源点,路径的最后一个顶点称终点。
单源最短路径问题
给定带权自向图,求从指定源点到图中其余各点的最短蹄径。
3.拓扑排序
3.1概念
AOV网:
顶点表示活动,弧表示活动间的优先关系的有向图。
在无回路的AOV网中,所有的活动可以排成一个线性序列,使得每个活动的所有前驱活动都排在该活动的前边,称此序列为拓扑序列,由AOV网构成拓扑序列的过程称为拓扑排序。
3.2拓扑排序算法思想
选择有向图中入度为0的顶点输出,并从图中删去该点相邻弧;
重复上述操作,直到图中全部顶点均被输出或图中已不存在入度为0的顶点(有回路)。
第五章动态查找
一、平衡二叉树(AVL树)
1.基本概念
1查找的同时对表做修改操作(如插入或删除)则相应的表称之为动态查找表,否则称之为静态查找表。
2衡量一个查找算法次序优劣的标准是在查找过程
中对关键字需要执行的平均比较次数(即平均查找长度ASL).
3平衡二叉树(AVL树),或为空树,或为如下性质的二叉排序树:
左右子树深度之差的绝对值不超过1;左右子树仍然为平衡二叉树.
平衡因子BF=左子树深度-右子树深
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 最新 考研 知识点 完全 贴合 大纲