链表
package other; public class TestFive { public static void main(String[] args) { /** * * 链表 * 1、链表是物理储存单元上非连续,非顺序的; * 数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。 * *2、链表是一系列节点组成的; * 节点包括两部分: * 数据域:储存数据元素 * 指针域:储存下一个节点地址 * * 链表包括单向链表,双向链表,循环链表 * * 单向链表;指针域只存放下一个节点。 * 双向链表:指针域不仅存放下一个节点,还存放上一个节点。 * 循环链表:将将终端节点的指针域指向头节点。 * *3、链表的优势在于插入和删除元素,但是不能随机读取数据。 * * * 4、给定指定节点的内存地址node,插入和删除的时间复杂度是O(1) * 删除操作实际上是将下一个节点的数据域和指针域的赋值给当前节点。然后释放下一个节点。 * * * 不给定节点需要从头查找O(n),然后删除或插入O(n),所以时间复杂度还是 O(n) * * * * 数组 * * 数组插入和删除元素的之后的元素需要后移,前移。 * * 数组查询方式: * 使用连续(不是有序)的储存空间。每个单元的位置和大小可以根据四则运算来计算。 * 例如:每个节点占4个字节。共20个节点。查找第3个节点是位置,直接从3*4开始找。 * */ } }
http://blog.csdn.net/gaoxiangnumber1/article/details/44634485