關(guān)鍵字
線(xiàn)性表沸停、順序存儲(chǔ)結(jié)構(gòu)
特點(diǎn)
無(wú)論是物理存儲(chǔ)還是邏輯上都是一個(gè)接一個(gè)的
插入
先理解如何用Java構(gòu)造一個(gè)順序結(jié)構(gòu)線(xiàn)性表。
- Java中線(xiàn)性順序衣屏,使用數(shù)組施绎;但是因?yàn)閯?chuàng)建數(shù)組對(duì)象時(shí),必須指定長(zhǎng)度骄蝇,但是構(gòu)造線(xiàn)性表的時(shí)候要一個(gè)不是滿(mǎn)元素的數(shù)組(才能插入)膳殷;并且能夠知道它的已經(jīng)使用的長(zhǎng)度。
- 為啥要知道它的已經(jīng)使用的長(zhǎng)度九火?原因是:當(dāng)在進(jìn)行元素移動(dòng)時(shí)赚窃,移動(dòng)的是已經(jīng)放了的元素,進(jìn)行a[j+1]=a[j]才不會(huì)出現(xiàn)腳標(biāo)異常岔激。
代碼結(jié)構(gòu)
- InsertSeqList.java
- LineInsertTest.java
InsertSeqList構(gòu)造線(xiàn)性表順序結(jié)構(gòu)類(lèi)勒极,LineInsertTest測(cè)試
InsertSeqList:
public class InsertSeqList {
/**
* 初始化線(xiàn)性表空間
*/
private static final int LIST_SIZE = 10;
/**
* 用來(lái)存放元素
*/
private int[] data;
/**
* 當(dāng)前表中實(shí)際使用長(zhǎng)度
*/
private int length;
public InsertSeqList() {
}
/**
* 構(gòu)造一個(gè)未占滿(mǎn)空間的數(shù)組
*
* @param data
* @param length
*/
public InsertSeqList(int[] data, int length) {
this.data = data;
this.length = length;
}
public int[] getData() {
return data;
}
/**
* 插入算法,其核心是從最后一位開(kāi)始后移一位虑鼎,至插入位
* i為4辱匿,length為6;在數(shù)組的i位置替換掉node
* @param insertSeqList 有空間的list
* @param i 插入位置(相對(duì)于排位順序來(lái)說(shuō))
* @param node 插入的數(shù)數(shù)字
*/
public void insertList(InsertSeqList insertSeqList, int i, int node) throws Throwable {
//如果已使用的長(zhǎng)度超出初始設(shè)定的長(zhǎng)度炫彩,拋出異常
if (insertSeqList.length == LIST_SIZE) {
throw new Throwable("線(xiàn)性表已滿(mǎn)");
} else if (i > insertSeqList.length || i < 1) {
throw new Throwable("插入位置不滿(mǎn)足");
} else if (i <= insertSeqList.length) {
//從最后一位開(kāi)始匾七,最后一位后移一位,直到替換位置的元素后移一位(因?yàn)椴迦胛恢玫脑匾惨苿?dòng)江兢,所以需要等號(hào))昨忆;
//j也是相對(duì)于排位順序的。那么對(duì)應(yīng)數(shù)組中的位置就是a[j-1]位
for (int j = insertSeqList.length - 1; j >= i - 1; j--) {
data[j + 1] = data[j];
}
data[i - 1] = node;
}
//打印元素
for (int a : insertSeqList.getData()
) {
System.out.println(a);
}
}
}
LineInsertTest
public class LineInsertTest {
public static void main(String[] args) {
int[] a = new int[10];
int use = 6;
a[0]=0;
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=4;
a[5]=5;
InsertSeqList insertSeqList = new InsertSeqList(a, use);
try {
insertSeqList.insertList(insertSeqList,3 ,12 );
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
上面代碼結(jié)果
在第三個(gè)位置插入12:
image.png