資料結構 線性表

2021-10-17 11:20:55 字數 1645 閱讀 3832

list是最簡單的資料結構,可分為順序表與鍊錶,順序表內部資料儲存由陣列實現,鍊錶則是由乙個個自定義的節點node進行串聯,就像鎖鏈一樣

因為內部是由陣列實現(陣列初始化時長度即固定),所有順序表在增加元素時有動態擴容的需求,且元素發生變換時(實體地址連續),容易頻繁引起陣列的批量複製修改;

鍊錶內部是由自定義的節點進行連線的,所以能查詢上一節點與下一節點的稱為雙鏈表,只能查詢下一節點的稱為單鏈表。單鏈表由於只能從頭往尾查詢,在節點查詢上效率比雙鏈表低一半(雙鏈表可以通過位置與長度比較判斷離頭尾哪個更近)

增:觸發指定位置的node 及前node的斷裂與再連線

public

void

add(

int index, e element)

前節點prenode,指定位置節點node,新增節點newnode;

newnode.prev = prenode;

newnode.next = node;

prenode.next = newnode;

node.prev = newnode;

在實際中要注意引用的變化,pernode一般是用node.prev來代替,如果node引用改變容易引起錯誤指向。同時注意前後節點不存在的情況(即頭尾節點操作)

刪:觸發指定位置的node 與前後node的斷裂與再連線

public e remove

(int index)

e unlink

(node

x)else

if(next == null)

else

x.item = null;

size--

; modcount++

;return element;

}

前節點prenode,指定位置節點node,後節點nextnode;

prenode.next = nextnode;

nextnode.prev = prenode;

node.next = null;

node.prev = null;

node.item = null;

同樣注意:在實際中要注意引用的變化,pernode,nextnode一般是間接引用,如果node引用改變容易引起錯誤指向。同時注意前後節點不存在的情況(即頭尾節點操作)

list

優點缺點

應用順序表

儲存空間連續、允許隨機訪問、尾插,尾刪方便

插入效率低 刪除效率低 長度固定

普遍在用(android中基本儲存查詢操作較多,不涉及太多中間增刪)

單鏈表隨意進行增刪改、插入效率高、刪除效率高、長度可以隨意修改

記憶體不連續、不能隨機查詢、查詢效率低

messagequeue、hashmap

雙鏈表隨意進行增刪改、插入效率高、刪除效率高、長度可以隨意修改

記憶體不連續、不能隨機查詢、查詢效率比單鏈表快一倍

linkedlist

反轉單鏈表

合併兩個有序鍊錶

兩數相加

兩兩交換

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...

資料結構 線性表

線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...