資料結構中順序表,連結串列的實現
阿新 • • 發佈:2022-01-19
順序表
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); }