線性表的鏈式結構

2021-09-28 16:04:56 字數 1623 閱讀 9524

上一章,我們談到了線性表的順序結構,由於線性表的插入和刪除等操作需要移動元素,造成時間效率低。另外,這種儲存結構需要占用連續的儲存空間。為了彌補順序儲存結構的不足,我們可以討論另一種儲存結構,即鏈式儲存結構,對線性表的插入、刪除不需要移動資料元素,但同時也失去了順序錶可隨機訪問的特點。

所謂的鍊錶就是帶有乙個指標的鏈式結構,將n個元素通過鏈結的方式鏈結成乙個鍊錶。對於每個結點中只有乙個後繼指標的鍊錶成為單鏈表;每個節點中同時含有前置指標和後繼指標的鍊錶我們稱為雙向鍊錶。

在這裡我們先介紹單鏈表。

用指標變數儲存第乙個結點的位址,我們常把這種指標變數稱為頭指標。由於對於鍊錶的任何節點的訪問都必須從頭指標開始,所以我們在寫**的時候經常用頭指標來代替整個鍊錶。以下是單鏈表的資料結構:

typedef

struct lnodelnode,

*linklist;

#define status int

單鏈表的一些基本操作

1.單鏈表的建立

status initlinklist

(linklist &l)

2.清空鍊錶

void

clearlink

(linklist &l)

//清除線性表l中的所有元素,使之成為乙個空表

l->next =

null

;//頭結點指標域為空

}

3.求線性鍊錶的長度

int

linklistlength

(linklist l)

return length;

}

4.線性鍊錶判空

status linklistisempty

(linklist l)

5.取第i個元素

status getlinklistelem

(linklist l,

int i,elemtype &e)

if(p==

null

|| n>i)

return0;

e = p->data;

return1;

}

6.向煉表裡輸入值

status createlist

(linklist &l,

int m)

}

7.刪除乙個特定的數

status deletelist

(linklist &l,elemtype e)

q->next = q->next->next;

//使q->next指向p的下乙個

free

(p);

//此時的p已經斷開連線,然後進行free操作

}return1;

}

在上述實現的經典演算法中,初始化鍊錶和判別鍊錶是否為空兩個演算法的時間複雜度為o(1),其餘演算法的實現都需要通過某種形式的遍歷來實現,時間複雜度均為o(n)。值得注意的是刪除演算法的時間複雜度為o(n**2);

線性表的鏈式結構

實驗一 線性表的基本操作 一 實驗目的 1 掌握順序表 鍊錶的概念,學會對順序表 鍊錶進行操作。2 實現順序表 鍊錶的儲存結構,逐步培養解決實際問題的能力 二 實驗內容 順序表 鍊錶結構的生成,插入,刪除,定位,查詢 三 實驗步驟 1 定義節點 2 生成乙個單鏈表 正序建立單鏈表或逆序建立單鏈表 3...

線性表的鏈式儲存結構

線性表的鏈式儲存結構 順序儲存結構不足的解決辦法 缺點 最大的缺點就是插入和刪除時需要移動大量元素。為了表示每個資料元素 ai與其直接後續資料元素 ai 1 之間的邏輯關係,對資料元素 ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後續的資訊。我們把儲存資料元素資訊的域稱為資料域,把儲存...

線性表的鏈式儲存結構

線性表的鏈式儲存結構,雙向鍊錶實現 package 線性表 public class dulinklist public node t data,node prev,node next 儲存該鍊錶的頭節點 private node header 儲存該鍊錶的尾節點 private node tail...