算法竞赛——数据结构

前言

本文介绍算法竞赛涉及到的数据结构。数据结构可以分为数据组织形式与数据操作两个部分,数据结构是为了通过将信息高效存储与管理来解决一些问题而存在的。

正文

1.栈

思想与功能

栈主要是提供一种后进先出的思想来帮助我们解决一些问题。

算法应用

例题1:表达式求值
例题2:单调栈

2.队列

思想与功能

队列(queue)是一种具有「先进入队列的元素一定先出队列」性质的表。由于该性质,队列通常也被称为先进先出(first in first out)表

算法应用

例题1:滑动窗口

3.双端队列

思想与功能

双端队列的特点是既可以在头部与尾部都可以插入和删除元素

算法应用

例题1:维修电路

4.循环队列

思想与功能

操作与队列一致,但是更为节省空间,如果队列不满的情况,可以在前方插入元素。

5.链表

思想功能

功能与数组类似,但是可以充分利用零碎的空间,高效的完成插入与删除操作,缺点是无法随机访问

算法应用

1.邻接表的实现

6.双向链表

思想功能

正常的链表只能向后遍历整个链,双向链表可以既可以向前遍历也可以向后遍历。

7.哈希表

思想功能

哈希表是又称散列表,一种以 “key-value” 形式存储数据的数据结构。所谓以 “key-value” 形式存储数据,是指任意的键值 key 都唯一对应到内存中的某个位置。只需要输入查找的键值,就可以快速地找到其对应的 value。可以把哈希表理解为一种高级的数组,这种数组的下标可以是很大的整数,浮点数,字符串甚至结构体。

8.并查集

思想功能

并查集是一种树形的数据结构,顾名思义,它用于处理一些不交集的 合并 及 查询 问题。 它支持两种操作:
查找(Find):确定某个元素处于哪个子集;
合并(Union):将两个子集合并成一个集合。

算法应用:

例题1:合并集合
例题2:食物链

9.堆

思想功能

堆是一棵树,其每个节点都有一个键值,且每个节点的键值都大于等于/小于等于其父亲的键值。堆主要支持的操作有:插入一个数、查询最小值、删除最小值、合并两个堆、减小一个元素的值。一些功能强大的堆(可并堆)还能(高效地)支持 merge 等操作。一些功能更强大的堆还支持可持久化,也就是对任意历史版本进行查询或者操作,产生新的版本。
算法竞赛——数据结构_第1张图片

10.块状数据结构

算法功能与思想:

分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。
1.块状数组:即把一个数组分为几个块,块内信息整体保存,若查询时遇到两边不完整的块直接暴力查询
例题1:教主的魔法
2.块状链表:块状链表就是一个链表,每个节点指向一个数组
例题1:POJ-2887
3.树分块:主要应用于莫队算法
4.SqrtTree
算法竞赛——数据结构_第2张图片

11.ST表

算法应用:

高效解决静态“区间按位和”、“区间按位或”、“区间 GCD”、”区间最值“的问题。
1.降雨量
2.RMQ

12.树状数组

算法应用:

线段树的简易版本,应用于单点修改区间查询的各类问题。
例题1:单点修改区间查询1

13.线段树

算法应用:

线段树可以在O(logN) 的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作。

14.李超线段树

用于解决一些线段树无法很好储存信息的问题

算法应用:

算法竞赛——数据结构_第3张图片

15.二叉搜索树(水平有限待更新)

算法应用:

主要为了解决动态第k大问题。

你可能感兴趣的:(ACM教程,数据结构,算法,链表)