- 博客(3)
- 收藏
- 关注
原创 《数据结构与算法之美》学习笔记Day3
2.未引入“哨兵”的情况如果在p节点后插入一个节点,只需2行代码即可搞定:new_node—>next = p—>next;}如果要删除节点p的后继节点,只需1行代码即可搞定:p—>next = p—>next—>next;1.插入节点在节点a和节点b之间插入节点x,b是a的下一节点,p指针指向节点a,则造成指针丢失和内存泄漏的代码:p—>next = x;2.删除节点在节点a和节点b之间删除节点b,b是a的下一节点,p指针指向节点a:p—>next = p—>next—>next;1.什么是“哨兵”?
2023-01-18 22:58:30
39
原创 《数据结构与算法之美》学习笔记Day2
对于第二种情况,要进行删除操作必须找到前驱节点,单链表需要从头到尾进行遍历直到p->next = q,时间复杂度为O(n),而双向链表可以直接找到前驱节点,时间复杂度为O(1)。数组简单易用,在实现上使用连续的内存空间,可以借助CPU的缓冲机制预读数组中的数据,所以访问效率更高,而链表在内存中并不是连续存储,所以对CPU缓存不友好,没办法预读。2)对链表进行频繁的插入和删除操作,会导致频繁的内存申请和释放,容易造成内存碎片,如果是Java语言,还可能会造成频繁的GC(自动垃圾回收器)操作。
2023-01-17 23:09:04
36
原创 《数据结构与算法之美》学习笔记Day1
数组看起来简单基础,但是很多人没有理解这个数据结构的精髓。带着为什么数组要从0开始编号,而不是从1开始的问题,进入主题。 1. 数组如何实现随机访问 1) 数组是一种线性数据结构,用连续的存储空间存储相同类型数据 I) 线性表:数组、链表、队列、栈 非线性表:树 图 II) 连续的内存空间、相同的数据,所以数组可以随机访问,但对数组进行删除插入,为了保证数组的连续性,就要做大量的数据搬移工作 a) 数组如何实现下标随机访问。 引入数组再内存种的分配图,得出寻址公式 b) 纠正数组和链表的错误认识。数组的查找
2023-01-16 23:53:07
36
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人