线性表

作者: 追寻米K | 来源:发表于2019-02-12 23:01 被阅读0次

1、顺序表

顺序表

a1是a2的前驱,ai+1 是ai的后继,a1没有前驱,an没有后继
n为线性表的长度 ,若n==0时,线性表为空表
优点:尾部插入数据效率高,支持随机访问(取数据很方便)
缺点:中间插入数据效率低,删除数据效率低
如:ArrayList

2、链式存储

链式存储
单链表
单链表

优点:插入,删除效率都很高
缺点:不支持随机访问,可以循环访问

双链表
双链循环链表
双链表的插入

1、s.prior = p; // step1
2、p.pre.next = s; //step2
3、s.next = p; //step3
4、p.pre = s; //step4


双链表的删除

1、p.prior.next = p.next;
2、p.next.prior = p.prior;
双链表:如 LinkedList
双链表的增删改查:

public class LinkedList<E> {
    Node<E> first;
    Node<E> last;
    int size;

    public LinkedList() {

    }

    /**
     * 队尾添加一个元素
     */
    public void add(E e) {
        linkLast(e);
    }

    /**
     * 在index的位置添加一个元素
     * @param index
     * @param e
     */
    public void add(int index,E e){
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
        }
        if (index==size){
            linkLast(e);
        }else {
            Node<E> target = node(index);
            Node<E> prev = target.prev;
            Node<E> newNode = new Node<>(prev,e,target);
            target.prev = newNode;
            if (prev == null){
                first = newNode;
            }else {
                prev.next = newNode;
            }
            size++;
        }
    }

    public E get(int index) {
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
        }
        return node(index).item;
    }

    /**
     * 删除一个元素
     * @param index
     */
    public void remove(int index){
        Node<E> target = node(index);
        unLinked(target);
    }
    private void unLinked(Node<E> p){
//        p.prev.next = p.next;
//        p.next.prev = p.prev;
        Node<E> prev = p.prev;
        Node<E> next = p.next;
        if (prev == null){
            //等价于删除第一个节点
            first = next;
        }else {
            prev.next = p.next;
            p.prev = null;
        }
        if (next ==null){
            //等价于删除最后一个元素
            last = prev;

        }else {
            next.prev = p.prev;
            p.next = null;
        }
        size--;
    }

    private Node<E> node(int index){
        //index处于链表的前半部分
        if (index<(size>>1)){
            Node<E> node = first;
            for (int i = 0; i < index; i++) {
                node = node.next;
            }
            return node;
        }else {
            //index处于链表的后半部分
            Node<E> node = last;
            for (int i= size-1;i>index;i--){
                node = node.prev;
            }
            return node;
        }
    }

    private void linkLast(E e) {
        Node<E> newNode = new Node<E>(last, e, null);
        Node<E> l = last;
        last = newNode;
        if (l == null) {
            first = newNode;
        } else {
            l.next = newNode;
        }
        size++;
    }

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

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

    private String outOfBoundsMsg(int index) {
        return "Index: " + index + ", Size: " + size;
    }
}

相关文章

  • 线性表的相关操作

    集合 --- 创建线性表 解散 --- 销毁线性表 长度 --- 得到线性表的长度 出列 --- 从线性表删除一个...

  • [数据结构]第二章线性表(1)——线性表

    线性表 线性表的基本概念 线性表的定义 线性表是具有相同数据类型的n(n>=0)个元素的有限序列。 线性表的基本操...

  • 数据结构与算法(二)

    线性表及其顺序存储结构 线性表的基本概念 线性结构又称为线性表,线性表是最简单也是最常用的一种数据结构。 线性表的...

  • 线性表及应用

    线性表 “线性表(List):零个或多个数据元素的有限序列。” 线性表的顺序存储结构 线性表的顺序存储结构,指的是...

  • 数据结构03-线性表之顺序表

    第三章 线性表之顺序表 第三章 线性表之顺序表一、什么是线性表?1> 概念2> 线性表的基本操作二、线性表的顺序存...

  • 数据结构之线性表

    1、线性表-顺序表线性表-顺序表

  • 线性表数据结构

    线性表 线性表就是数据排成像一条线的结构,每个线性表上的数据最多只有前和后两个方向。与线性表对立的是非线性表,如二...

  • 大话数据结构 - 线性表

    代码GitHub地址 线性表 线性表需要相同的数据类型 线性表的处理方式都是先取代,后目的。比如删除链式线性表的某...

  • 数据结构-线性表(顺序表和链表)

    大纲:理解线性表的逻辑结构掌握线性表的顺序存贮结构和链式存贮结构;掌握线性表基本操作的实现。了解线性表的应用。 线...

  • 数据结构 线性表 单链表 c语言实现可运行

    线性表 线性表概念 线性表定义:具有相同特性数据元素的有限序列。线性表的逻辑结构:线性结构。只有一个表头,只有一个...

网友评论

      本文标题:线性表

      本文链接:https://www.haomeiwen.com/subject/tzfzrqtx.html