数据结构
1)数组: int array[5]; 末尾添加元素:.push_back();
2)链表:
struct listnode{
listnode(int x): val(x) , next(NULL) {}
}
listnode *n1= new listnode(4);
n1->next = n2 ;// 构建引用指向
3)栈:先入后出,可用链表和数组实现。 stack
4)队列: 先入先出,可用链表实现。 queue
二、非线性数据结构
1)树,分为 二叉树和多叉树。最顶层的节点称为根节点 root
//二叉树定义
strcut treenode{
int val;//节点值
treenode *left;//左子节点
treenode *right;//右子节点
treenode(int x): val(x), left(NULL), right(NULL) {}
}
2)图,由节点(顶点vertex)和边(edge)组成,每条边连接一对顶点。根据边的方向有无,分为有向图和无向图
顶点集合: vertices = {1, 2, 3, 4, 5} 边集合: edges = {(1, 2), (1, 3), (1, 4), (1, 5), (2, 4), (3, 5), (4, 5)}
图的表示方法:邻接矩阵和邻接表
(1)邻接矩阵: 使用数组 verticesvertices 存储顶点,邻接矩阵 edgesedges 存储边; edges
int vertices[5] = {1, 2, 3, 4, 5}; int edges[5] [5]= {{0, 1, 1, 1, 1}, {1, 0, 0, 1, 0}, {1, 0, 0, 0, 1}, {1, 1, 0, 0, 1}, {1, 0, 1, 1, 0}};
(2)邻接表: 使用数组 verticesvertices 存储顶点,邻接表 edgesedges 存储边。 edgesedges 为一个二维容器,第一维 ii 代表顶点索引,第二维 edges[i]edges[i] 存储此顶点对应的边集和;例如 edges[0] = [1, 2, 3,4]
edges[0]=[1,2,3,4] 代表 vertices[0] 的边集合为
int vertices[5] = {1, 2, 3, 4, 5}; vector
vector
3)散列表,通过Hash函数将指定的键key映射至对应的值value
unodered_map
4)堆,是一种基于完全二叉树的数据结构,可用数组实现。
以堆为原理的排序算法称为「堆排序」,基于堆实现的数据结构为「优先队列」。
堆分为「大顶堆」和「小顶堆」,大顶堆:任意节点的值不大于其父节点的值,小顶堆反之。
priority_queue
TRANSLATE with
| Arabic | Hebrew | Polish |
| Bulgarian | Hindi | Portuguese |
| Catalan | Hmong Daw | Romanian |
| Chinese Simplified | Hungarian | Russian |
| Chinese Traditional | Indonesian | Slovak |
| Czech | Italian | Slovenian |
| Danish | Japanese | Spanish |
| Dutch | Klingon | Swedish |
| English | Korean | Thai |
| Estonian | Latvian | Turkish |
| Finnish | Lithuanian | Ukrainian |
| French | Malay | Urdu |
| German | Maltese | Vietnamese |
| Greek | Norwegian | Welsh |
| Haitian Creole | Persian |