資料結構學習 線性表 Java版的實現

2021-06-26 13:15:53 字數 3362 閱讀 6735

線性表介面llist:

package com.clarck.datastructure.linear;

/** * 線性表介面llist,描述線性表抽象資料型別,泛型引數t表示資料元素的資料型別

* * @author clarck

* */

public inte***ce llist

順序表(線性表的順序儲存結構)類,實現線性表介面,t是泛型引數,指定任意類

package com.clarck.datastructure.linear;

/** * 順序表(線性表的順序儲存結構)類,實現線性表介面,t是泛型引數,指定任意類

* * @author clarck

* * @param */

public class seqlistimplements llist

/*** 構造方法,建立容量為size的空表

* * @param size

*/public seqlist(int size)

/*** 判斷順序表是否空,若空返回true,o(1)

*/@override

public boolean isempty()

/*** 返回順序表長度,o(1)

*/@override

public int length()

/*** 返回第i(≥0)個元素。若i<0或大於表長則返回null,o(1)

*/@suppresswarnings("unchecked")

@override

public t get(int i)

return null;

}/**

* 設定第i(≥0)個元素值為x。若i<0或大於表長則丟擲序號越界異常;若x==null,不操作

*/@override

public void set(int i, t x) else

}/**

* 順序表的插入操作 插入第i(≥0)個元素值為x。若x==null,不插入。 若i<0,插入x作為第0個元素;若i大於表長,插入x作為最後乙個元素

*/@override

public void insert(int i, t x)

}// 下標容錯

if (i < 0)

i = 0;

if (i > this.len)

i = this.len;

// 元素後移,平均移動len/2

for (int j = this.len - 1; j >= i; j--)

this.element[i] = x;

this.len++;

}/**

* 在順序表最後插入x元素

*/@override

insert(this.len, x);

}/**

* 順序表的刪除操作 刪除第i(≥0)個元素,返回被刪除物件。若i<0或i大於表長,不刪除,返回null。

*/@suppresswarnings("unchecked")

@override

public t remove(int i)

t old = (t) this.element[i];

// 元素前移,平均移動len/2

for (int j = i; j < this.len - 1; j++)

this.element[this.len - 1] = null;

this.len--;

return old;

}/**

* 刪除線性表所有元素

*/@override

public void removeall()

/*** 查詢,返回首次出現的關鍵字為key元素

*/@suppresswarnings("unchecked")

@override

public t search(t key)

/*** 順序表比較相等 比較兩個順序表是否相等 ,覆蓋object類的equals(obj)方法,o(n)

*/@suppresswarnings("unchecked")

@override

public boolean equals(object obj)

}return true;

}return false;

}/**

* 順序查詢關鍵字為key元素,返回首次出現的元素,若查詢不成功返回-1

* * @param key

* 可以只包含關鍵字資料項,由t類的equals()方法提供比較物件相等的依據

* @return

*/public int indexof(t key) }}

return -1;

}// 返回順序表所有元素的描述字串,形式為「(,)」,覆蓋object類的tostring()方法

public string tostring()

}

線性表的順序表示和實現,測試類:

package com.clarck.datastructure.linear;

/** * 線性表的順序表示和實現

* * @author clarck

* */

public class seqlist_test

system.out.println("lista insert finished: "+lista.tostring());

lista.set(3, new string((char)(lista.get(3).charat(0) + 32) + ""));

system.out.println("lista set 3 : "+lista.tostring());

lista.remove(0);

system.out.println("lista remove 0 position: "+lista.tostring());

lista.remove(3);

system.out.println("lista remove 3 position: "+lista.tostring());

}}

輸出結果:

lista is empty: () 

lista insert finished: (a, f, b, e, c, d)

lista set 3 : (a, f, b, e, c, d)

lista remove 0 position: (f, b, e, c, d)

lista remove 3 position: (f, b, e, d)

原始碼:

資料結構學習 線性表

線性表一般分為順序結構和鏈式結構。順序表裡面元素的位址是連續的,如陣列 鍊錶裡面節點的位址不是連續的,是通過指標連起來的,如單鏈表 順序結構 優點 易於查詢,索引快 list n 這樣的操作,o 1 複雜度。缺點 擴充套件性弱,不易刪除 插入,這兩項操作均是o n 的時間複雜度 鍊錶結構 優點 擴充...

資料結構學習 線性表

考試前複習下資料結構,把一些知識點整理在這!主要參考了殷人昆主編的 資料結構 用物件導向方法與c 語言描述 這本書,以及中山大學劉聰老師的課件內容!鍊錶雙鏈表 線性表 linear list 是由n n 0 個資料元素 結點 a 0 a 1 a 2 a n 1 組成的有限序列。維基百科 線性表是乙個...

資料結構學習 線性表

鏈式儲存用指標表示邏輯結構,可以很方便的表示各種邏輯結構。順序儲存結構中,插入和刪除結點需要大量的移動元素,效率很低。順序儲存結構既可以順序訪問也可以隨機訪問,而鏈式結構只可以順序訪問。對n個元素進行排序的時間複雜最快也要o n 初始有序 通常是o nlog2n 或o n 2 單鏈表只能順序查詢插入...