数据结构学习笔记

\(\color{cyan}{data structure}\)

  • 本篇文章将对一些数据结构进行梳理,希望能对自己的编程起到一些帮助。

1. \(\color{cyan}{vector}\) - 动态数组

  • \(\color{cyan}{vector}\) 是一个顺序容器,可以存放各种类型的对象。

1.1 存储方式:

vector<dt> vn;
  1. \(dt\)\(data\) \(type\)):数据类型。
  2. \(vn\)\(variable\) \(name\)):变量名。

1.2 包含函数及作用:

  1. \(push\)_\(back\)(元素):增加一个元素到向量后面。
  2. \(insert\)(位置,元素):插入元素到向量的指定位置。
  3. \(insert\)(位置,个数 \(n\),元素):插入 \(n\) 个相同的元素到向量的指定位置。
  4. \(insert\)(位置,向量头指针 \(first\),尾指针 \(end\)):将另一个向量从 \(first\) 开始到 \(end\) 结束(不包括 \(end\))之间的内容插入该向量的指定位置。
  5. \(erase\)(位置):删除指定位置的元素。
  6. \(erase\)(开始位置,结束位置):删除向量中 \([first,last)\) 中元素。
  7. \(pop\)_\(back\)():弹出(删除)向量中的最后一个元素。
  8. \(clear\)():清除向量所有元素,\(size\)()变为 \(0\)
  9. 运算符 \([i]\):取向量下标为 \(i\) 的元素。
  10. \(front\)():取向量第一个元素。
  11. \(back\)():取向量最后一个元素。
  12. \(begin\)():返回向量头指针(迭代器),指向第一个元素。
  13. \(end\)():返回向量尾指针(迭代器),指向最后一个元素的下一个位置。
  14. \(rbegin\)():反向迭代器,指向最后一个元素。
  15. \(rend\)():反向迭代器,指向第一个元素之前的位置。
  16. \(size\)():返回向量中实际元素的个数。
  17. \(resize\)(大小):重新设定向量的大小,也解释可以保存元素的个数。
  18. \(max\)_\(size\)():得到 \(\color{cyan}{vector}\) 最大可以是多大。
  19. \(empty\)():\(bool\) 类型,判断向量是否为空。
  20. \(swap\)():交换两个同类型向量的数据。

2. \(\color{cyan}{deque}\) - 双端队列

  • \(\color{cyan}{deque}\) 是一种可以同时对首、尾执行添加和删除工作的数据结构,是单调队列的一种变形。
  • 在这次整理中,我将不会整理单调队列,因为单调队列的所有函数,双端队列都有包括。

2.1 存储方式:

deque<dt> vn;
  1. \(dt\)\(data\) \(type\)):数据类型。
  2. \(vn\)\(variable\) \(name\)):变量名。

2.2 包含函数及作用:

  1. \(push\)_\(back\)(元素):将元素添加到队列的尾部。
  2. \(push\)_\(front\)(元素):将元素添加到队列的头部。
  3. \(pop\)_\(back\)():删除队列尾部的元素。
  4. \(pop\)_\(front\)():删除队列头部的元素。
  5. \(front\)():返回队列头部元素。
  6. \(back\)():返回队列尾部元素。
  7. \(size\)():返回队列中实际元素的个数。
  8. \(empty\)():\(bool\) 类型,判断队列是否为空。

3. \(\color{cyan}{stack}\) - 栈

  • \(\color{cyan}{stack}\) 是一种先进后出的数据结构,与单调队列恰恰相反。

3.1 存储方式:

stack<dt> vn;
  1. \(dt\)\(data\) \(type\)):数据类型。
  2. \(vn\)\(variable\) \(name\)):变量名。

3.2 包含函数及作用:

  1. \(push\)(元素):将元素压入栈顶。
  2. \(pop\)():将栈顶元素移除。
  3. \(top\)():返回栈顶元素。
  4. \(size\)():返回栈中实际元素的个数。
  5. \(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;
  1. \(dt\)\(data\) \(type\)):数据类型。
  2. \(vn\)\(variable\) \(name\)):变量名。
4.1.2 包含函数及作用:
  1. \(push\)(元素):将元素插入优先队列的尾部。
  2. \(pop\)():删除优先队列的第一个元素。
  3. \(top\)():返回优先队列的第一个元素。
  4. \(size\)():返回优先队列中中实际元素的个数。
  5. \(empty\)():\(bool\) 类型,判断优先队列是否为空。

4.2 \(\color{cyan}{min\_heap}\) - 小根堆

  • \(\color{cyan}{min\_heap}\) 是按照从大到小的顺序自动排序的一种数据结构,与大根堆的从小到大有所不同
4.2.1 存储方式:
priority_queue<dt>,vector<dt>,greater<dt> > vn;
  1. \(dt\)\(data\) \(type\)):数据类型。
  2. \(vn\)\(variable\) \(name\)):变量名。
4.2.2 包含函数及作用:
  1. \(push\)(元素):将元素插入优先队列的尾部。
  2. \(pop\)():删除优先队列的第一个元素。
  3. \(top\)():返回优先队列的第一个元素。
  4. \(size\)():返回优先队列中实际元素的个数。
  5. \(empty\)():\(bool\) 类型,判断优先队列是否为空。

5. \(\color{cyan}{list}\) - 链表

  • \(\color{cyan}{list}\) 是一个线性双向链表结构,它的数据由若干个节点构成。

5.1 存储方式:

list<dt> vn;
  1. \(dt\)\(data\) \(type\)):数据类型。
  2. \(vn\)\(variable\) \(name\)):变量名。

5.2 包含函数及作用:

  1. \(push\)_\(back\)(元素):将元素添加到链表的尾部。
  2. \(push\)_\(front\)(元素):将元素添加到链表的头部。
  3. \(pop\)_\(back\)():删除链表尾部的元素。
  4. \(pop\)_\(front\)():删除链表头部的元素。
  5. \(insert\)():在指定位置插入一个或多个元素。
  6. \(begin\)():获取链表的起始地址。
  7. \(end\)():获取链表的结束地址。
  8. \(size\)():返回链表的元素个数。
  9. \(empty\)():\(bool\) 类型,判断队列是否为空。
  10. \(clear\)():清空链表。
  11. \(max\)_\(size\)():得到链表最大可以是多大。
  12. \(swap\)():交换链表中的两个元素。
  13. \(reverse\)(开始地址,结束地址):翻转对应区间的链表元素。
  14. \(erase\)(开始地址,结束地址):删除链表指定范围之间的元素。
  15. \(remove\)(元素):删除所有与括号中元素相等的元素。
  16. \(sort\)(链表对象):链表元素排序。

6. \(\color{cyan}{set}\) - 集合

  • \(\color{cyan}{set}\) 是关联元素的一种,会进行自动排序,且不能有重复的元素。

6.1 存储方式:

set<dt> vn;
  1. \(dt\)\(data\) \(type\)):数据类型。
  2. \(vn\)\(variable\) \(name\)):变量名。

可以根据需要改变顺序:

  1. 从小到大(默认):
set<dt,less<dt> > vn;
  1. 从大到小:
set<dt,greater<dt> > vn;

6.2 包含函数及作用:

  1. \(begin\)():获取 \(\color{cyan}{set}\) 容器的起始地址。
  2. \(end\)():获取 \(\color{cyan}{set}\) 容器的结束地址。
  3. \(insert\)():插入 \(\color{cyan}{set}\) 容器。
  4. \(erase\)(开始地址,结束地址):删除 \(\color{cyan}{set}\) 容器指定范围之间的元素。
  5. \(find\)():查找匹配的元素迭代器,若不存在,返回 set.end()
  6. \(clear\)():清空 \(\color{cyan}{set}\) 容器。
  7. \(size\)():返回 \(\color{cyan}{set}\) 容器中元素的个数。
  8. \(empty\)():\(bool\) 类型,判断 \(\color{cyan}{set}\) 容器是否为空。

7. \(\color{cyan}{map}\)

  • \(\color{cyan}{map}\) 是关联容器的一种,容器中的元素通过关键字排序。
  • \(\color{cyan}{map}\) 的每个元素都分为关键字和值两部分,并且不允许有多个元素的关键字相同。

7.1 存储方式:

map<ke,va> vn;
  1. \(ke\)\(key\)):关键字。
  2. \(va\)\(value\)):值。
  3. \(vn\)\(variable\) \(name\)):变量名。

7.2 包含函数及作用:

  1. \(begin\)():获取 \(\color{cyan}{map}\) 的第一个元素的位置,返回第一个元素迭代器。
  2. \(end\)():获取 \(\color{cyan}{map}\) 的结束位置(最后一个元素的后面的一个位置)。
  3. \(insert\)():插入元素到 \(\color{cyan}{map}\),元素一般是 \(make\_pair\)(关键字,值)。
  4. \(erase\)(关键字/迭代器):删除 \(\color{cyan}{map}\) 指定位置或者指定关键字的元素。
  5. \(find\)():返回指定关键字位置的位置迭代器,若不存在,返回 map.end()
  6. \(clear\)():清空 \(\color{cyan}{map}\)
  7. \(size\)():返回 \(\color{cyan}{map}\) 中元素的个数。
  8. \(empty\)():\(bool\) 类型,判断 \(\color{cyan}{map}\) 是否为空。
  9. 运算符 \([i]\):取 \(\color{cyan}{map}\) 下标为 \(i\) 的元素。
  10. \(count\)():统计指定关键字的元素的个数,由于 \(\color{cyan}{map}\) 每个元素的关键字都不相同,\(count\) 的结果只能是 \(1\) 或者 0。

小结:

  • 数据结构是 \(c\)++ 中极其重要的部分,从数组到 \(\color{cyan}{vector}\),它一步步看着我们变得强大,我们不必追忆,只需向着星辰大海不断前行!

\(The\) \(end\) \(.\)

posted @ 2026-01-11 21:47  Mirror_victor  阅读(0)  评论(0)    收藏  举报