1. 程式人生 > 其它 >資料結構中順序表,連結串列的實現

資料結構中順序表,連結串列的實現

順序表

public class ArrayList<E> extends AbstractList<E> {
    private Object[] arr =new Object[20];
    private int size=0;

    @Override
    public int size() {
        return size;
    }

    @Override
    public void add(E e, int index) {
        if(index>size) throw new IllegalArgumentException("非法的插入位置");
        
if(size>=arr.length){ Object[] arr=new Object[this.arr.length+10]; for (int i = 0; i < this.arr.length; i++) arr[i]=this.arr[i]; this.arr=arr; } int i=size-1; while(i>=index){ arr[i+1]=arr[i]; i--; } arr[index]
=e; size++; } @Override public E get(int index) { if(index>size-1) throw new IllegalArgumentException("非法的獲取位置"); return (E) this.arr[index]; } @Override public void remove(int index) { if(index>size-1) throw new IllegalArgumentException("非法的刪除位置");
int i=index; while(i<size-1){ arr[i]=arr[i+1]; i++; } size--; } }

連結串列

public class LinkedList<E> extends AbstractList<E> {

    static class Node<E>{
        E e;
        Node<E> next;
        public Node(){};
        public Node(E e){
            this.e=e;
        }
    }

    private int size=0;
    private Node<E> head=new Node<>();

    @Override
    public int size() {
        return this.size;
    }

    @Override
    public void add(E e, int index) {
        if(index>size) throw new IllegalArgumentException("非法的新增位置");
        Node<E> node=head,temp;
        for (int i = 0; i < index; i++) node=node.next;
        temp=node.next;
        node.next=new Node<>(e);
        node.next.next=temp;
        size++;
    }

    @Override
    public E get(int index) {
        if(index>size-1) throw new IllegalArgumentException("非法的獲取位置");
        Node<E> node=head;
        for (int i = 0; i < index; i++) node=node.next;
        return node.next.e;
    }

    @Override
    public void remove(int index) {
        if(index>size-1) throw new IllegalArgumentException("非法的刪除位置");
        Node<E> node=head;
        for (int i = 0; i < index; i++) node=node.next;
        node.next=node.next.next;
        size--;
    }
}

抽象類AbstractList

public abstract class AbstractList<E> {
 public abstract int size();
 public abstract void add(E e,int index);
 public abstract E get(int index);
 public abstract void remove(int index);
}