线性表 顺序存储 链式存储 ---java实现
2014-08-05 11:46
686 查看
首先抽象出一个线性表抽象类(包含基本的增删操作)
ArrayList2继承抽象类,并实现其中的所有抽象方法
LinkedList2 继承抽象类,并实现方法
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]; } @Override public void add(E t) { // TODO Auto-generated method stub ensureCap(); e[size] = t; size++; } private void ensureCap() { // TODO Auto-generated method stub if(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]; } } } @Override public void add(int index, E t) { // TODO Auto-generated method stub ensureCap(); for(int i=size-1;i>=index;i--){ e[i+1] = e[i]; } e[index] = t; size++; } @Override public void remove() { // TODO Auto-generated method stub e[size] = null; size--; } @Override public void remove(int index) { // TODO Auto-generated method stub for(int i=index;i<size-1;i++){ e[index] = e[index+1]; } e[size] = null; size--; } @Override public E get(int index){ if(index>0 && index<size){ return e[index]; } else return null; } public boolean isEmpty(){ return size>0? false : true; } @Override public int getCount() { // TODO Auto-generated method stub return size; } @Override public 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(); } @Override public 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; } @Override public void add(E t) { // TODO Auto-generated method stub Node<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++; } } @Override public void add(int index, E t) { // TODO Auto-generated method stub if(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++; } } @Override public void remove() { // TODO Auto-generated method stub remove(size-1); } @Override public void remove(int index) { // TODO Auto-generated method stub if(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 stub if(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 stub head = head.next; } @Override public int getCount() { // TODO Auto-generated method stub return size; } @Override public E get(int index) { // TODO Auto-generated method stub Node<E> current = head; for(int i=0;i<index-1;i++){ current = current.next; } return current.e; } @Override public String toString() { // TODO Auto-generated method stub StringBuffer 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(); } @Override public boolean contains(E e) { // TODO Auto-generated method stub if(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; } }
相关文章推荐
- 线性表 顺序存储 链式存储 ---java实现
- 线性表java实现之顺序存储源码
- Java实现链式存储的线性表
- java实现线性表中的链式存储
- 【线性表一:】两种存储结构的代码实现:顺序存储和链式存储
- 用Java实现线性表中的顺序存储的学习和源码(合并两个线性表)
- 栈的Java实现(顺序存储实现与链式存储实现)
- 线性表的链式存储结构之单链表类的实现之补充_Java
- 栈-链式存储-Java实现
- Java,数据结构,线性表,顺序实现
- Java单链表顺序和链式实现(数据结构五)
- 顺序存储-数据结构-java实现
- 线性表java实现之单链表存储源码
- JAVA数据结构 线性表顺序是实现
- 线性表的链式存储结构之单链表类的实现_Java
- 线性表的顺序存储和链式存储的实现(C)
- Java单链表顺序和链式实现(数据结构五)
- 循环链表-链式存储-Java实现
- php实现数据结构线性表(顺序和链式)
- 单链表-链式存储-Java实现