鏈式儲存結構的線性表(簡稱為鍊錶)將採用一組位址任意的儲存單元存放線性表中的資料元素。鏈式儲存結構的線性表不會按線性的邏輯順序來儲存資料元素,它需要在每個資料元素中儲存乙個引用下乙個資料元素的引用(或者叫做指標)。
節點 =資料元素 +引用下乙個節點的引用 +引用上乙個節點的引用
對於單鏈表通常有兩種建表方法:
1、頭插法建表:該方法從乙個空表開始,不斷的建立新節點,將資料元素存入新節點的data域中,然後不斷的以新節點為頭節點,讓新節點指向原有的頭節點。
2、尾插法建表:該方法是將新節點插入到當前鍊錶的尾部上,因此需要為鍊錶來定義乙個尾部變數來儲存鍊錶的最後乙個節點。
對於單鏈表而言,常用的操作有如下三種:
查詢分兩種情況下的查詢:
(1/)安序號查詢第index個節點
(2/)在鍊錶中查詢指定的element元素
示意圖如下:
示意圖如下:
**實現:
資料元素用student類:
public class student
public student(string name, string school, integer age)
public string getname()
public void setname(string name)
public string getschool()
public void setschool(string school)
public integer getage()
public void setage(integer age)
@override
public string tostring() "; }
@override
public boolean equals(object obj) else }
}
單鏈表實現用linklist類:
public class linklist
public node(t data, node next)
} //儲存該鍊錶的頭節點
private node header;
//儲存該鍊錶的尾節點
private node tail;
//儲存該鍊錶的節點數
private int size;
//建立空鍊錶
public linklist()
//以指定元素建立該單鏈表,該單鏈表只有乙個元素
public linklist(t element)
//返回該單鏈表的長度
public int length()
//獲取該單鏈表中索引為 index的元素
public t get(int index)
//獲取該單鏈表中索引為index的節點
private node getnodebyindex(int index)
//從header節點開始
node current = header;
for(int i = 0; i < size && current != null; i ++,current = current.next)
} return null; }
//查詢該單鏈表中指定元素的索引
public int indexof(t element)
} return -1;
} //查詢單鏈表中資料相同元素的索引
public int locate(t element)
}return -1;
} //向該單鏈表中指定索引位置插入元素
public void insert(int index, t element)
if(header == null)elseelse
} }//採用尾插法向該單鏈表插入元素
public void addattail(t element)else
size ++;
} //採用頭插法向該單鏈表插入元素
public void addatheader(t element)
size ++; }
//刪除該線性表中指定索引處的元素 並返回該元素
@suppresswarnings("unused")
public t delete(int index)
node del = null;
if(index == 0)else if(index == size - 1)else
size --;
return del.data;
} //刪除單鏈表中最後乙個元素 並返回該元素
public t remove()
//判斷單鏈表是否為空鍊錶
public boolean isempty()
//清空單鏈表
@suppresswarnings("null")
public void clear()
header = null;
tail = null;
size = 0;
} }//tostring方法
public string tostring()else
return sb.tostring().substring(0, sb.length() - 1) + "]";
} }}
測試用 linklisttest類
import com.yc.list.linklist;
public class linklisttest
}
測試結果如下:
同樣的,這裡的單鏈表也沒用實現執行緒安全。
對於單鏈表而言,它的功能與前面的順序線性表基本相同,因為他們都是線性表,只是底層的實現不同而已。因此,鍊錶和順序表只是效能上的差異:順序表在隨機儲存(查詢)時效能很好,但插入、刪除操作就不如鍊錶;鍊錶的插入刪除操作很好,但隨機儲存(查詢)時效能就不如順序表。
線性表之鏈式儲存結構
下面 為單鏈表的一些基本操作 include using namespace std typedef int elemtype typedef struct lnode linklist 逆序建立鍊錶 linklist recreatelinklist linklist l cout l n cha...
線性表的鏈式儲存
此方法雖然簡單,但是真寫起來太複雜了。線性表的鏈式儲存 include include struct lnode 線性表的初始化 void init l lnode l 線性表的後插建立 void create l1 lnode l n next null 線性表的後插建立 void create ...
線性表的鏈式儲存
引言 一 單鏈表 相較於順序儲存用連續的儲存單元儲存,單鏈表採用鏈式儲存結構,用一組位址任意的儲存單元儲存資料元素。特點 1 儲存單元可以是不連續的,即邏輯結構與物理結構可以不相同 2 元素用結點儲存,每個結點由元素值和下乙個元素的位址構成 3 單鏈表是由每個結點的指標域按照邏輯次序相互連線而成的。...