继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

数据结构跟算法

吃鸡游戏
关注TA
已关注
手记 497
粉丝 55
获赞 339

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

1.集合结构 2.线性结构 3.树形结构 4.图形结构 线性机构分为:

1,顺序存储结构。2,链式存储结构List就是顺序存储结构

•优点:    尾插效率高,支持随机访问。 •缺点:    中间插入或者删除效率低。 •应用:    ArrayList2.

链式存储分为:单链,跟双链,Message消息队列

3.双链,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) {

     return;

     }

if (index == size) {

linkLast(e);

} else {

Node<E> target = node(index);

Node<E> pre = target.prev;

Node<E> newNode = new Node<E>(pre, e, target);

//有坑

// pre.next = newNode;

// pre = newNode;

if(pre == null) {

first = newNode;

} else {

pre.next = newNode;

}

pre = newNode;

size++;

}

}

    public E get(int index) {

     if(index < 0 || index >size) {

     return null;

     }

     return node(index).item;

    }

    /**

     * 删除index 的元素

     * @param index

     */

    public void remove(int index){

     Node<E> target = node(index);

     unlinkNode(target);

    }

    

    private void unlinkNode(Node<E> p) {

     //有坑

//     p.prev.next = p.next;

//     p.next.prev = p.prev;

    

     Node<E> pre = p.prev;

     Node<E> 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 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;

        }

    }

}

原文链接:http://www.apkbus.com/blog-340477-76468.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP