一、数据结构与算法:线性表
1、顺序表
实现代码:
1 |
|
顺序表是一种随机存取的存储结构。
2、链表
实现代码:
1 |
|
链表表是一种顺序访问的存储结构。
3、双向链表
4、循环链表w
5、堆栈(Stack)
先进后出
6、队列(Queue)
先进先出
实战1、反转链表
题目描述:给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
解法一
1 |
|
解法二:递归
1 |
|
实战2、匹配字符串
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
方法:栈的应用
方法1:自己的
1 |
|
方法2:更快
1 |
|
方法三:更快
1 | char pairs(char a) { |
二、数据结构与算法:树
1、树:理论
我们一般称位于最上方的结点为树的根结点(Root);
每个结点连接的子结点数目(分支的数目),我们称为结点的度(Degree),而各个结点度的最大值称为树的度;
每个结点延伸下去的下一个结点都可以称为一棵子树(SubTree);
每个结点的层次(Level)按照从上往下的顺序,树的根结点为
1
,每向下一层+1
,比如G
的层次就是3
,整棵树中所有结点的最大层次,就是这颗树的深度(Depth);与当前结点直接向下相连的结点,我们称为子结点(Child);相反即为父节点;
如果某个节点没有任何的子结点(结点度为0时)那么我们称这个结点为叶子结点;
如果两个结点的父结点是同一个,那么称这两个节点为兄弟结点(Sibling);
从根结点开始一直到某个结点的整条路径的所有结点,都是这个结点的祖先结点(Ancestor);
2、二叉树的性质
- 性质一: 对于一棵二叉树,第
i
层的最大结点数量为 个2^i - 1; - 一棵深度为
k
的二叉树最大结点数量为 n = 2^k*−1,顺便得出,结点的边数为 E = n - 1。 - 于任何一棵二叉树,如果其叶子结点个数为 n0,度为2的结点个数为 n2 ,那么两者满足以下公式:n0 = n2+1;
n
个结点的完全二叉树深度为 k = log2^n + 1 ;
3、二叉树遍历:前序、中序、后序遍历
前序遍历结果为:ABDECF
;
中序遍历结果为:DBEACF
;
后序遍历结果为:DEBFCA
;
1 |
|
4、二叉树遍历:层序遍历
1 |
|
5、二叉树的线索化(以前序为例)
1 |
|
六、二叉搜索树(二叉查找树)
七、平衡二叉树
三、数据结构与算法:哈希表
1、哈希表
1 |
|
2、哈希冲突(链地址法)
1 |
|