IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法竞赛入门到进阶 读书笔记(1) -> 正文阅读

[数据结构与算法]算法竞赛入门到进阶 读书笔记(1)

stl容器包括顺序式容器和关联式容器
顺序式容器包括vector,list,deque,queue,priority_queue,stack等
关联式容器包括set,multiset,map,multimap等
一、vector和list
数组有静态数组和动态数组两种类型,vector是stl的动态数组,可以节约空间也不易出错,需要时能改变数组大小。删除和插入操作少,访问元素频繁。
vector < int> a 定义a的初始化数组
vector < int> a(100,6) 定义a数组有100个值为6的元素
通过相同形式还可以定义字符串型数组和结构体数组
常用操作:
a.push_back(100); 在尾部添加元素
a.size(); 计算数组大小
a.empty(); 判断数组是否为空
a.insert(a.begin()+i,k); 插入功能,在第i个元素前插入k
a.insert(a.end(),10,5); 在尾部插入10个元素5
a.pop_back(); 删除尾部元素
a.erase(a.begin()+i,a.begin()+j); 删除功能,删除区间【i,j-1】的元素
a.resize(n); 调整数组大小
reverse(a.begin(),a.end()); 翻转数组

list是双向链表,它可以在任意地方插入和删除,随机访问较少,因此和vector的应用场景不同
list < int> a 定义a的初始化链表
list < int> a(5) 创建有5个元素的链表
常用操作:
a.begin(); 返回指向第一个元素的迭代器
a.back(); 返回最后一个元素
a.push_back(100) ; 向末尾添加一个元素
a.push_front(100) ; 向头部添加一个元素
a.empty(); 判断链表是否为空
a.pop_back(); 删除尾部元素
a.remove(); 删除元素
a.remove_if(); 按条件删除链表元素
a.resize(n); 调整链表大小
reverse(); 翻转链表
例题:hdu4841 圆桌判断好人坏人
先通过for的循环给动态数组a初始化,将圆桌取余处理,删除数组部分元素。
通过a.erase()进行的删除会减少数组大小但不会改变数组容量,之后通过if(元素是否还等于初始值)来判断出好人坏人
二、栈和队列
栈的特点是先进后出,把东西放进最底层最后再拿出来。
stack <数据类型> s 定义栈
常用操作:
s.push(100); 将元素放入栈顶
s.top(); 返回顶部元素
s.size(); 返回栈内元素个数
s.empty(); 判断栈是否为空
队列有三种类型:deque,queue和priority_queue
deque:双向队列,前后都可插入删除元素,可以直接访问任何元素
queue:队列,先进先出,排队完成事情后先出
priority_queue:优先队列,有排序功能,最高优先级元素第一个出列,设定数据小的优先级最高,因此能够完成从小到大的排序。
队列常用操作:
a.puch(100); 将元素插入队列
a.front(); 返回队首元素
a.pop(); 删除队首元素或其他队列不同的优先删除方法
a.back(); 返回队尾元素
a.size(); 返回队列大小
例题:hdu1062 翻转字符串
定义栈,通过判断空格分块翻转字符串,运用栈先进后出的原理将字符串读入栈后输出栈顶并清除栈顶,输出完成翻转。
三、set和map
关联式容器
set:集合,快速查找,不允许重复值。
map:基于关键字快速查找,不允许重复值
二者加上multi后可允许重复值
set <数据类型>x 定义set
常用操作:
x.insert(item); 把item放进set
x.erase(item); 删除元素item
x.find(k); 返回迭代器,指向键值k
x.lower_bound(k); 返回迭代器,指向键值不小于k的第一个元素
x.upper_bound(k); 返回迭代器,指向键值大于k的第一个元素
map <string,int>m 定义map
常用操作:
m.insert(a); 向其中插入一个元素a
m.erase(a); 移除键值为a的元素
m.erase(pos); 移除迭代器上所有的元素
m[key]=value; 直接元素存取
例题:hdu2094 产生冠军
定义集合A,B,将所有人放入集合A,失败记录放进集合B,只要满足A.size()-B.size()==1则存在冠军

map可以很好的查找键到值的映射,具有较高效率。student [“Tom”] =15将Tom当成数组下标使用,找到它的值,可以用于搜索学生id得出成绩等操作。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:26:57  更:2021-07-22 14:27:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 16:06:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码