單鏈表樣式樣式: 頭指針--->頭結(jié)點(diǎn)---->a1---> ... --->an
頭指針:
指的是鏈表指向第一個結(jié)點(diǎn)的指針,若鏈表有頭結(jié)點(diǎn),那么就會指向這個頭結(jié)點(diǎn)。一般頭指針會被冠以鏈表的名字,做標(biāo)識作用。頭指針必須存在
頭結(jié)點(diǎn):
放在第一個元素的結(jié)點(diǎn)之前熄赡,數(shù)據(jù)域一般沒有意義,有時候可能用來存放鏈表的長度齿税。有它是為了將頭結(jié)點(diǎn)的操作和其它節(jié)點(diǎn)統(tǒng)一起來彼硫。頭結(jié)點(diǎn)非必須。
單鏈表:若指向第i個元素,那么這個結(jié)點(diǎn)的數(shù)據(jù)域是i->data,指針域是i->next,i->next指向下一個元素拧篮。
單鏈表的讀却什场(時間復(fù)雜度為O(n)):
獲得鏈表第i個元素思路:
1)要聲明一個結(jié)點(diǎn)p指向鏈表的第一個結(jié)點(diǎn),初始化j從1開始串绩。
2)當(dāng)j <1缺虐,遍歷鏈表,同時p的指針向后移動礁凡,指向下一個結(jié)點(diǎn)高氮,j+1。
3)當(dāng)?shù)搅随湵砟┪瞤為空時顷牌,說明第i個元素不存在
4)否則查找成功剪芍,返回結(jié)點(diǎn)p的數(shù)據(jù)。
將存儲元素為e的結(jié)點(diǎn)插入到結(jié)點(diǎn)p和p->next之間窟蓝,p和p->next的存儲元素分別為ai和ai+1.
單鏈表的插入操作:
1)聲明一個結(jié)點(diǎn)p指向鏈表的頭結(jié)點(diǎn)罪裹,初始化j從1開始
2)2)當(dāng)j <1,遍歷鏈表运挫,同時p的指針向后移動状共,指向下一個結(jié)點(diǎn),j+1谁帕。
3)當(dāng)?shù)搅随湵砟┪瞤為空時峡继,說明第i個元素不存在
4)否則查找成功,在系統(tǒng)中生成一個空的結(jié)點(diǎn)s
5)將數(shù)據(jù)元素e賦值給s->data
6)單鏈表插入兩個標(biāo)準(zhǔn)語句雇卷,s->next = p->next ,p->next = s;
7)返回成功
單鏈表的刪除操作:
1)聲明一個結(jié)點(diǎn)p指向鏈表的頭結(jié)點(diǎn)鬓椭,初始化j從1開始
2)2)當(dāng)j <1颠猴,遍歷鏈表关划,同時p的指針向后移動,指向下一個結(jié)點(diǎn)翘瓮,j+1贮折。
3)當(dāng)?shù)搅随湵砟┪瞤為空時,說明第i個元素不存在
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
分析:單鏈表中插入和刪除的時間復(fù)雜度都是O(n),
相比順序存儲結(jié)構(gòu)似乎并沒有什么優(yōu)勢调榄,但是在插入第i個位置的元素時,前一種只是第一次O(n)呵扛,接下來每次只需移動指針每庆,這時時間復(fù)雜度是O(1),而順序存儲結(jié)構(gòu)始終是O(n).所以對于插入和刪除月頻繁的操作今穿,單鏈表的優(yōu)勢才會越明顯缤灵。