数组与链表

数组 (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;
    }
}

当然还有一些其他的链表, 大同小异.

你可能感兴趣的:(数组与链表)