順序表常見操做有插入、刪除、查找、修改。
1、插入:
1.插入有頭插、尾插、任意位置插入。在插入時要注意下標的取值在順序表長度範圍內。因此最好在插入以前進行擴容操做。
2.在頭插時要注意先將原數組的元素從後往前依次向後移動。由於若是從前日後開始移動的話,會形成後一個元素被前一個元素覆蓋,而丟失數據且形成重複。arr[i+1]=arr[i],注意此處i的意思是要移動的元素的下標。
3.任意位置插入與頭插相似,從後往前(要插入的位置元素下標)依次向後移動,再將數據插入
二.刪除
1.刪除有頭刪、尾刪、任意位置刪除,要注意刪除前,原順序表是否爲空的異常狀況。
2.頭刪與頭插相反,是從前日後依次向前移動,即後一個元素arr[i+1]覆蓋前一個元素arr[i].arr[i]=arr[i+1]
3.不論查找仍是刪除,在肯定循環語句的初始值和條件時都要仔細思考可取範圍
三.查找和修改
查找和修改要注意目標位置的下標不能越界
四.擴容
在java語言中,擴容通常擴爲原來的1.5倍,是一種習慣的規範,不是死規則。
最後,附上完整代碼,包括初始化、插入、刪除、查找、修改、擴容、刪除順序表的相同元素。java
import java.util.Arrays; public class SeqList1{ private int[] array; private int size; //1.初始化,構造函數 public SeqList1(){ array=new int[11]; size=0; } //2.頭插 public void pushFront(int element){ ensureCapacity(); for(int i=size-1;i>=0;i--){// i表明的數據元素的下標,從後往前移動 array[i+1]=array[i]; } array[0]=element; size++; } //3.尾插 public void pushBack(int element){ ensureCapacity(); array[size++]=element; } //4.中間插 public void insert(int index,int element){ if(index<0||index>size){ System.out.println("下標異常,不能插入"); } ensureCapacity(); for(int i=size;i>=index;i--){ array[i+1]=array[i]; } array[index]=element; size++; } //5.頭刪 public void popFront(){ if(size==0){ System.out.println("空表"); } for(int i=0;i<size;i++){ array[i]=array[i+1]; } size--; } //6.尾刪 public void popBack(){ if(size==0){ System.out.println("空表"); } size--;} //7.中間刪 public void erase(int index){ if(index<0||index>=size){ System.out.println("下標異常,不能刪除"); } for(int i=index;i<size;i++){ array[i]=array[i+1]; } size--; } //8.查找 public int indexOf(int element){ for(int i=0;i<size;i++){ if(array[i]==element){ return i; } } return -1; } //9.根據下標,獲取元素 public int get(int index){ if(index<0||index>=size){ System.out.println("下標異常"); } for(int i=0;i<size;i++){ if(array[i]==array[index]){ return array[i]; } } return -1; } //10.給定下標,修改元素的值 public void set(int index,int element){ for(int i=0;i<size;i++){ if(i==index){ array[i]=element; } } } //11.顯示當前表中元素長度 public int size(){ return size; } //12.判斷表是否爲空 public boolean isEmpty(){ return size==0; } //13.查詢表的容量 public int capacity(){ return array.length; } //14.打印顯示錶中已有元素 public String toString(){ return Arrays.toString( Arrays.copyOf(array,size)); } //15.刪除表中的一個元素 public void remove(int element){ int index=indexOf(element); if(index!=-1){ erase(index); } } //16.刪除表中相同元素 public void removeAll(int element){ int j=0; for(int i=0;i<size;i++){ if(array[i]!=element){ array[j++]=array[i]; } } size=j; } //17.擴容 private void ensureCapacity(){ if(size<array.length){ return ; } //申請空間 int newCapacity=array.length+array.length/2; int[] newArray=new int[newCapacity]; //搬家 for(int i=0;i<array.length;i++){ newArray[i]=array[i]; } //官宣 this.array=newArray; } public static void test1(String [] args){ SeqList1 sq = new SeqList1(); //[] System.out.println(sq.toString()); //頭插1 2 3 sq.pushFront(1); sq.pushFront(2); sq.pushFront(3); System.out.println(sq.toString()); //尾插10,20,30 sq.pushBack(10); sq.pushBack(20); sq.pushBack(30); System.out.println(sq.toString()); //1,2,3,10,20,30 sq.insert(2,15); sq.insert(4,28); System.out.println(sq.toString()); //當前容量 System.out.println(sq.capacity()); //尾插 sq.pushBack(10); sq.pushBack(2000); sq.pushBack(3000); // sq.pushBack(4000); sq.pushBack(5000); sq.pushBack(6000); System.out.println("當前容量爲"+ sq.capacity()); //頭刪 sq.popFront(); //尾刪 sq.popBack(); //中間刪 sq.erase(3); System.out.println(sq.toString()); } public static void test2(String [] args){ SeqList1 s =new SeqList1(); s.pushBack(1); s.pushBack(2); s.pushBack(3); s.pushBack(4); s.pushBack(1); s.pushBack(2); s.pushBack(3); s.pushBack(4); // [ 1, 2, 3, 4, 1, 2, 3, 4 ] System.out.println(s.toString()); s.remove(4); // [ 1, 2, 3, 1, 2, 3, 4 ] System.out.println(s.toString()); s.removeAll(4); // [ 1, 2, 3, 1, 2, 3, ] System.out.println(s.toString()); } public static void main(String[] args){ test1(args); test2(args); } }