鏈表格的操作.ppt

鏈表格的操作.ppt

ID:59496970

大小:385.50 KB

頁數(shù):20頁

時間:2020-11-03

鏈表格的操作.ppt_第1頁
鏈表格的操作.ppt_第2頁
鏈表格的操作.ppt_第3頁
鏈表格的操作.ppt_第4頁
鏈表格的操作.ppt_第5頁
資源描述:

《鏈表格的操作.ppt》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。

1、鏈 表鏈表是一種數(shù)據(jù)結構,其中的各對象通過指針按線性順序排列。鏈表與數(shù)組不同,數(shù)組的線性序是由數(shù)組下標決定的,而鏈表中的順序是由各對象中的指針決定的。鏈表的每個節(jié)點是動態(tài)分配的,鏈表可以用來簡單而靈活地表示動態(tài)集合。單向鏈表特點:每個鏈表有一個頭指針,通過頭指針可以找到第一個節(jié)點;每個節(jié)點都可以通過指針域找到它的后繼,最后一個節(jié)點的指針域為NULL,表示沒有后繼;鏈表不支持隨機訪問,只能通過前一個元素的指針域得知后一個元素的地址,因此只能從頭指針開始順序訪問各節(jié)點。1.1單向鏈表31.1單向鏈表圖1單鏈表4頭

2、文件linkedlist.h/*linkedlist.h*/#ifndefLINKEDLIST_H#defineLINKEDLIST_Htypedefstructnode*link;structnode{unsignedcharitem;linknext;};linkmake_node(unsignedcharitem);voidfree_node(linkp);linksearch(unsignedcharkey);voidinsert(linkp);voiddelete(linkp);#endif5源文件

3、linkedlist.c1、make_node()函數(shù)staticlinkhead=NULL;linkmake_node(unsignedcharitem){linkp=malloc(sizeof*p);p->item=item;p->next=NULL;returnp;}2、free_node()函數(shù)voidfree_node(linkp){free(p);}63、insert()函數(shù)voidinsert(linkp){p->next=head;head=p;}74、delete()函數(shù)voiddelete

4、(linkp){linkpre;if(p==head){head=p->next;return;}for(pre=head;pre;pre=pre->next)if(pre->next==p){pre->next=p->next;return;}}85、traverse()函數(shù)voidtraverse(void(*visit)(link)){linkp;for(p=head;p;p=p->next)printf("%d",p->item);}96、search()函數(shù)linksearch(unsigned

5、charkey){linkp;for(p=head;p;p=p->next)if(p->item==key)returnp;returnNULL;}101.2雙向鏈表雙向鏈表特點:雙鏈表的每個節(jié)點都包含一個關鍵字和兩個指針域:next和prev,分別指向它的后繼節(jié)點與前驅節(jié)點。雙向鏈表可以很好地解決單鏈表刪除末節(jié)點需開銷O(n)時間的問題。111.2雙向鏈表圖2雙鏈表121.2雙向鏈表鏈表的搜索操作LIST-SEARCH(L,k)鏈表的搜索過程采用了簡單的線性查找方法,來找出鏈表L中的第一個具有關鍵字k的節(jié)點

6、,并返回指向該節(jié)點的指針。若表中沒有包含關鍵字k的節(jié)點,則返回NULL。算法描述如下:x=head[L]whilex≠NULLandkey[x]≠kdox=next[x]returnx131.2雙向鏈表鏈表的插入操作LIST-INSERT(L,x)給定一個已設置關鍵字的新節(jié)點x,過程LIST-INSERT(L,x)將x插入到鏈表的前端。算法描述如下:next[x]=head[L]ifhead[L]≠NULLthenprev[head[L]]=xhead[L]=xprev[x]=NULL141.2雙向鏈表鏈表的

7、刪除操作LIST-DELETE(L,x)過程LIST-DELETE(L,x)從鏈表L中刪除一個節(jié)點x,若希望刪除具有關鍵字的節(jié)點,則需要先調(diào)用LIST-SEARCH(L,k)以得到該節(jié)點的指針。算法描述如下:ifprev[x]≠NULLthennext[prev[x]]=next[x]elsehead[L]=next[x]ifnext[x]≠NULLthenprev[next[x]]=prev[x]151.2雙向鏈表雙向循環(huán)鏈表:如果我們把第一個節(jié)點的prev指向最后一個節(jié)點,而把最后一個節(jié)點的next指向第

8、一個節(jié)點,這樣就形成了一個雙向循環(huán)鏈表。哨兵(sentinel):哨兵(sentinel)是個啞元節(jié)點(dummynode),可以簡化邊界條件,使代碼更緊湊,但對速度并沒有什么幫助。在基于雙向循環(huán)鏈表的實現(xiàn)中,可以設置一個啞元節(jié)點(dummynode)。這個節(jié)點,起哨兵的作用。也就是說它們并不存儲任何實質的數(shù)據(jù)對象。初始時可以將啞元節(jié)點的next指向第一節(jié)點,prev指向最后一個節(jié)點。161.2雙向

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。