單鏈表樣式樣式: 頭指針--->頭結(jié)點(diǎn)---->a1---> ... --->an
頭指針:
指的是鏈表指向第一個(gè)結(jié)點(diǎn)的指針,若鏈表有頭結(jié)點(diǎn),那么就會指向這個(gè)頭結(jié)點(diǎn)。一般頭指針會被冠以鏈表的名字,做標(biāo)識作用。頭指針必須存在
頭結(jié)點(diǎn):
放在第一個(gè)元素的結(jié)點(diǎn)之前,數(shù)據(jù)域一般沒有意義,有時(shí)候可能用來存放鏈表的長度。有它是為了將頭結(jié)點(diǎn)的操作和其它節(jié)點(diǎn)統(tǒng)一起來。頭結(jié)點(diǎn)非必須。
單鏈表:若指向第i個(gè)元素,那么這個(gè)結(jié)點(diǎn)的數(shù)據(jù)域是i->data,指針域是i->next,i->next指向下一個(gè)元素。
單鏈表的讀?。〞r(shí)間復(fù)雜度為O(n)):
獲得鏈表第i個(gè)元素思路:
1)要聲明一個(gè)結(jié)點(diǎn)p指向鏈表的第一個(gè)結(jié)點(diǎn),初始化j從1開始。
2)當(dāng)j <1,遍歷鏈表,同時(shí)p的指針向后移動,指向下一個(gè)結(jié)點(diǎn),j+1。
3)當(dāng)?shù)搅随湵砟┪瞤為空時(shí),說明第i個(gè)元素不存在
4)否則查找成功,返回結(jié)點(diǎn)p的數(shù)據(jù)。
將存儲元素為e的結(jié)點(diǎn)插入到結(jié)點(diǎn)p和p->next之間,p和p->next的存儲元素分別為ai和ai+1.
單鏈表的插入操作:
1)聲明一個(gè)結(jié)點(diǎn)p指向鏈表的頭結(jié)點(diǎn),初始化j從1開始
2)2)當(dāng)j <1,遍歷鏈表,同時(shí)p的指針向后移動,指向下一個(gè)結(jié)點(diǎn),j+1。
3)當(dāng)?shù)搅随湵砟┪瞤為空時(shí),說明第i個(gè)元素不存在
4)否則查找成功,在系統(tǒng)中生成一個(gè)空的結(jié)點(diǎn)s
5)將數(shù)據(jù)元素e賦值給s->data
6)單鏈表插入兩個(gè)標(biāo)準(zhǔn)語句,s->next = p->next ,p->next = s;
7)返回成功
單鏈表的刪除操作:
1)聲明一個(gè)結(jié)點(diǎn)p指向鏈表的頭結(jié)點(diǎn),初始化j從1開始
2)2)當(dāng)j <1,遍歷鏈表,同時(shí)p的指針向后移動,指向下一個(gè)結(jié)點(diǎn),j+1。
3)當(dāng)?shù)搅随湵砟┪瞤為空時(shí),說明第i個(gè)元素不存在
4)否則查找成功,將想刪除結(jié)點(diǎn)p->next賦值給q
5)單鏈表的刪除標(biāo)準(zhǔn)語句p->next = q->next
6)將q結(jié)點(diǎn)中的數(shù)據(jù)賦值給e
7)釋放結(jié)點(diǎn)q
分析:單鏈表中插入和刪除的時(shí)間復(fù)雜度都是O(n),
相比順序存儲結(jié)構(gòu)似乎并沒有什么優(yōu)勢,但是在插入第i個(gè)位置的元素時(shí),前一種只是第一次O(n),接下來每次只需移動指針,這時(shí)時(shí)間復(fù)雜度是O(1),而順序存儲結(jié)構(gòu)始終是O(n).所以對于插入和刪除月頻繁的操作,單鏈表的優(yōu)勢才會越明顯。