引子 双向链表比之单向链表,多数操作方法的实现都没有什么不同,如is_empty, __len__, traverse, search。这些方法都没有涉及节点的变动,也就可通过继承单向链表来实现即可。 不同之处一是在于节点实现的不同。因为增加了指向前一个节点的前驱区,因此需要为节点添加一个新属性pr ...
分类:
编程语言 时间:
2018-04-28 14:05:48
阅读次数:
167
引子 所谓单向循环链表,不过是在单向链表的基础上,如响尾蛇般将其首尾相连,也因此有诸多类似之处与务必留心之点。尤其是可能涉及到头尾节点的操作,不可疏忽。 对于诸多操所必须的遍历,这时的条件是什么?又应该在哪里停止? 在做删除操作时,如若待删除节点是头或尾节点时,该如何处理?如果链表只有一个节点,又该 ...
分类:
编程语言 时间:
2018-04-27 23:54:33
阅读次数:
277
import java.util.Iterator;public class Stack<Item>{ private Node first; //栈顶 private int N; //元素数量 private class Node { //定义节点的嵌套类 Item item; Node nex ...
分类:
其他好文 时间:
2018-04-27 21:40:37
阅读次数:
161
1.LinkedList源码分析 LinkedList的是基于链表实现的java集合类,通过index插入到指定位置的时候使用LinkedList效率要比ArrayList高,以下源码分析是基于JDK1.8. 1.1 类的继承结构 LinkedList类的继承结构如如下所示: 从以上继承结构图中可以 ...
分类:
其他好文 时间:
2018-04-27 02:37:42
阅读次数:
123
引子 数据结构指的是是数据的组织的方式。从单个数据到一维结构(线性表),二维结构(树),三维结构(图),都是组织数据的不同方式。 为什么需要链表? 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间 ...
分类:
编程语言 时间:
2018-04-26 23:28:53
阅读次数:
335
M个人围成一圈,从第一个开始报数,第N个将被杀掉,最后剩下一个,其余人都将被杀掉。例如M=10,M=3,被杀掉的顺序是:3,6,9,2,7,1,8,5,10,4. 使用单循环链表实现 API函数和单循环链表一样 main.c 宏定义M为10,N为3 运行结果: ...
分类:
其他好文 时间:
2018-04-26 01:26:58
阅读次数:
148
LinkedBlockingQueue的put,add和offer的区别 最近在学习<<Java并发编程实践>>,有很多java.util.concurrent包下的新类。LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现。 看其API的时 ...
分类:
数据库 时间:
2018-04-22 22:39:39
阅读次数:
245
List集合有三个常用的实现类 1.ArrayList: 底层部分使用数组实现,遍历熟读块。中间插入删除元素速度慢,线程不安全。 2. Vector: 底层部分同样使用数组实现,线程不安全 3.LinkedList :采用双向链表实现。元素的空间不连续。每个元素除了存放数据以外,还要存放上一个和下一 ...
分类:
编程语言 时间:
2018-04-22 14:47:53
阅读次数:
161
LinkedList LinkedList底层是基于双向链表实现的 内置插入删除方法 linkFirst & linkLast unlinkFirst & unlinkLast linkBefore unlink 源码分析 小结 1. ArrayList底层为数组,查找操作复杂度为O(1),添加删除 ...
分类:
其他好文 时间:
2018-04-21 16:10:32
阅读次数:
211
队列抽象数据结构之一,遵循FIFO原则,通过在初始化时构造队首和队尾两个引用(指针)指向一个空节点,作为空队列的标志 ...
分类:
其他好文 时间:
2018-04-17 00:01:12
阅读次数:
202