数据结构学习笔记
\(\color{cyan}{data structure}\)
- 本篇文章将对一些数据结构进行梳理,希望能对自己的编程起到一些帮助。
1. \(\color{cyan}{vector}\) - 动态数组
- \(\color{cyan}{vector}\) 是一个顺序容器,可以存放各种类型的对象。
1.1 存储方式:
vector<dt> vn;
- \(dt\)(\(data\) \(type\)):数据类型。
- \(vn\)(\(variable\) \(name\)):变量名。
1.2 包含函数及作用:
- \(push\)_\(back\)(元素):增加一个元素到向量后面。
- \(insert\)(位置,元素):插入元素到向量的指定位置。
- \(insert\)(位置,个数 \(n\),元素):插入 \(n\) 个相同的元素到向量的指定位置。
- \(insert\)(位置,向量头指针 \(first\),尾指针 \(end\)):将另一个向量从 \(first\) 开始到 \(end\) 结束(不包括 \(end\))之间的内容插入该向量的指定位置。
- \(erase\)(位置):删除指定位置的元素。
- \(erase\)(开始位置,结束位置):删除向量中 \([first,last)\) 中元素。
- \(pop\)_\(back\)():弹出(删除)向量中的最后一个元素。
- \(clear\)():清除向量所有元素,\(size\)()变为 \(0\)。
- 运算符 \([i]\):取向量下标为 \(i\) 的元素。
- \(front\)():取向量第一个元素。
- \(back\)():取向量最后一个元素。
- \(begin\)():返回向量头指针(迭代器),指向第一个元素。
- \(end\)():返回向量尾指针(迭代器),指向最后一个元素的下一个位置。
- \(rbegin\)():反向迭代器,指向最后一个元素。
- \(rend\)():反向迭代器,指向第一个元素之前的位置。
- \(size\)():返回向量中实际元素的个数。
- \(resize\)(大小):重新设定向量的大小,也解释可以保存元素的个数。
- \(max\)_\(size\)():得到 \(\color{cyan}{vector}\) 最大可以是多大。
- \(empty\)():\(bool\) 类型,判断向量是否为空。
- \(swap\)():交换两个同类型向量的数据。
2. \(\color{cyan}{deque}\) - 双端队列
- \(\color{cyan}{deque}\) 是一种可以同时对首、尾执行添加和删除工作的数据结构,是单调队列的一种变形。
- 在这次整理中,我将不会整理单调队列,因为单调队列的所有函数,双端队列都有包括。
2.1 存储方式:
deque<dt> vn;
- \(dt\)(\(data\) \(type\)):数据类型。
- \(vn\)(\(variable\) \(name\)):变量名。
2.2 包含函数及作用:
- \(push\)_\(back\)(元素):将元素添加到队列的尾部。
- \(push\)_\(front\)(元素):将元素添加到队列的头部。
- \(pop\)_\(back\)():删除队列尾部的元素。
- \(pop\)_\(front\)():删除队列头部的元素。
- \(front\)():返回队列头部元素。
- \(back\)():返回队列尾部元素。
- \(size\)():返回队列中实际元素的个数。
- \(empty\)():\(bool\) 类型,判断队列是否为空。
3. \(\color{cyan}{stack}\) - 栈
- \(\color{cyan}{stack}\) 是一种先进后出的数据结构,与单调队列恰恰相反。
3.1 存储方式:
stack<dt> vn;
- \(dt\)(\(data\) \(type\)):数据类型。
- \(vn\)(\(variable\) \(name\)):变量名。
3.2 包含函数及作用:
- \(push\)(元素):将元素压入栈顶。
- \(pop\)():将栈顶元素移除。
- \(top\)():返回栈顶元素。
- \(size\)():返回栈中实际元素的个数。
- \(empty\)():\(bool\) 类型,判断栈是否为空。
4. \(\color{cyan}{priority\_queue}\) - 优先队列
- \(\color{cyan}{priority\_queue}\) 是一种按照从大到小或从小到大的顺序自动排序的数据结构,它也是队列的一种。
- \(\color{cyan}{priority\_queue}\) 有两种,分别是大根堆和小根堆,接下来,我们一一介绍。
4.1 \(\color{cyan}{max\_heap}\) - 大根堆
- \(\color{cyan}{max\_heap}\) 是按照从小到大的顺序自动排序的一种数据结构,也是优先队列的默认形式。
4.1.1 存储方式:
priority_queue<dt> vn;
或
priority_queue<dt>,vector<dt>,less<dt> > vn;
- \(dt\)(\(data\) \(type\)):数据类型。
- \(vn\)(\(variable\) \(name\)):变量名。
4.1.2 包含函数及作用:
- \(push\)(元素):将元素插入优先队列的尾部。
- \(pop\)():删除优先队列的第一个元素。
- \(top\)():返回优先队列的第一个元素。
- \(size\)():返回优先队列中中实际元素的个数。
- \(empty\)():\(bool\) 类型,判断优先队列是否为空。
4.2 \(\color{cyan}{min\_heap}\) - 小根堆
- \(\color{cyan}{min\_heap}\) 是按照从大到小的顺序自动排序的一种数据结构,与大根堆的从小到大有所不同
4.2.1 存储方式:
priority_queue<dt>,vector<dt>,greater<dt> > vn;
- \(dt\)(\(data\) \(type\)):数据类型。
- \(vn\)(\(variable\) \(name\)):变量名。
4.2.2 包含函数及作用:
- \(push\)(元素):将元素插入优先队列的尾部。
- \(pop\)():删除优先队列的第一个元素。
- \(top\)():返回优先队列的第一个元素。
- \(size\)():返回优先队列中实际元素的个数。
- \(empty\)():\(bool\) 类型,判断优先队列是否为空。
5. \(\color{cyan}{list}\) - 链表
- \(\color{cyan}{list}\) 是一个线性双向链表结构,它的数据由若干个节点构成。
5.1 存储方式:
list<dt> vn;
- \(dt\)(\(data\) \(type\)):数据类型。
- \(vn\)(\(variable\) \(name\)):变量名。
5.2 包含函数及作用:
- \(push\)_\(back\)(元素):将元素添加到链表的尾部。
- \(push\)_\(front\)(元素):将元素添加到链表的头部。
- \(pop\)_\(back\)():删除链表尾部的元素。
- \(pop\)_\(front\)():删除链表头部的元素。
- \(insert\)():在指定位置插入一个或多个元素。
- \(begin\)():获取链表的起始地址。
- \(end\)():获取链表的结束地址。
- \(size\)():返回链表的元素个数。
- \(empty\)():\(bool\) 类型,判断队列是否为空。
- \(clear\)():清空链表。
- \(max\)_\(size\)():得到链表最大可以是多大。
- \(swap\)():交换链表中的两个元素。
- \(reverse\)(开始地址,结束地址):翻转对应区间的链表元素。
- \(erase\)(开始地址,结束地址):删除链表指定范围之间的元素。
- \(remove\)(元素):删除所有与括号中元素相等的元素。
- \(sort\)(链表对象):链表元素排序。
6. \(\color{cyan}{set}\) - 集合
- \(\color{cyan}{set}\) 是关联元素的一种,会进行自动排序,且不能有重复的元素。
6.1 存储方式:
set<dt> vn;
- \(dt\)(\(data\) \(type\)):数据类型。
- \(vn\)(\(variable\) \(name\)):变量名。
可以根据需要改变顺序:
- 从小到大(默认):
set<dt,less<dt> > vn;
- 从大到小:
set<dt,greater<dt> > vn;
6.2 包含函数及作用:
- \(begin\)():获取 \(\color{cyan}{set}\) 容器的起始地址。
- \(end\)():获取 \(\color{cyan}{set}\) 容器的结束地址。
- \(insert\)():插入 \(\color{cyan}{set}\) 容器。
- \(erase\)(开始地址,结束地址):删除 \(\color{cyan}{set}\) 容器指定范围之间的元素。
- \(find\)():查找匹配的元素迭代器,若不存在,返回
set.end()。 - \(clear\)():清空 \(\color{cyan}{set}\) 容器。
- \(size\)():返回 \(\color{cyan}{set}\) 容器中元素的个数。
- \(empty\)():\(bool\) 类型,判断 \(\color{cyan}{set}\) 容器是否为空。
7. \(\color{cyan}{map}\)
- \(\color{cyan}{map}\) 是关联容器的一种,容器中的元素通过关键字排序。
- \(\color{cyan}{map}\) 的每个元素都分为关键字和值两部分,并且不允许有多个元素的关键字相同。
7.1 存储方式:
map<ke,va> vn;
- \(ke\)(\(key\)):关键字。
- \(va\)(\(value\)):值。
- \(vn\)(\(variable\) \(name\)):变量名。
7.2 包含函数及作用:
- \(begin\)():获取 \(\color{cyan}{map}\) 的第一个元素的位置,返回第一个元素迭代器。
- \(end\)():获取 \(\color{cyan}{map}\) 的结束位置(最后一个元素的后面的一个位置)。
- \(insert\)():插入元素到 \(\color{cyan}{map}\),元素一般是 \(make\_pair\)(关键字,值)。
- \(erase\)(关键字/迭代器):删除 \(\color{cyan}{map}\) 指定位置或者指定关键字的元素。
- \(find\)():返回指定关键字位置的位置迭代器,若不存在,返回
map.end()。 - \(clear\)():清空 \(\color{cyan}{map}\)。
- \(size\)():返回 \(\color{cyan}{map}\) 中元素的个数。
- \(empty\)():\(bool\) 类型,判断 \(\color{cyan}{map}\) 是否为空。
- 运算符 \([i]\):取 \(\color{cyan}{map}\) 下标为 \(i\) 的元素。
- \(count\)():统计指定关键字的元素的个数,由于 \(\color{cyan}{map}\) 每个元素的关键字都不相同,\(count\) 的结果只能是 \(1\) 或者 0。
小结:
- 数据结构是 \(c\)++ 中极其重要的部分,从数组到 \(\color{cyan}{vector}\),它一步步看着我们变得强大,我们不必追忆,只需向着星辰大海不断前行!
\(The\) \(end\) \(.\)

浙公网安备 33010602011771号