数据结构与算法(4)----->链表、二分搜索
1. 链表的基本概念
- 链表和数组一样都是一种线性结构;
- 数组是一段连续的存储空间;
- 链表空间不一定保证连续,是临时分配的;
- 链表的分类
- 按方向:
- 单链表:每个节点只能通过next指针指向下一个节点;
- 双链表:除了可以用next指针之外,还可以用previous指针,指向前一个节点;
- 按有无环:
- 普通链表
- 循环链表(首尾相接的链表,最后一个元素的next指针指向第一个元素;对于双链表,第一个元素的previous指针还需要指向最后一个元素)
- 按方向:
2. 单链表的翻转操作
- 当链表为空或者长度为1时,特殊处理;
- 其他的单链表,采用如下方式:
- 假设前面已经翻转好的部分头部为head,当前节点是now
- 将now节点的next指针指向head;
- 将now节点设置为新的翻转完成的节点的头部head now;
- 将之前now节点的下一个节点的next指针,指向head now,如此类推~
- 假设前面已经翻转好的部分头部为head,当前节点是now
3. 二分搜索常用场景
- 在有序序列中查找一个数;
- 例如,给定一个数组arr,判断整数m是否在arr之中(思路:判断arr中间的数mid与m的大小关系,如果m>mid,则mid左边部分都小于m(因为有序),同样的方法,对mid与右半部分之间的元素再次选取mid2进行同样的搜索操作!每次搜索范围减半,如果最后搜索到0都没找到m,则m不在arr数组之中!返回false)
- 二分搜索还能用于无序序列之中;
努力成为一个有情怀的程序员~