-
数据结构尤其是带指针的数据结构一定要考虑边界情况,注意边界检查,比如:
- 链表为空时的插入,
- 链表只有一个元素时的删除,
- 删除连表的最后一个元素。
void foo(ListNode *head) { ListNode *cur = head; while (cur && cur->next) { // 1. 能进入循环,说明 cur 不为空,cur->next 也不为空 // 也即进入循环的前提是至少存在两个节点 } }
-
数据结构与算法
- 数据结构重在结构(数据存储的结构)的定义;
- 算法重在流程及其渐进复杂度分析;
-
自然所有的数据结构都会具有的性质是结构特性(structure),但对于其他一些数据结构来说,比如优先队列或者堆(二叉堆、左式堆)还存在着有序性。
-
无论是栈、队列还是优先队列,都可视为一种缓存结构,可将数据元素保存其中,可以访问和弹出。
1. 数据结构及其应用
数据结构 | 解决的问题 | 语言、框架及库的应用实例 |
---|---|---|
链表 | LRU | |
循环链表 | 约瑟夫问题 | |
双向链表 | JDK:LinkedHashMap | |
优先队列 | Huffman编码 | |
栈 | 嵌套递归,函数调用堆栈 |
2. 语言、框架及库容器的底层数据结构
-
Java
容器 底层数据结构 说明 HashMap 数组+链表 数组是主体,链表是冲突策略
3. 语言、框架及库容器数据结构实现细节
-
Java
数据结构 实现细节 ArrayList 1.5倍拓展 HashMap 2倍拓展