線性表介面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 單鏈表只能順序查詢插入...