【教学课件】第4章链结串列(LinkedLists).ppt
《【教学课件】第4章链结串列(LinkedLists).ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章链结串列(LinkedLists).ppt(55页珍藏版)》请在三一办公上搜索。
1、第4章 鏈結串列(Linked Lists),4-1 動態記憶體配置4-2 鏈結串列的基礎4-3 單向鏈結串列4-4 環狀鏈結串列4-5 雙向鏈結串列4-6 鏈結串列的應用-多項式表示法,4-1 動態記憶體配置-說明,動態記憶體配置不同於陣列的靜態記憶體配置是在編譯階段就配置記憶體空間,動態記憶體配置是等到執行階段,才向作業系統要求配置所需的記憶體空間,可以讓程式設計者靈活運用程式所需的記憶體空間。在C語言標頭檔的標準函式庫提供兩個函數:malloc()和free(),可以配置和釋放程式所需的記憶體空間。,4-1 動態記憶體配置-malloc(),malloc()函數:配置記憶體空間C語言的程
2、式碼可以呼叫malloc()函數向作業系統取得一塊可用的記憶體空間,函數的語法,如下所示:fp=(資料型態*)malloc(sizeof(資料型態);上述語法因為函數傳回void通用型指標,所以需要加上型態迫換,將函數傳回的指標轉換成指定資料型態的指標,sizeof運算子可以計算指定資料型態的大小。例如:配置一個浮點數變數的記憶空間,如下所示:fp=(float*)malloc(sizeof(float);struct test*score;score=(struct test*)malloc(num*sizeof(struct test);,4-1 動態記憶體配置-free(),free()
3、函數:釋放配置的記憶體空間free()函數可以釋放malloc()函數配置的記憶體空間,例如:指標fp是一個指向malloc()函數傳回的浮點數記憶體空間的指標,呼叫free()函數釋放這塊記憶體,如下所示:free(fp);上述程式碼的指標fp可以是float浮點數指標,也可以是malloc()函數傳回的其它資料型態指標、陣列或結構指標。,4-2 鏈結串列的基礎-說明,有序串列(Ordered List)或稱為線性串列(Linear List)是一種元素間擁有順序的集合,如下所示:(a0,a1,a2,an),ai,0=i=n上述集合是一個線性串列,如果是空的線性串列,表示串列中沒有任何元素,
4、是使用()空括號表示。,4-2 鏈結串列的基礎-範例,一些線性串列的範例,如下所示:英文的月份:(Jan,Feb,March,Oct,Nov,Dec)。英文的星期:(Mon,Tue,Wed,Thu,Fri,Sat,Sun)。撲克牌的點數:(A,1,2,3,4,5,6,7,8,9,10,J,Q,K)。樓層:(B2,B1,1,2,3,4,5,6)。生肖:(鼠,牛,虎,狗,猪)。,4-2 鏈結串列的基礎-運算,線性串列的相關運算,如下所示:length():取得線性串列的長度。get():存取線性串列的第i個元素。search():從左到右,或從右到左走訪線性串列。delete():在線性串列第i個
5、元素刪除元素。insert():在線性串列第i個元素插入元素。,4-2 鏈結串列的基礎-使用陣列實作線性串列,4-2 鏈結串列的基礎-使用陣列實作線性串列(問題),複雜的新增與刪除運算:在新增或刪除名單時,因為陣列儲存的是循序且連續資料,所以在陣列中需要搬移大量元素,才能滿足同縣巿位在同一區段。例如:在桃園巿新增江小魚,則王小美、李光明和周星星都需要依序往後搬移1個元素,才能將江小魚插入,同理,刪除王大毛時,之後的所有元素也需要往前搬移。浪費記憶體空間:因為並不知道名單有多少位,所以需要宣告一個很大的結構陣列來儲存名單,如果最後只使用到幾個元素,就會造成大量記憶體空間的閒置。,4-2 鏈結串列
6、的基礎-使用鏈結串列實作線性串列,鏈結串列(Linked Lists)是一種實作線性串列的資料結構。在現實生活中,鏈結串列如同火車掛車廂以線性方式將車廂連結起來,每個車廂是鏈結串列的節點(Nodes),儲存線性串列的資料,車廂和車廂之間的鏈結,就是節點間的鏈結(Link)。如下圖所示:,4-2 鏈結串列的基礎-使用鏈結串列實作線性串列(實作),在C語言建立鏈結串列是宣告一個結構作為節點,內含指標的成員變數來鏈結其它節點,使用動態記憶體配置在執行階段配置節點所需的記憶體空間,即可解決結構陣列實作上浪費記憶體的問題。例如:使用鏈結串列建立的郵寄名單,筆者僅以編號(從大到小)代表名單的節點資料,郵寄
7、名單的鏈結串列,如下圖所示:,4-3 單向鏈結串列,4-3-1 建立和走訪單向鏈結串列4-3-2 刪除單向鏈結串列的節點4-3-3 插入單向鏈結串列的節點,4-3 單向鏈結串列-說明,單向鏈結串列是最簡單的一種鏈結串列,因為節點指標都是指向同一個方向,依序從前一個節點指向下一個節點,然後最後1個節點指向NULL,所以稱為單向鏈結串列,如下圖所示:,4-3 單向鏈結串列-標頭檔,01:/*程式範例:Ch4-3.h*/02:struct Node/*Node節點結構*/03:int data;/*結構變數宣告*/04:struct Node*next;/*指向下一個節點*/05:;06:typed
8、ef struct Node LNode;/*串列節點的新型態*/07:typedef LNode*List;/*串列的新型態*/08:List first=NULL;/*串列的開頭指標*/09:/*抽象資料型態的操作函數宣告*/10:extern void creatList(int len,int*array);11:extern int isListEmpty();12:extern void printList();13:extern List searchNode(int d);14:extern int deleteNode(List ptr);15:extern void ins
9、ertNode(List ptr,int d);,4-3-1 建立和走訪單向鏈結串列-建立(說明),建立單向鏈結串列在createList()函數是使用for迴圈將取得的陣列值建立成串列節點,每執行一次迴圈,就在串列開頭插入一個新節點,如下所示:for(i=0;i data=arrayi;newnode-next=first;first=newnode;,4-3-1 建立和走訪單向鏈結串列-建立(圖例),4-3-1 建立和走訪單向鏈結串列-走訪(說明),單向鏈結串列的走訪單向鏈結串列的走訪(Traverse)和一維陣列的走訪十分相似,其差異在於陣列是遞增索引值來走訪陣列,串列是使用指標運算來處
10、理節點的走訪,如下所示:List current=first;while(current!=NULL).current=current-next;,4-3-1 建立和走訪單向鏈結串列-走訪(圖例),4-3-2 刪除單向鏈結串列的節點-情況1,刪除串列的第1個節點:只需將串列指標first指向下一個節點,如下圖所示:first=first-next;,4-3-2 刪除單向鏈結串列的節點-情況2,刪除串列的最後1個節點:只需將最後1個節點ptr的前一個節點指標指向NULL,如下圖所示:while(current-next!=ptr)current=current-next;current-next
11、=NULL;,4-3-2 刪除單向鏈結串列的節點-情況3(1),刪除串列的中間節點:將刪除節點前一個節點的next指標,指向刪除節點下一個節點,例如:刪除節點3,如下圖所示:,4-3-2 刪除單向鏈結串列的節點-情況3(2),在執行刪除節點3操作後的串列圖形,如下所示:while(current-next!=ptr)current=current-next;current-next=ptr-next;,4-3-3 插入單向鏈結串列的節點-情況1,將節點插入串列第1個節點之前:只需將新節點newnode的指標指向串列的第1個節點first,新節點就成為串列的第1個節點,如下圖所示:newnode
12、-next=first;first=newnode;,4-3-3 插入單向鏈結串列的節點-情況2,將節點插在串列的最後1個節點之後:只需將原來串列最後1個節點的指標指向新節點newnode,新節點指向NULL,如下圖所示:ptr-next=newnode;newnode-next=NULL;,4-3-3 插入單向鏈結串列的節點-情況3(1),將節點插在串列的中間位置:假設節點是插在p和q兩個節點之間,p是q的前一個節點,如下圖所示:,4-3-3 插入單向鏈結串列的節點-情況3(2),只需將p指標指向新節點newnode,然後將新節點指標指向q,就可以插入新節點,如下圖所示:newnode-ne
13、xt=ptr-next;ptr-next=newnode;,4-4 環狀鏈結串列-說明,如果將最後一個節點的指標改為指向單向鏈結串列開始的第1個節點,這種串列稱為環狀鏈結串列(Circular Lists)。,4-4 環狀鏈結串列-建立與走訪,環狀鏈結串列的建立只需將最後1個節點的last指標指向第1個節點,即可完成環狀鏈結串列的建立,如下所示:last-next=first;環狀鏈結串列的走訪檢查是否到串列結束的條件是current-next=first,如下所示:CList current=first;do current=current-next;while(current!=first
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 链结 串列 LinkedLists
链接地址:https://www.31ppt.com/p-5658897.html