示例代碼
這里描述的線性表非常的類似java中常用的ArrayList
對于順序表的基本運算操作有
1霜第、初始化線性表
2斟薇、判斷線性表是否為空
3备畦、按序號查找
4计盒、按內容查找
5、插入操作
6藏杖、刪除操作
7将塑、求線性表的長度
8、清空順序表
根據(jù)線性表的基本特征我們先構造一個線性表蝌麸。
public class SeqList<datatype> {//指定數(shù)據(jù)類型為泛型
private int listSize = 100;//默認表長度為100
private Object[] list;//定義數(shù)組
private int length;//存儲線性表的長度屬性
public SeqList(int listSize) {//構造函數(shù)点寥,接收一個參數(shù),指定線性表大小
this.listSize = listSize;
this.list = new Object[listSize];
this.length = 0;
}
public SeqList() {//構造函數(shù)来吩,無參敢辩,使用默認線性表大小
this.list = new Object[listSize];
this.length = 0;
}
public int size() {//大小函數(shù),返回length即可
return this.length;
}
public boolean listEmpty() {//判斷是否為空函數(shù)误褪,如果長度為0便是空的
if (this.length == 0) {
return true;
}
return false;
}
//下列所有方法均對異常數(shù)據(jù)進行了處理,比如下表越界等情況碾褂,我們的算法最好處理兽间。
public datatype get(int index) {//根據(jù)下標獲取內容,我們需要處理無效的下標正塌,比如負數(shù)嘀略,或者大于了長度的下標,這些都是不正確的輸入
try {
if (index >= this.length || index < 0) {
throw new Exception("index:"+index+",size:"+this.length);
} else {
return (datatype) this.list[index];
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void add(datatype value) {//插入操作乓诽,不需要指定位置帜羊,默認插入在末尾,我們需要判斷線性表是否存滿了鸠天,直接在末尾插入就行了讼育,長度加一
try {
if(this.length == this.listSize) {
throw new Exception("list is full , list size:"+this.listSize+";list length:"+this.length);
}else {
this.list[this.length]=value;
this.length=this.length+1;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void add(int position,datatype value) {//插入操作,插入到指定的位置稠集,需要判斷下標是否有效奶段,表是否滿了等基本操作,我們把插入點后的所有元素都往后移動一格剥纷,然后在插入點放置元素即可痹籍。長度加一
try {
if(this.length == this.listSize) {
throw new Exception("list is full , list size:"+this.listSize+";list length:"+this.length);
}else if(position < 0 || position > length){
throw new Exception("Invalid position");
}else {
for (int i = this.length; i >= position; i--) {
this.list[i] = this.list[i-1];
}
this.list[position-1]=value;
this.length = this.length+1;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void set(int index,datatype value) {//改變指定位置的元素,只需要把指定位置的元素替換了就行了晦鞋,
try {
if(index < 0 || index > this.length-1) {
throw new Exception("Invalid index");
}else {
this.list[index]=value;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void del() {//刪除操作蹲缠,無參就是刪除整個表棺克,直接new一個新對象就完成,長度歸零
this.list = new Object[listSize];
this.length=0;
}
public void del(int index) {//刪除操作线定,指定刪除的位置娜谊,指定點后面的所有元素都往前挪一格就行了。然后長度減一
try {
if(index > this.length || index <= 0) {
throw new Exception("Invalid index");
}else {
for (int i = index; i <=? this.length; i++) {
this.list[i] = this.list[i+1];
}
this.length = this.length-1;
}
datatype value = (datatype) this.list[index-1];
} catch (Exception e) {
e.printStackTrace();
}
}
}