线性表 顺序存储 链式存储 ---java实现

来源:互联网 发布:手机excel软件下载 编辑:程序博客网 时间:2024/05/17 23:51

首先抽象出一个线性表抽象类(包含基本的增删操作)

public abstract class MyAbstractList<E> {public abstract void add(E t);public abstract void add(int index,E t);public abstract void remove();public abstract void remove(int index);public abstract int getCount();public abstract E get(int index);public abstract String toString();public abstract boolean contains(E e);}

ArrayList2继承抽象类,并实现其中的所有抽象方法

public class ArrayList2<E> extends MyAbstractList<E>{private E[] e;private int len;private int size;ArrayList2(){this.size = 0;this.len = 10;this.e =  (E[]) new Object[len];}@Overridepublic void add(E t) {// TODO Auto-generated method stubensureCap();e[size] = t;size++;}private void ensureCap() {// TODO Auto-generated method stubif(getCount()>=len){E[] temp = (E[]) new Object[len*2+1];len = len*2+1;for(int i=0;i<len;i++){temp[i] = e[i];}}}@Overridepublic void add(int index, E t) {// TODO Auto-generated method stubensureCap();for(int i=size-1;i>=index;i--){e[i+1] = e[i];}e[index] = t;size++;}@Overridepublic void remove() {// TODO Auto-generated method stube[size] = null;size--;}@Overridepublic void remove(int index) {// TODO Auto-generated method stubfor(int i=index;i<size-1;i++){e[index]  = e[index+1];}e[size] = null;size--;}@Overridepublic E get(int index){if(index>0 && index<size){return e[index];}else return null;}public boolean isEmpty(){return size>0? false : true;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn size;}@Overridepublic String toString(){StringBuffer sb  = new StringBuffer();sb.append("[");for(int i=0;i<size-1;i++){sb.append(e[i]).append(",");}sb.append(e[size-1]);sb.append("]");return sb.toString().trim();}@Overridepublic boolean contains(E e1){boolean bool = false;for(int i=0;i<size;i++){if(e[i] == e1){bool = true;}}return bool;}}

LinkedList2 继承抽象类,并实现方法

public class LinkedList2<E> extends MyAbstractList<E> {private int size;private Node<E> head;public LinkedList2(){this.size = 0;head = null;}@Overridepublic void add(E t) {// TODO Auto-generated method stubNode<E> e = new Node<E>(t);if(size == 0) head = e;else{Node temp = head;while(temp.next!=null){temp = temp.next;}temp.next = e;size++;}}@Overridepublic void add(int index, E t) {// TODO Auto-generated method stubif(index == 0 || index>size) add(t);else{Node current = head;Node<E> e = new Node<E>(t);for(int i=0;i<index-1;i++){current = current.next;}e.next = current.next;current.next = e;size++;}}@Overridepublic void remove() {// TODO Auto-generated method stubremove(size-1);}@Overridepublic void remove(int index) {// TODO Auto-generated method stubif(index == 0)  removeFirst();else if(index == size)  removeLast();else if(index<0 || index>size) ;else{Node<E> pre = head;for(int i=0;i<index-1;i++){pre = pre.next;}Node<E> current = pre.next;pre.next = current.next;size--;}}private void removeLast() {// TODO Auto-generated method stubif(size == 0) ;else{Node<E> current = head;for(int i=0;i<size-2;i++){current = current.next;}current.next = null;size--;}}private void removeFirst() {// TODO Auto-generated method stubhead = head.next;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn size;}@Overridepublic E get(int index) {// TODO Auto-generated method stubNode<E> current = head;for(int i=0;i<index-1;i++){current = current.next;}return current.e;}@Overridepublic String toString() {// TODO Auto-generated method stubStringBuffer sb = new StringBuffer();sb.append("[");Node<E> current = head;for(int i=0;i<size;i++){sb.append(current.e).append(",");}sb.append("]");return sb.toString().trim();}@Overridepublic boolean contains(E e) {// TODO Auto-generated method stubif(size == 0 ) return false;else{Node<E> current = head;for(int i=0;i<size-1;i++){if(current.e == e) return true;current = current.next;}return false;}}}/** * 链表结点 */class Node<E>{E e;Node<E> next;Node(){this.next = null;}Node(E ee){e = ee;next = null;}}


0 0
原创粉丝点击