算法
学习方法:多去LeetCode刷题
算法与数据结构思维导图:https://download.csdn.net/download/m0_52074396/15261533
Array
范式(现已范式):任何数据类型都能装
底层由内存管理器管理
数组增加元素
inserting插入:移动一半的元素,再进行插入操作
Deleting删除:同理
时间复杂度:
pretend O(1)
apprnd O(1)
lookup O(1)
insert O(n)
delete O(n)
Linked List
增加/删除结点:改变指针指向即可
时间复杂度:
prepend O(1)
apprnd O(1)
lookup O(n)
insert O(1)
delete O(1)
跳表:为了解决链表look up 时间复杂度是O(n)
**如何给链表加速?**空间换时间
升维 ,比如 中指针
索引:一级索引,二级索引(一级比一级 多走一步) 现实一般走满足n/2级索引
时间复杂度O(log2 n)
现实中跳表会因为修改而变的不再工整,维护成本高。
栈与队列
栈stack:先入后出的容器(桶); 添加、删除皆为O(1) 最近相关性问题用栈来解决,洋葱
队列Queue:先来先出(管道); 添加、删除皆为O(1)
双端队列Deque:添加、删除皆为O(1);查询O(n)
优先队列Priority Queue:插入O(1);取出O(logN)按照元素优先级取出
底层具体实现的数据结构较为多样和复杂:heap,bst,treap
哈希表、映射、集合
Hash table:也叫散列表,根据关键码值而直接进行访问的数据结构,通过把关键码值映射到表中一个位置来访问记录,以加快查找速度。这个映射函数叫作散列函数,存放记录的数组叫做哈希表。‘
哈希函数选的好,有效避免哈希碰撞。
Map:key-value对,key不重复
Set:不重复元素的集合