點擊查看:2015年計算機二級公共基礎(chǔ)知識復(fù)習(xí)知識點匯總
循環(huán)鏈表及其基本運算
在線性鏈表中,雖然對數(shù)據(jù)元素的插入和刪除操作比較簡單,但由于它對第一個結(jié)點和空表需要單獨處理,使得空表與非空表的處理不一致。
循環(huán)鏈表,即是采用另一種鏈接方式,它的特點如下:
(1)在循環(huán)鏈表中增加一個表頭結(jié)點,其數(shù)據(jù)域為任意或根據(jù)需要來設(shè)置,指針域指向線性表的第一個元素的結(jié)點。循環(huán)鏈表的頭指針指向表頭結(jié)點。
(2)循環(huán)鏈表中最后一個結(jié)點的指針域不是空的,而是指向表頭結(jié)點。在循環(huán)鏈表中,所有結(jié)點的指針構(gòu)成一個環(huán)狀鏈。
在循環(huán)鏈表中,只要指出表中任何一個結(jié)點的位置,均可以從它開始掃描到所有的結(jié)點,而線性鏈表做不到,線性鏈表是一種單向的鏈表,只能按照指針的方向進行掃描。
循環(huán)鏈表中設(shè)置了一個表頭結(jié)點,因此,在任何時候都至少有一個結(jié)點,因此空表與非空表的運算相統(tǒng)一。
循環(huán)鏈表的特點是無須增加存儲量,僅對表的鏈接方式稍作改變,即可使得表處理更加方便靈活。
【例】在鏈表上實現(xiàn)將兩個線性表(a1,a2,…,an)和(b1,b2,…,bm)連接成一個線性表(a1,…,an,b1,…bm)的運算。
分析:若在單鏈表或頭指針表示的單循環(huán)表上做這種鏈接操作,都需要遍歷第一個鏈表,找到結(jié)點an,然后將結(jié)點b1鏈到an的后面,其執(zhí)行時間是O(n)。
若在尾指針表示的單循環(huán)鏈表上實現(xiàn),則只需修改指針,無須遍歷,其執(zhí)行時間是O(1)。
相應(yīng)的算法如下:
LinkListConnect(LinkListA,LinkListB){
//假設(shè)A,B為非空循環(huán)鏈表的尾指針
LinkListp=A->next;//①保存A表的頭結(jié)點位置
A->next=B->next->next;//②B表的開始結(jié)點鏈接到A表尾
free(B->next);//③釋放B表的頭結(jié)點
B->next=p;//④
returnB;//返回新循環(huán)鏈表的尾指針
}
注意:
、傺h(huán)鏈表中沒有NULL指針。涉及遍歷操作時,其終止條件就不再是像非循環(huán)鏈表那樣判別p或p->next是否為空,而是判別它們是否等于某一指定指針,如頭指針或尾指針等。
②在單鏈表中,從一已知結(jié)點出發(fā),只能訪問到該結(jié)點及其后續(xù)結(jié)點,無法找到該結(jié)點之前的其它結(jié)點。而在單循環(huán)鏈表中,從任一結(jié)點出發(fā)都可訪問到表中所有結(jié)點,這一優(yōu)點使某些運算在單循環(huán)鏈表上易于實現(xiàn)。
相關(guān)推薦:
2015計算機二級公共基礎(chǔ)知識精選選擇題專項練習(xí)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |