線性表 鍊錶

2021-09-29 12:11:24 字數 3004 閱讀 3387

在鍊錶儲存中,每個結點不僅包含所存元素的資訊,還包含元素之間邏輯關係的資訊,如單鏈表中前驅結點包含後繼結點的位址資訊,這樣就可以通過前驅結點中的位址資訊找到後繼結點的位置。

鍊錶的特性:

在每個結構中除了包含資料域外,還包含乙個指標域,用以指向其後繼結點。

兩者最明顯的區別是,帶頭結點的的單鏈表中有乙個結點不儲存資訊,只是作為標誌,而不帶頭結點的單鏈表的所有結點都儲存資訊。

結構體定義

// 結構體定義

typedef

struct lnode

lnode;

查詢演算法

// 查詢演算法:在單鏈表l中查詢值為e的元素(帶頭結點)

lnode*

findelem

(lnode *c,

int e)

return p;

// 返回null

}

插入演算法

// 插入演算法:往結點p的後面插入結點s

void

insertelem

(lnode *

&p,lnode *

&s)

刪除演算法

// 刪除演算法:刪除結點p後面的結點

void

delelem

(lnode *

&p)

尾插法建立鍊錶

// 尾插法建立鍊錶:假設有n個元素儲存在陣列a中,用尾插法建立鍊錶c

void

createlistr

(lnode *

&c,int a,

int n)

// 因為需要對鍊錶c進行修改,故要加上&表示引用

r->next=

null

;}

頭插法建立鍊錶

// 頭插法建立鍊錶:假設有n個元素儲存在陣列a中,用頭插法建立鍊錶c

void

createlistr

(lnode *

&c,int a,

int n)

// 因為需要對鍊錶c進行修改,故要加上&表示引用

}

單鏈表的歸併

// 單鏈表的歸併:a和b是兩個單鏈表(帶表頭結點),其中元素遞增有序。設計乙個演算法,將a和b歸併成乙個按元素值

// 非遞減有序的鍊錶c,c由a和b中的結點組成

在每個結構中除了包含資料域外,還包含兩個指標域,用以分別指向其後繼結點和前驅結點。同樣,雙鏈表也分為帶頭結點的雙鏈表和不帶頭結點的雙鏈表,情況類似於單鏈表。

結構體定義

// 結構體定義

typedef

struct dlnode

dlnode;

查詢演算法

// 查詢演算法:在雙鏈表l中查詢值為e的元素(帶頭結點)

dlnode*

findelem

(dlnode *c,

int e)

return p;

// 返回null

}

插入演算法

// 插入演算法:往結點p的後面插入結點s

void

insertelem

(dlnode *

&p,dlnode *

&s)

刪除演算法

// 刪除演算法:刪除結點p後面的結點

void

delelem

(dlnode *

&p)

尾插法建立鍊錶

// 尾插法建立鍊錶:假設有n個元素儲存在陣列a中,用尾插法建立鍊錶c

void

createdlistr

(lnode *

&c,int a,

int n)

// 因為需要對鍊錶c進行修改,故要加上&表示引用

只要將單鏈表的終端結點的 next 指標指向鍊錶中的第乙個結點(頭結點或開始結點)即可。

將雙鏈表的終端結點的 next 指標指向鍊錶中的第乙個結點(頭結點或開始結點),將雙鏈表的第乙個結點的 prior 指標指向鍊錶中的終端結點。

線性表 鍊錶

線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...

線性表 鍊錶

include include typedef int elemtype typedef struct node lnode,linklist linklist createlinklist1 頭插法 linklist createlinklist2 尾插法 void lengthlinklist ...

線性表,鍊錶

資料的儲存結構分為鏈式儲存結構,線性儲存結構。不管什麼型別的資料結構,都會以這兩種儲存方式在計算機中儲存。線性儲存結構就是開闢一段連續的記憶體 記憶體大小已經確定 將資料儲存在這段連續記憶體中,這種儲存結構的優點是可以快速地取出元素,時間複雜度為o 1 缺點是插入和刪除需要移動大量的元素,時間複雜度...