上一章,我們談到了線性表的順序結構,由於線性表的插入和刪除等操作需要移動元素,造成時間效率低。另外,這種儲存結構需要占用連續的儲存空間。為了彌補順序儲存結構的不足,我們可以討論另一種儲存結構,即鏈式儲存結構,對線性表的插入、刪除不需要移動資料元素,但同時也失去了順序錶可隨機訪問的特點。
所謂的鍊錶就是帶有乙個指標的鏈式結構,將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...