数据结构基本概念和术语总结

代码链接


基本概念

数据(data)—能输入到计算机中并被计算机处理的符号的总称

数据元素(data element)—数据的基本单位,也称节点(node)或记录(record)

数据项(data item)—有独立含义的数据最小单位
,也称域(field)

数据对象(Data Object)—性质相同的数据元素的集合。

数据结构(data structure)—相互之间存在一种或多种特定关系数据元素的集合。(带有结构的数据元素的集合)

(集合):数据元素间除“同属于一个集合”外,无其它关系

线性结构:一对一,如线性表、栈、队列

树形结构:一对多,如树

图状结构:多对多,如图

数据的逻辑结构—只抽象反映数据元素的逻辑关系

数据的存储(物理)结构—数据的逻辑结构在计算机存储器中的实现

数据的逻辑结构与存储结构密切相关
算法设计------>逻辑结构
算法实现------>存储结构


抽象数据类型

抽象数据类型(ADT)—是指一个数学模型(数据结构)以及定义在该数学模型(数据结构)上的一组操作

抽象数据类型的三元组表示
抽象数据类型={D,S,P}
D是数据对象;
S是D上的关系集;
P是对D的基本操作集

在这里插入图片描述

算法和算法分析

算法特性:

1.有穷性—一个算法必须在执行有限步骤之后结束

2.确定性—算法的每一步必须是确切定义的,不能产生二义性,并且算法只有唯一的一条执行路径

3.可行性—算法是能行的,通过已经实现的基本运算执行有限次来是实现

4.输入—一个算法有零个或多个输入

5.输出—一个算法至少有一个输出

算法的评价—衡量算法优劣的标准:

1.正确性—算法应该满足特定的“规格说明”方式给出的需求

2.可读性—算法主要是为了人的阅读和交流,其次才是为计算机执行。

3.健壮性—当输入的数据非法时,算法应当做出反映或进行相应的处理

4.算法的高效性与低存储量需求
时间开销—时间复杂度
空间开销—空间复杂度

时间复杂度的计算方法:

1.找出频度最大的基本操作;

2.计算最坏情况平均情况下语句的频度;
最坏时间复杂度平均时间复杂度

3.最后的函数中去掉常量及阶小的项。

ps:时间复杂度有“平均时间复杂度”和“最坏时间复杂度”之分,两者可能一致也可能不一致。

线性表

定义:
零个或多个数据元素的有限序列
线性表有序序列,数据元素具有相同的特性,线性表可以有无性

线性结构特点
1.有序性
数据元素之间是(一对一)的关系
2.有限性
线性表的元素个数是有限的
ps 零个数据元素线性表叫空表

存在唯一的一个被称作“第一个”的数据元素
存在唯一的一个被称作“最后一个”的数据元素
除第一个外,集合中的每个数据元素均只有一个前驱
除最后一个外,集合中的每个数据元素均只有一个后继

顺序表:
定义:用一组地址连续的存储单元依次存放一个线性表的元素。

顺序存储结构的优缺点:

优点:

1.逻辑相邻,物理相邻
2.可随机存取任一元素
3.存储空间使用紧凑

缺点:

1.插入、删除操作需要移动大量的元素
2.预先分配空间需按最大空间分配,利用不充分
3.表容量难以扩充

链表:
定义:用一组地址任意的存储单元存放线性表中的数据元素

单链表的优缺点:

优点:

1.它是一种动态结构,整个存储空间为多个链表共用
2.不需预先分配空间
3.删除插入快

缺点:

1.不能随机存取,查找速度慢
2.指针占用额外存储空间

循环链表(circular linked list)

循环链表是表中最后一个结点的指针指向头结点,使链表构成环状

特点:从表中任一结点出发可找到表中其他结点,提高查找效率

操作与单链表基本一致,循环条件不同(判最后一个结点):
单链表 p->next=NULL
循环链表 p->next=head

空链表示意图:
在这里插入图片描述
非空链表示意图:
在这里插入图片描述
双向链表(double linked list)

双向链表支持两个方向,每个节点有一个后继指针next指向后面的节点,还有一个前驱指针指向前面的节点
在这里插入图片描述

栈&&队列

定义:
栈(stack) 是一个后进先出的线性表(LIFO),他要求只在表尾进行删除和插入操作
队列(queue)是只允许在一端进行插入,在另一端进行删除操作的线性表,和栈不同的是,队列先进先出(FIFO);

定义
树(tree)是n( n ≥ 0 n\geq0 n0)个结点的有限集。当n=0是为空树。
在任意一棵非空树中:
1.有且只有一个称为根(root)的结点。

2.当n>1时,其余结点可分为m(m>0)个互不相交的有限集,每一个集合本身也是一棵树,称为根的子树。

结点拥有的子树数称为结点的度,树的度取树内的各结点的度的最大值
1.度为0的结点称为叶结点(leaf)或终端结点

2.度不为0的结点称为分支结点或非终端结点,除根结点外,分支结点也称为内部结点

树中结点的最大层次称为树的深度(depth)或高度

二叉树

二叉树(binary tree)每个结点最多(不是一定)有两个子树,所以二叉树中不存在度大于2的结点。
基本形态
1.空二叉树
2.只有一个根结点
3.根结点只有左子树
4.根结点只有右子树
5.根结点既有左子树也有右子树

特殊二叉树

斜树
每个结点只有左儿子(左斜树)或者右儿子(右斜树)

满二叉树
所有的分支节点都有左子树和右子树,并且所有叶子在同一层上,这样的二叉树称为满二叉树。
1.叶子只能出现在最下一层
2.非叶子结点的度一定是2
3.在同样深度的二叉树中,满二叉树的结点个数一定是最多,同时叶子也是最多

完全二叉树
设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
1.叶子结点只能出现在最下两层
2.最下层的叶子一定集中在左部连续位置
3.倒数第二层若有叶子结点,一定都在右边连续位置
4.如果结点的度为1,那么该结点只有左儿子
5.同样结点树的二叉树,完全二叉树的深度最小

ps:完全二叉树不一定是满二叉树,满二叉树一定是完全二叉树

二叉树性质

1.在二叉树的第i层上至多有2i+1个结点( i ≥ 1 i \ge 1 i1
2.深度为k的二叉树至多有2k-1个结点( k ≥ 1 k\ge 1 k1
3.对任意一棵二叉树,如果其终端结点树为 n 0 n_0 n0,度为2的结点树为 n 2 n_2 n2,则 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
4.具有n个结点的完全二叉树的深度为 ⌊ log ⁡ 2 n ⌋ \left \lfloor \log_2n \right \rfloor log2n+1(向下取整)
5.如果对一个有n个结点的完全二叉树(深度 ⌊ log ⁡ 2 n ⌋ \left \lfloor \log_2n \right \rfloor log2n+1)的结点按层序编号,对任意结点i(1<=i<=n)有以下性质

(1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则双亲的结点是 ⌊ i 2 ⌋ \left \lfloor \frac i2 \right \rfloor 2i
(2)如果2i>n,则结点i无左儿子(结点i就是叶子结点);否则左儿子为结点2i
(3)如果2i+1>n,则结点i无右儿子;否则右孩子是结点2i+1

线索二叉树

充分利用二叉链表中的空链域,将遍历过程中结点的前驱、后继信息保存下来。
1.若结点有左子树,则其 LChild 域指向其 左孩子,否则 LChild 域指向其 前驱结点。
2.若结点有右子树,则其 RChild 域指向其 右孩子,否则 RChild 域指向其 后继结点。
在这里插入图片描述

定义

图(graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中的顶点的集合,E是图G中边的集合。

注意点:

1.线性表可以没有元素,称为空表,树中没有结点,叫做空树,而图结构强调顶点集合V要有穷非空

2.线性表中,相邻的数据元素之间有线性关系,数据结构中,相邻两层的结点具有层次关系,而图结构中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的

无向边:若顶点 v i v_i vi v j v_j vj之间的边没有方向,则称这条边为无向边(edge),用无序偶( v i , v j v_i,v_j vi,vj)来表示。

有向边:若顶点 v i v_i vi v j v_j vj之间的边方向,则称这条边为有向边,也称为弧(arc),用无序偶< v i , v j v_i,v_j vi,vj>来表示, v i v_i vi称为弧尾, v j v_j vj称为弧头。

简单图:在图结构中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。

无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。含有n个顶点的无向完全图有n*(n-1)/2条边。

有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。含有n个顶点的无向完全图有n*(n-1)条边。

稀疏图和稠密图:这里的稀疏和稠密是模糊的概念,都是相对而言的,通常认为边或弧数小于n* log ⁡ n \log n logn(n是顶点的个数)的图称为稀疏图,反之称为稠密图。

:有些图的边或者弧带有与它相关的数字,这种与图的边或弧相关的数叫做权(weight),带权的图通常被称为网(networt)

子图:假设有两个图G1=(V1,E1)和G2=(V2,E2),如果V2 ⊆ \subseteq V1,E2 ⊆ \subseteq E1,则称G2为G1的子图(subgraph)

图的顶点和边之间的关系:

1.对于无向图G=(V,E),如果边(V1,V2) ⊆ \subseteq E,则称顶点V1和V2互为邻接点(adjacent),即V1和V2相邻接。边(V1,V2)依附(incident)于顶点V1和V2,或者说边(V1,V2)与顶点V1和V2相关联
顶点V的(degree)是和V相关联的边的数目,记为TD(V)。

2.对于有向图G=(V,E),如果边<V1,V2> ⊆ \subseteq E,则称顶点V1邻接到顶点V2,顶点V2邻接自顶点V1。

以顶点V为头的弧的数目称为V的入度(indegree),记为ID(V);以顶点V为尾的弧的数目称为V的出度(outdegree),记为OD(V),因此顶点V的度为TD(V)=ID(V)+
OD(V)。

无向图G=(V,E)中从顶点V1到顶点V2的路径(path)
路径的长度是路径上的边或弧的数目。

简单回路或简单环:第一个顶点到最后一个顶点相同的路径称为回路或环(cycle)

简单回路或简单环:序列中顶点不重复出现的路径称为简单路径,除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环

连通图:在无向图G中,如果从顶点V1到顶点V2有路径,则称V1和V2是连通的,如果对于图中任意两个顶点 V i , V j V_i,V_j Vi,Vj是连通的,则称G是连通图(connectedgraph)

强连通图:在有向图G中,如果对于每一对顶点 V i , V j V_i,V_j Vi,Vj都存在路径,则称G是强连通图

强连通分量:有向图中的极大强连通子图称为有向图的强连通分量

图的生成树:一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵数的n-1条边。

有向树:如果一个有向图恰有一个顶点入度为0,其余顶点的入度为1,则是一棵有向树。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值