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()); }}
新聞熱點
疑難解答