数据结构(1)-常见数据结构

概念

数据结构是对在计算机内存中的数据的一种安排。
也可以理解为对计算机机运算的数据单元的一个抽象。

数据结构的分类

  • 逻辑结构:集合结构,线性结构,树形结构,图形结构
  • 存储结构:表,堆栈,队列,数组,树,二叉树,图

常见的数据结构

线性表

线性表有顺序存储结构和链式存储结构
顺序存储结构(顺序表):
优点:尾部插入效率高,支持随机访问。
缺点:中间插入和删除效率低
例子:ArrayList

链式存储结构有:单链表,双链表,单循环链表,双循环链表
优点:头插,中间插,删除效率高
缺点:不支持随机访问
例子:MessageQueue

链表的添加和删除

/添加
public void add (int index, E e) {
    if(index < 0 || index >size) {
        return;
    }
    if (index == size) {
        linkLast(e);
    } else {
        Node target = node(index);
        Node pre = target.prev;
        Node newNode = new Node(pre, e, target);
        //不能直接这样写
//          pre.next = newNode;
//          pre = newNode;
        if(pre == null) {
            first = newNode;
        } else {
            pre.next = newNode;
        }
        pre = newNode;
        size++;
    }
}

//删除
private void unlinkNode(Node p) {
    //不能直接这样写
//      p.prev.next = p.next;
//      p.next.prev = p.prev;
    
    Node pre = p.prev;
    Node next = p.next;
    
    //等价与删除第一个节点
    if (pre == null) {
        first = p.next;
    } else {
        pre.next = p.next;
    }
    
    //等价与删除尾节点
    if (next == null) {
        last = p.prev;
    } else {
        next.prev = p.prev;
    }
    size--;
}

private static class Node {
    E item;
    Node next;
    Node prev;

    Node(Node prev, E element, Node next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

数据结构导读目录

你可能感兴趣的:(数据结构(1)-常见数据结构)