之前学习了一些集合,映射的知识点,在此做一个小总结。
集合
c++中的集合(set)是STL(标准模板库)提供的一种关联容器,用于存储唯一元素的集合。它的头文件是#include<set>,具有以下特性:
- 唯一性:集合中不允许存在两个相同的元素。
- 自动排序:元素总是按照特定的排序规则自动排序。
- 类型相同:同一个集合中的元素数据类型相同。
使用c++的set集合的部分使用方法如下:
1) set <int> ds:建立一个名字叫作ds的、元素类型为int的集合。
2) ds.insert(x):在集合中插入一个元素,如果这个元素已经存在,则什么都不干。
3) ds.erase(x):在集合中删除元素x,如果这个数不存在,则什么都不干。
4) ds.erase(it):删除集合中地址为it的元素。
5) ds.end():返回集合中最后一个元素的下一个元素的地址。不过这个很少直接使用,而是配合其他方法进行比较,以确认某个元素是否存在。
6) ds.find(x):查询x在集合中的地址,如果这个数不存在,则返回 ds.end()。
7) ds.lower_bound(x):查询不小于x的最小的数在集合中的地址,如果这个数不存在,则返回ds.end()。
8) ds.upper_bound(x):查询大于x的最小的数在集合中的地址,如果这个数不存在,则返回ds.end()。
9) ds.emplty():如果集合是空的,则返回1,否则返回0。
10) ds.size():返回集合中元素的个数。
映射
C++中的映射(Map)是一种STL(标准模板库)提供的关联容器,它存储的元素是由键值(key)和值(value)组成的键值对(pair)。它的头文件是#include<map>,具有以下特性:
- 每个键(key)在映射中只能出现一次。
- value可以重复。
- 每个value都有一个对应并且唯一的key。
使用c++的map映射的部分使用方法如下:
1) map <A, B> ds:建立一个名字叫作ds、下标类型为A, 元素类型为B的映射表,例如map<string, int> 就是一个将 string 映射到int的映射表。
2) ds [A]=B:把这个“数组”中下标为A的位置的值变成B,这里下标可以是任意类型,不一定限定为大于0的整数,比如 map<string, string> ds,就可以进行ds ["kkksc03”]="mascot"的操作。
3) ds [AJ;访问这个“数组”中下标为A的元素,比如可以进行 cout《《 ds["kkksc03"]《endl;这样的操作。
4)ds.end():返回映射表中最后一个元素的下一个元素的地址。这个很少直接单独使用、而是配合其他方法进行比较,以确认某个元素是否存在。
5) ds.find(x):查询x在映射表中的地址,如果这个数不存在,则返回 ds.end()。
6) ds.empty():如果映射表是空的,则返回1,否则返回0。
7) ds.size():返回映射表中的元素个数。
8) ds.erase(A):删除这个“数组”中下标为A的元素。注意:在使用 ds [A]访问“数组”下标为A的元素时,如果这个下标对应的元素不存在,则会自动创建下标为A、值为默认值(例如,所有数值类型的默认值是0, string 字符串是空字符串)的元素。
树
定义
树是一种重要的非线性数据结构,由节点(Node)和边(Edge)组成,是一种通过边连接的节点的集合。树的最顶层节点称为根,每个树有且仅有一个根节点(Root),而其下面的节点称为子节点,每个节点都可以有多个子节点,从根节点出发可以到达树中的任何其他节点,能以很方便导航和搜索的方式组织数据。
概念
- 节点:树的基本组成单位。
- 根节点:树的最顶层节点。
- 子节点:某个节点直接相连的下层节点。
- 父节点:某个节点直接相连的上层节点。
- 叶子节点:没有子节点的节点。
- 深度:从根到该节点的路径长度。
- 高度:所有节点深度最大值。
- 度:节点拥有的子节点的数量称为节点的度,度为0的节点是叶子节点,所有节点中的度的最大值称为这棵树的度。
- 祖先结点:从该结点到根结点的简单路径上经过的结点称为该结点的祖先结点。
- 子孙结点:以该结点为根的子树下的所有结点称为该结点的子孙结点。
- 森林:若干棵互不相交的树的集合就是森林,只有一棵树也可以称为森林。
二叉树
定义
二叉树是一种树形结构,其特点是每个结点最多只有两个子树,二又树的递归定义如下:
(1) 它或者是一棵不包含任何结点的空树,或者有且仅有一个结点称为根结点;
(2)根结点至多有两个互不相交的子树,并且每个子树也是一棵二叉树。
概念
- 完美二叉树:从第二层开始,每一层的节点数都是上一层的两倍,一共有2的h(高)次幂-1各节点。
- 完全二叉树:除了最后一层以外,其它层的节点都是满的,并且最后一层的节点是从左到右连续的。
性质
二叉树的性质如下:
(1)非空二又树第层上至多有2^(i-1)个结点;
(2) 高为的二叉树至多有2^(h+1)-1个结点;
(3)对于任何非空二叉树,若其叶结点个数为n0,有两个孩子的结点个数为n2,则n0 = n2+1.
遍历
二叉树的遍历是指从二又树的根结点开始,按照某种次序依次访问二又树中的所有结点,每个结点都被访问且仅被访问一次。二叉树有三种常用遍历顺序,分别是前序、中序、后序遍历。
前序遄历:先访问根结点,再递归前序访问左子树,最后递归前序访问右子树。
中序遍历:先递归中序访问左子树,再访问根结点,最后递归中序访问右子树。
后序遍历:先递归后序访问左子树,再递归后序访同右子树,最后访问根结点。
如果大家有其他想法的,可以补充。
1765

被折叠的 条评论
为什么被折叠?



