线性表简述
一、简单实现增,删,改、查
package datatructs; /** * 表接口 */ public interface LinearList { boolean isEmpty();//判断线性表是否为空 int size(); //返回线性表的大小 Object get(int index); //获取指定索引的元素 Object set (int index,Object element);//修改指定索引的元素 boolean addForIndex(int index,Object element);//在指定索引位置添加的元素 boolean add(Object element);//在线性表最后添加元素 Object remove(int index); //移除指定位置的元素 void clear(); //清空线性表 }
实现类
package datatructs; public class LinearListImpl implements LinearList { //线性表 private Object [] sList; //线性表大小 private int size; public LinearListImpl(int length) { if(length<0){ sList=new Object[10]; }else{ sList=new Object[length]; } } public LinearListImpl() { //设置默认为10个大小 this(10); } /* * 检查线性表是否为空 */ @Override public boolean isEmpty() { //如果size=0就说明为空 true,不为0就为false return size==0; } /* * 返回线必表的大小 */ @Override public int size() { return size; } /* * 返回指定索引位置的元素 */ @Override public Object get(int index) { return sList[index]; } @Override public Object set(int index, Object element) { //得到原来位置上的元素 Object old=sList[index]; //修改 sList[index]=element; //返回原来的值 return old; } /* * 检查在指定位置添加元素的,索引是否在范围内 */ public void checkIndexForAdd(int index){ if(index<0 || index>size){ throw new IndexOutOfBoundsException("要插入的索引不在表的范围内"); } } /* * 检查在指定索引是否在范围 内 */ public void checkIndex(int index){ if(index>size){ throw new IndexOutOfBoundsException("要操作的索引不在表的范围内"); } } /* *在指定索引位置添加 */ @Override public boolean addForIndex(int index, Object element) { checkIndexForAdd(index); //判断线性表是否还有空间 if(size()==sList.length){ //如果为0 if(sList.length==0){ //初始化为10 sList=new Object[10]; }else{ //不为空就+1 //临时表 Object [] tmp=sList; //重新+1 this.sList=new Object[sList.length+1]; //将元素复制过来 for (int i = 0; i < size; i++) { sList[i]=tmp[i]; } } } //向后移一位 for(int i=size-1;i>=index;i--){ sList[i]=sList[i+1]; } //插入元素 sList[index]=element; size++; return true; } /* * 在最后添加元素 */ @Override public boolean add(Object element) { //调用 上面的添加方法 return addForIndex(size,element); } /* * 删除指定索引的元素 */ @Override public Object remove(int index) { checkIndex(index); for(int i=index;i<size-1;i++){ sList[i]=sList[i+1]; } sList[--size]=null; //返回要移除的元素 return sList[index]; } @Override public void clear() { for (int i = 0; i < size; i++) { //将每个值设置为null sList[i]=null; } //将线性表大小设置0 size=0; } }
测试
package datatructs; public class Demo { /** * @param args */ public static void main(String[] args) { LinearListImpl ll=new LinearListImpl(); System.out.println("是否为空: "+ll.isEmpty()); System.out.println("大小:"+ll.size()); ll.add("张三"); ll.add("李四"); ll.addForIndex(2, "王五"); System.out.println(ll.set(2, "赵六")); ll.remove(2); for (int i = 0; i < ll.size(); i++) { System.out.print("\t第"+i+" 元素 :"+ll.get(i)); } ll.clear(); System.out.println("元素大小:"+ll.size()); System.out.println("是否为空: "+ll.isEmpty()); } }