数组与链表
2018-08-23 本文已影响0人
天际神游
数组 (Array)
一段固定的连续的存储单元.
特征:
- 大小固定: 一般来说, 数组一旦申请成功, 就不能改变大小了
- 查找O(1): 下标索引会根据数组的内存地址直接计算得到, 所以查找的时间复杂度是O(1)
- 小心越界: 当查找的返回超过数组边界时, 会报错
// 在Java中新建数组
int[] arr = new int[10];
链表 (List)
链表一般分为单链表和双链表. 其物理存储的位置是不连续的
单链表:
head --> node1 --> node2 --> node3 --> ... --> end
单链表由节点构成:
一个节点一般有两个属性, 以java为例:
public class Node {
public int value;
public Node next;
public Node(int value){
this.value = value;
}
}
通过next找到下一个节点, 通过value, 获取当前节点的值
一般遍历链表的方法:
// 如果需要保证 head 不变, 可以声明另外的一个 Node 指向头节点, 然后去遍历
Node node = head;
while(node != null){
node = node.next;
}
双链表
其节点比单链表多了一个指向之前节点的指针, 详见代码:
public class Node {
public int value;
public Node next;
public Node pre;
public Node(int value){
this.value = value;
}
}
当然还有一些其他的链表, 大同小异.