linked lists

71
Linked Lists บบบบบ 4 บบบบบบบบบบบบบบบ บบบบบบ

Upload: alfonso-roberts

Post on 02-Jan-2016

53 views

Category:

Documents


2 download

DESCRIPTION

Linked Lists. บทที่ 4 รายการเชื่อมโยงข้อมูล. วัตถุประสงค์เพื่อ. เข้าใจหลักการและแนวคิดของลิสต์แบบเชิงเส้น อธิบายการดำเนินงานพื้นฐานของลิสต์ได้ เปรียบเทียบโครงสร้างการทำงานระหว่างอาร์เรย์กับลิงก์ลิสต์ได้ อธิบายโครงสร้างข้อมูลแบบลิงก์ลิสต์ได้ - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linked Lists

Linked Lists

บทท�� 4 รายการเชื่��อมโยงข้�อม�ล

Page 2: Linked Lists

วั�ตถุ�ประสงค์�เพื่��อ• เข้�าใจหลักการแลัะแนวคิ�ดข้องลั�สต์�แบบเชิ�งเส�น• อธิ�บายการด�าเน�นงานพื้��นฐานข้องลั�สต์�ได�• เปร#ยบเที#ยบโคิรงสร�างการที�างานระหว&างอาร�เรย�กบลั�งก�ลั�สต์�ได�• อธิ�บายโคิรงสร�างข้�อมู(ลัแบบลั�งก�ลั�สต์�ได�• เข้�าใจข้�นต์อนการที�างานข้องอลักอร�ที)มูต์&างๆ ที#+ใชิ�งานบนลั�งก�ลั�สต์�

• บอกคิ,ณสมูบต์�เพื้�+มูเต์�มูข้องเซอร�คิ(ลัาร�ลั�งก�ลั�สต์� ดบเบ�ลัลั�งก�ลั� สต์� เมู�อเที#ยบกบซ�งเก�ลัลั�งก�ลั�สต์�ได�

• สามูารถน�าเทีคิน�คิว�ธิ#การข้องลั�งก�ลั�สต์�น�าไปประย,กต์�ใชิ�งานได�อย&างเหมูาะสมู

Page 3: Linked Lists

หั�วัข้�อท��บรรยาย• แนวคิ�ดพื้��นฐานเก#+ยวกบลั�สต์�แบบเชิ�งเส�น• การด�าเน�นงานพื้��นฐานข้องลั�สต์�• แนวคิ�ดข้องลั�งก�ลั�สต์�• ลั�งก�ลั�สต์�คิ�ออะไร• ประเภทีข้องลั�งก�ลั�สต์�• โคิรงสร�างข้�อมู(ลัแบบลั�งก�ลั�สต์�

Page 4: Linked Lists

หั�วัข้�อท��บรรยาย (ต อ)

• คิ,ณสมูบต์�ข้องลั�งก�ลั�สต์�• อลักอร�ที)มูข้องลั�งก�ลั�สต์�• ลั�งก�ลั�สต์�ชิน�ดอ�+นๆ• ต์วอย&างการสร�างลั�งก�ลั�สต์�• การน�าลั�งก�ลั�สต์�ไปประย,กต์�ใชิ�งาน

Page 5: Linked Lists

ล!สต� (Lists) หัร�อ รายการ

Page 6: Linked Lists

แนวัค์!ดพื่�%นฐานเก��ยวัก�บล!สต�แบบเชื่!งเส�น

• คิ,ณสมูบต์�เร#ยงลั�าดบข้องข้�อมู(ลัภายในลั�สต์�ที#+มู#ลักษณะเป2นลั�าดบต์&อเน�+องกน

• สมูาชิ�กแต์&ลัะต์วจะเชิ�+อมูโยงกบสมูาชิ�กต์วถดไปในลักษณะเป2นรายการต์&อเน�+องกนไป

Page 7: Linked Lists

ล!สต�แบบท��วัไป• สามูารถแทีรกหร�อลับรายการลั�สต์� ณ ต์�าแหน&ง

ใดๆ ก3ได� โดยปราศจากข้�อจ�ากดในการด�าเน�นงานภายในลั�สต์�

• แบ&งได� 2 ประเภที– ลั�สต์�แบบส,&มู ซ)+งข้�อมู(ลัภายในลั�สต์�จะไมู&เร#ยงลั�าดบ– ลั�สต์�แบบเร#ยงลั�าดบ ข้�อมู(ลัภายในลั�สต์�ถ(กจดเร#ยงอย&างเหมูาะสมูด�วยคิ#ย�

Page 8: Linked Lists

ล!สต�แบบม�ข้�อจำ)าก�ด• ข้�อมู(ลัภายในลั�สต์�แบบมู#ข้�อจ�ากด ไมู&ว&าจะเพื้�+มูหร�อลับข้�อมู(ลัจะต์�องกระที�าที#+จ,ดปลัายด�านใดด�านหน)+งข้องลั�สต์�เที&าน�น

• ต์วอย&างข้องลั�สต์�ประเภทีน#� คิ�อ FIFO, LIFO

Page 9: Linked Lists

การด)าเน!นงานพื่�%นฐานข้องล!สต�• การแทีรก (Insertion)• การลับ (Deletion)• การอ&าน (Retrieval)• การที&องเข้�าไปในลั�สต์� (Traversal)

Page 10: Linked Lists

การแทรก• ยกต์วอย&างการแทีรกลั�สต์�แบบเร#ยงลั�าดบ จะใชิ�คิ#ย�เป2นต์วระบ,ข้�อมู(ลั

Page 11: Linked Lists

การลบ• การลับสมูาชิ�กจะที�าการคิ�นหาต์�าแหน&งข้�อมู(ลัที#+

ต์�องการลับ เมู�+อพื้บจ)งน�าสมูาชิ�กต์�าแหน&งน�นออกจากลั�สต์�

Page 12: Linked Lists

การอ าน• ต์�องที�าการคิ�นหาต์�าแหน&งข้�อมู(ลัที#+ต์�องการอ&านจากน�นจ)งที�าการอ&านหร�อด)งข้�อมู(ลัออกมูาใชิ�งานโดยไมู&มู#การเปลั#+ยนแปงข้�อมู(ลัภายในลั�สต์�

Page 13: Linked Lists

การท องเข้�าไปในล!สต�• จะที�าการเด�นที&องเข้�าไปยงแต์&ลัะสมูาชิ�กต์ามูลั�าดบ

ภายในลั�สต์� ซ)+งมูกใชิ�อลักอร�ที)มูแบบลั(ปในการที&องเข้�าไปในลั�สต์�มูากกว&าที#+ด�าเน�นการด�วยว�ธิ#การคิ�นหา

• ส�าหรบการประมูวลัผลัในแต์&ลัะสมูาชิ�กภายในลั(ป จะด�าเน�นการจนกระที+งออกจากลั(ป น+นหมูายคิวามู

ว&าที,กๆ สมูาชิ�กภายในลั�สต์�ได�ถ(กประมูวลัผลัเร#ยบร�อยแลั�ว

Page 14: Linked Lists

แนวัค์!ดข้องล!งก�ล!สต�• ที�งอาร�เรย�แลัะลั�งก�ลั�สต์�มู#คิ,ณสมูบต์�เป2นรายการต์&อเน�+องหร�อลั�สต์�น+นเอง

• ข้�อมู(ลัภายในหน&วยคิวามูจ�าข้องลั�งก�ลั�สต์�จะไมู&ได�อย(&ในลั�าดบต์&อ เน�+องเหมู�อนกบอาร�เรย� แต์&จะถ(กเชิ�+อมูโยงด�วยลั�งก�หร�อพื้อยน�

เต์อร�• สมูาชิ�กภายในลั�งก�ลั�สต์�แต์&ลัะต์วจะบรรจ,แอดเดรสเพื้�+อชิ#�ไปยง

ต์�าแหน&งโหนดต์วถดไปซ)+งแต์&ลัะโหนดจะบรรจ,ข้�อมู(ลั 2 ส&วน คิ�อ– ข้�อมู(ลั (Data) จดเก3บสารสนเทีศที#+สามูารถน�าไปใชิ�ประโยชิน�– ลั�งก� (Link) ใชิ�ส�าหรบเชิ�+อมูโยงข้�อมู(ลั เร�+มูจากเฮดพื้อยน�เต์อร�ชิ#�ไปยง

ต์�าแหน&งโหนดแรกข้องลั�สต์� จากน�นลั�งก�แต์&ลัะโหนดก3จะเชิ�+อมูโยงไปยงโหนดต์&อไป

Page 15: Linked Lists

อาร�เรย� VS ล!งก�ล!สต�

Page 16: Linked Lists

ต�วัอย างการแทนท��ล!งก�ล!สต�ในหัน วัยค์วัามจำ)า

Page 17: Linked Lists

โค์รงสร�างข้�อม�ลแบบล!งก�ล!สต�• โคิรงสร�างโหนดส&วนหว• โคิรงสร�างโหนดข้�อมู(ลั

Page 18: Linked Lists

โค์รงสร�างโหันดส วันหั�วั• มู#หน)+งพื้อยน�เต์อร�ที#+ชิ#�ไปยงลั�สต์� คิ�อ เฮดพื้อยน�เต์อร�

• เก�ดข้)�นหลังจากที#+ได� Create List ข้)�นมูา• บรรจ,ข้�อมู(ลัที#+เก#+ยวกบลั�สต์� เร#ยกว&า Metadata

Page 19: Linked Lists

โค์รงสร�างโหันดข้�อม�ล• ประกอบด�วยส&วนข้�อมู(ลัแลัะลั�งก�• ชิน�ดข้�อมู(ลัข้องลั�สต์�จะข้)�นอย(&กบการน�าไปประย,กต์�ใชิ�

Page 20: Linked Lists

ค์�ณสมบ�ต!ข้องล!งก�ล!สต�• ลั�งก�ลั�สต์�จะใชิ�เฮดพื้อยน�เต์อร�ชิ#�ไปยงโหนดแรก

ข้องลั�สต์� ในข้ณะที#+พื้อยน�เต์อร�หร�อลั�งก�ข้องแต์&ลัะ โหนดจะเชิ�+อมูโยงลั�งก�ไปยงโหนดต์วถดไป โดย

โหนดต์วส,ดที�ายที#+ไมู&มู#ลั�งก�ให�เชิ�+อมูต์&อจะถ(กก�าหนด คิ&าให�เป2น null

• โหนดข้�อมู(ลัจะประกอบด�วย Data แลัะ Link• ไมู&มู#คิวามูสมูพื้นธิ�ทีางกายภาพื้ระหว&างโหนด• ข้�อมู(ลัที#+จดเก3บภายในหน&วยคิวามูจ�าไมู&จ�าเป2นต์�องอย(&ต์�ดกน

• กรณ#เฮดพื้อยน�เต์อร�ไมู&มู#ต์วชิ#�หร�อไมู&มู#สมูาชิ�ก จะ ถ(กก�าหนดเป2น null คิ�อลั�สต์�ว&างน+นเอง

Page 21: Linked Lists

การสร�างล!สต�ด�วัยล!งก�ล!สต�• ลั�งก�ลั�สต์�จดเป2นโคิรงสร�างที#+ง&ายต์&อการเพื้�+มูแลัะ

ลับข้�อมู(ลั ไมู&ว&าจะกระที�าที#+ส&วนหน�า ส&วนหลัง หร�อส&วนกลัางข้องข้�อมู(ลั

Page 22: Linked Lists

การเพื่!�มและลบข้�อม�ลภายในล!งก�ล!สต�

Page 23: Linked Lists

ข้�อด�ข้องล!งก�ล!สต�• เป2นโคิรงสร�างที#+ง&ายต์&อการเพื้�+มูหร�อลับข้�อมู(ลั• ไมู&จ�าเป2นต์�องข้ยบอ�ลั�เมูนต์�ข้องลั�สต์�ไปข้�างหน�า

เพื้�+อให�เก�ดพื้��นที#+ว&าง ในกรณ#ที#+มู#การลับอ�ลั�เมูนต์�ต์รงส&วนหน�าหร�อส&วนกลัางข้องลั�สต์�เชิ&นเด#ยวกบอาร�เรย�

• ใชิ�พื้��นที#+เน��อที#+หน&วยคิวามูจ�าได�เต์3มูประส�ทีธิ�ภาพื้ เน�+องจากหากข้�อมู(ลัภายในลั�สต์�มู#น�อยก3ใชิ�น�อย ซ)+ง

ผ�ดกบอาร�เรย�ที#+ต์�องส(ญเส#ยพื้��นที#+ไปในทีนที# ถ)งแมู�จะไมู&มู#ข้�อมู(ลัภายในลั�สต์�ก3ต์ามู

Page 24: Linked Lists

อ�ลกอร!ท-มข้องล!งก�ล!สต�• การสร�างลั�สต์� (Create List)• การเพื้�+มูข้�อมู(ลัลังในลั�งก�ลั�สต์� (Insert Node)• การลับข้�อมู(ลัออกจากลั�งก�ลั�สต์� (Delete Node)• การคิ�นหาข้�อมู(ลัในลั�งก�ลั�สต์� (Search List)• การด)งข้�อมู(ลัจากลั�งก�ลั�สต์� (Retrieve Node)• ลั�สต์�ว&าง (Empty List)• ลั�สต์�เต์3มู (Full List)• จ�านวนสมูาชิ�กในลั�สต์� (List Count)• การที&องเข้�าไปในลั�สต์� (Traverse List)• การยกเลั�กการใชิ�งานลั�สต์� (Destroy List)

Page 25: Linked Lists

การสร�างล!สต� (Create List)

• เป2นฟั9งก�ชิ +นการก�าหนดโคิรงสร�างโหนดส&วนหว แลัะก�าหนดคิ&าเร�+มูต์�นให�กบ Metadata ส�าหรบลั�สต์�

Page 26: Linked Lists

อ�ลกอร!ท-มการสร�างล!สต�Algorithm createList (list)Initializes metedata for list.

Pre list is metadata structure passed by reference

Post metedata initialized1 allocate (list)2 set list head to null3 set list count to 0end createList

Page 27: Linked Lists

การเพื่!�มข้�อม�ลลงในล!งก�ล!สต� (Insert Node)

• เป2นฟั9งก�ชิ +นส�าหรบแทีรกโหนดเพื้�+มูเข้�าไปในลั�สต์�• ต์�องร( �ว&าโหนดก&อนหน�า (Predecessor) ข้องโหนด

ใหมู&ที#+แทีรกคิ�อโหนดใด หลังจากน�นที�าการแทีรกข้�อมู(ลัเพื้�+มูต์ามูข้�นต์อนดงน#�– จดสรรหน&วยคิวามูจ�าส�าหรบโหนดใหมู&พื้ร�อมูกบข้�อมู(ลั– ก�าหนดต์วชิ#�ให�กบลั�งก�ฟั:ลัด�ข้องโหนดใหมู&– น�าต์วชิ#�ที#+อย(&ก&อนหน�าโหนดใหมู&ชิ#�มูายงโหนดใหมู&

• ลั�งก�ข้องโหนดใหมู&จะชิ#�ไปยงโหนดข้�างหลัง(Successor)

Page 28: Linked Lists

การแทรกโหันดม� 4 ร�ปแบบ• การแทีรกโหนดในลั�สต์�ว&าง• การแทีรกโหนดที#+ต์�าแหน&งแรก• การแทีรกโหนดต์รงส&วนกลัางข้องลั�สต์�• การแทีรกโหนดที#+ที�ายลั�สต์�

Page 29: Linked Lists

การแทรกโหันดในล!สต�วั าง

Page 30: Linked Lists

การแทรกโหันดท��ต)าแหัน งแรก

Page 31: Linked Lists

การแทรกโหันดตรงส วันกลางข้องล!สต�

Page 32: Linked Lists

การแทรกโหันดท��ท�ายล!สต�

Page 33: Linked Lists

อ�ลกอร!ท-มการแทรกโหันดAlgorithm insertNode (list, pPre, dataIn)Inserts data into a new node in the list.

Pre list is metadata structure to a valid list pPre is pointer to data’s logical predecessor dataIn contains data to be inserted

Post data have been inserted in sequenceReturn True if successful. False if memory overflow

1 allocate (pNew)2 set pNew data to dataIn3 if (pPre null) Adding before first node or to empty list. 1 set pNew link to list head 2 set list head to pNew4 else Adding in middle or at end. 1 set pNew link to pPre link 2 set pPre link to pNew5 end if6 return trueend insertnode

Page 34: Linked Lists

การลบข้�อม�ลออกจำากล!งก�ล!สต� (Delete Node)

• เป2นการน�าพื้��นที#+โหนดที#+ถ(กลับส&งคิ�นแก&หน&วยคิวามูจ�าระบบ

• ปรบเปลั#+ยนต์วชิ#�ใหมู&• ข้�นต์อนการลับโหนดมู#ดงน#�– คิ�นหาต์�าแหน&งข้องโหนดที#+ต์�องการลับ (pLoc) ให�พื้บก&อน– ที�าให�ทีราบต์�าแหน&งข้อง Predecessor (pPre)– ก�าหนดลั�งก�ฟั:ลัด�ข้องโหนด Predecessor ชิ#�ไปยงโหนด

Successor ซ)+งเป2นโหนดที#+อย(&ด�านหลังข้องโหนดที#+ถ(กลับ– คิ�นพื้��นที#+หน&วยจ�าแก&ระบบ

Page 35: Linked Lists

การลบโหันดม� 2 ร�ปแบบ• การลับโหนดที#+ต์�าแหน&งแรก• การลับโหนดโดยที+วไป

Page 36: Linked Lists

การลบโหันดท��ต)าแหัน งแรก

Page 37: Linked Lists

การลบโหันดโดยท��วัไป

Page 38: Linked Lists

อ�ลกอร!ท-มการลบโหันดAlgorithm deleteNode (list, pPre, pLoc, dataOut)Delete data from list & returns it to calling module.

Pre list is metadata structure to a valid list pPre is pointer to predecessor node pLoc is a pointer to predecessor node pLoc is a pointer to node to be deleted

dataOut is variable to receive deleted dataPost data have been deleted and returned to caller

1 move pLoc data to dataOut2 if (pPre null) Deleting first node 1 set list head to pLoc link3 else Deleting other nodes 1 set pPre link to pLoc link4 end if5 recycle (pLoc) end deleteNode

Page 39: Linked Lists

การค์�นหัาข้�อม�ลในล!งก�ล!สต� (Search List)

• เป2นฟั9งก�ชิ +นที#+ใชิ�ส�าหรบคิ�นหาข้�อมู(ลัภายในลั�สต์�• สามูารถคิ�นพื้บได�จากอลักอร�ที)มูที#+ใชิ�งานร(ปแบบ

ต์&างๆ เชิ&น การแทีรกโหนด การลับโหนด การด)งข้�อมู(ลั

• ใชิ�ว�ธิ#การคิ�นหาข้�อมู(ลัแบบ Sequential Search หร�อเร#ยกอ#กอย&างหน)+งว&า Ordered List Search

• หลักการคิ�นหาข้�อมู(ลัจะใชิ�คิ#ย�เป2นต์วคิ�นหาdata key field1 field2 : fieldNend data

Page 40: Linked Lists

ตารางแสดงผลล�พื่ธ์�การค์�นหัาข้�อม�ลภายในล!สต�

เง��อนไข้(Conditions)

ต)าแหัน งต�วัก อนหัน�า

(pPre)

ต)าแหัน งท��ค์�นหัา (pLoc)

ร�เท!ร�นค์ า(Return)

Target < first node Null First node FalseTarget = first node Null First node TrueFirst < target < last Lastest node < target First node > target FalseTarget = middle node Node’s predecessor Equal node TrueTarget = last node Last’s predecessor Last node TrueTarget > last node Last node Null False

Page 41: Linked Lists

ต�วัอย างการค์�นหัาข้�อม�ลในล!สต�แบบเร�ยงล)าด�บ

Page 42: Linked Lists

อ�ลกอร!ท-มการค์�นหัาข้�อม�ลAlgorithm searchList (list, pPre, pLoc, target)Searches list and passes back address of node containing target and its logical predecessor.

Pre list is metadata structure to a valid list pPre is pointer variable for predecessor pLoc is pointer variable for current node target is the key being sought

Post pLoc points to first node with equal / greather key –or- null if target > key of last node pPre points to largest node smaller than key -or- null if target < key of first node

Return true if found, false if not found

Page 43: Linked Lists

อ�ลกอร!ท-มการค์�นหัาข้�อม�ล (ต อ)1 set pPre to null2 set pLoc to list head3 loop (pLoc not null AND target > pLoc key)

1 set pPre to pLoc2 set pLoc to pLoc link

4 end loop5 if (pLoc null)

set return value1 set found to false

6 else1 if (target equal pLoc key)

1 set found to true2 else

1 set found to false3 end if

7 end if8 return foundend searchList

Page 44: Linked Lists

การด-งข้�อม�ลจำากล!งก�ล!สต� (Retrieve Node)

• เป2นการด)งข้�อมู(ลัออกจากโหนดเพื้�+อน�าออกมูาใชิ�งาน

• เร�+มูต์�นด�วยการคิ�นหาโหนดจากต์�าแหน&งข้�อมู(ลัที#+ต์�องการ

• ถ�าพื้บจะที�าการเคิลั�+อนย�ายข้�อมู(ลัไปยงพื้��นที#+ เอาต์�พื้,ต์ในส&วนข้องโมูด(ลัที#+เร#ยกใชิ�งาน แลัะร#เที�ร�น

คิ&าต์รรกะเป2นจร�ง• ถ�าไมู&พื้บก3จะร#เที�ร�นคิ&าต์รรกะเป2นเที3จกลับไป

Page 45: Linked Lists

อ�ลกอร!ท-มการด-งข้�อม�ลAlgorithm retrieveNode (list, key, dataOut)Retrieves data from a list.

Pre list is metadata structure to a valid list Key is target of data to be retrieved dataOut is

variable to receive dataPost data placed in dataOut -or- error returned if

not foundReturn true if successful, false if data not found

1 set found to searchList (list, pPre, pLoc, key)2 if (found)

1 move pLoc data to dataOut3 end if4 return foundend retrieveNode

Page 46: Linked Lists

ล!สต�วั าง (Empty List)

• เป2นฟั9งก�ชิ +นที#+ใชิ�ต์รวจสอบว&าภายในลั�สต์�ว&างหร�อไมู&• เป2นโมูด(ลัแบบง&ายที#+ร #เที�ร�นคิ&าต์รรกะ ณ ข้ณะน�นกลับไป

• ร#เที�ร�นคิ&าต์รรกะเป2นจร�งกลับไปเมู�+อลั�สต์�ว&างในทีางต์รงกนข้�ามูก3จะร#เที�ร�นคิ&าต์รรกะเที3จกลับไป

Page 47: Linked Lists

อ�ลกอร!ท-มล!สต�วั างAlgorithm emptyList (list)Return Boolean indicating whether the list is empty.

Pre list is metadata structure to a valid listReturn true if list empty, false if list contains

data1 if (list count equal 0)

1 return true2 else

1 return falseend emptyList

Page 48: Linked Lists

ล!สต�เต0ม (Full List)

• เป2นฟั9งก�ชิ +นที#+ใชิ�ต์รวจสอบว&าภายในลั�สต์�น�นเต์3มูหร�อไมู&

• จดเป2นโมูด(ลัแบบง&ายเชิ&นกน ด�วยการร#เที�ร�นคิ&า ต์รรกะในข้ณะน�นกลับไป

• แต์&บางที#อาจไมู&จ�าเป2นต์�องใชิ� โดยเฉพื้าะในภาษา C เน�+องจากลั�งก�ลั�สต์�ใชิ�หน&วยคิวามูจ�าแบบไดนามู�ก

Page 49: Linked Lists

อ�ลกอร!ท-มล!สต�เต0มAlgorithm fullList (list)Returns Boolean indicating whether or not the list is full.

Pre list is metadata structure to a valid listReturn false if room for new node; true if

memory full1 if (memory full)

1 return true2 else

1 return false3 end if4 return trueend fullList

Page 50: Linked Lists

จำ)านวันสมาชื่!กในล!สต� (List Count)

• เป2นฟั9งก�ชิ +นที#+ภายในโมูด(ลัจะมู#เพื้#ยงประโยคิคิ�าส+ง เด#ยวเที&าน�น

• แจ�งจ�านวนสมูาชิ�กหร�อจ�านวนอ�ลั�เมูนต์�ที#+มู#อย(&ในข้ณะน�นให�กบโมูด(ลัที#+เร#ยก

Page 51: Linked Lists

อ�ลกอร!ท-มจำ)านวันสมาชื่!กในล!สต�Algorithm listCount (list)Returns integer representing number of nodes in list.

Pre list is metadata structure to a valid list

Return count for number of nodes in list1 return (list count)end listCount

Page 52: Linked Lists

การท องเข้�าไปในล!สต� (Traverse List)

• เร�+มูต์�นที#+โหนดแรก แลัะสแกนไปที#ลัะโหนดจนกระที+งส��นส,ดที#+โหนดส,ดที�าย

• ต์รรกะข้องการที&องเข้�าไปในลั�สต์� สามูารถใชิ�อลักอ ร�ที)มูเพื้�+อใชิ�งานได�อย&างหลัากหลัาย เชิ&น

– การเปลั#+ยนแปลังคิ&าในแต์&ลัะโหนด– การพื้�มูพื้�ข้�อมู(ลัภายในลั�สต์�– การคิ�านวณหาผลัรวมูข้องฟั:ลัด�ภายในลั�สต์�– การคิ�านวณหาคิ&าเฉลั#+ย

Page 53: Linked Lists

การท องเข้�าไปในล!สต� (Traverse List)

• มู#การก�าหนดต์ว Walking Pointer เพื้�+อให�พื้อยน�เต์อร�น#� เคิลั�+อนที#+จากโหนดไปยงโหนดในแต์&ลัะอ�ลั�เมูนต์�ที#+ได�โปรเซส

• โดยการมู#การก�าหนดลั(ปให�กบ Walking Pointer

set pWalk to list headloop (more nodes)

process (pWalker data)set pWalker to next link

end loop

Page 54: Linked Lists

การท องเข้�าไปในล!สต� (Traverse List)

• เร�+มูต์�นการต์�ดต์�ง Walking Pointer ที#+โหนดแรก ภายในลั�สต์�

• ที�าการประมูวลัผลัที&องไปที#ลัะโหนดเป2นลั�าดบ เร�+อยๆ ไป จนส,ดที�าย

• สามูาระออกแบบว�ธิ#การที&องเข้�าไปในลั�สต์�ได� 2 ว�ธิ#– ผ(�ใชิ�ก�าหนดการคิวบคิ,มูลั(ปด�วยการเร#ยกใชิ�ฟั9งก�ชิ +นเพื้�+อที&องไปยงอ�ลั�เมูนต์�ถดไปภายในลั�สต์�

– ใชิ�โมูด(ลัการที&องเข้�าไปในลั�สต์�ด�วยการเร#ยกใชิ�อลักอร�ที)มูที#+ได�เต์ร#ยมูมูาให�อย(&แลั�วมูาที�าการประมูวลัผลัข้�อมู(ลั

Page 55: Linked Lists

การท องเข้�าไปในล!สต� (Traverse List)

Page 56: Linked Lists

ต�วัอย างการใชื่�งานการท องเข้�าไปในล!สต�

Page 57: Linked Lists

อ�ลกอร!ท-มการท องไปในล!สต�Algorithm getNext (list, fromWhere, dataOut)Traverses a list. Each call returns the location of an element in the list.

Pre list is metadata structure to a valid list fromWhere is 0 to start at this first element

Post dataOut contains data and true returned -or- if end of list, returns false

Return true if next element located false if end of list

Page 58: Linked Lists

อ�ลกอร!ท-มการท องไปในล!สต� (ต อ)1 if (empty list)

1 return false2 if (fromWhere is beginning)

Start from first1 set list pos to list head2 move current list data to dataOut3 return true

3 elsecontinue from pos1 if (end of list)

End of list1 return false

2 else1 set list pos to next node2 move current list data to dataOut3 return true

3 end if4 end ifend getNext

Page 59: Linked Lists

การยกเล!กการใชื่�งานล!สต� (Destroy List)

• เมู�+อลั�สต์�ไมู&มู#คิวามูต์�องการที#+จะใชิ�งานต์&อไป จะถ(ก ยกเลั�กใชิ�งาน โดยใชิ�ฟั9งก�ชิ +น Destroy List

• ด�าเน�นการลับโหนดที,กโหนดที#+ยงคิงอย(&ภายในลั�สต์�ออกไปที�งหมูด

• ส&งคิ�นพื้��นที#+หน&วยคิวามูจ�าให�กบระบบ

Page 60: Linked Lists

อ�ลกอร!ท-มการยกเล!กการใชื่�งานล!สต�

Algorithm destroyList (pList)Deletes all data in list.

Pre list is metadata structure to a valid listPost all data deleted

1 loop (not at end of list)1 set list head to successor node2 release memory to heap

2 end loopNo data left in list. Reset metadata.

3 set list pos to null4 set list count to 0end destroyList

Page 61: Linked Lists

ล!งก�ล!สต�ชื่น!ดอ��นๆ• เซอร�คิ(ลัาร�ลั�งก�ลั�สต์� (Circular-Linked List)• ดบเบ�ลัลั�งก�ลั�สต์� (Double-Linked List)

Page 62: Linked Lists

เซอร�ค์�ลาร�ล!งก�ล!สต� (Circular-Linked List)

• เป2นลั�งก�ลั�สต์�ที#+จะใชิ�ลั�งก�ข้องโหนดส,ดที�ายเชิ�+อมูโยงไปยงโหนดแรกข้องลั�สต์�

Page 63: Linked Lists

ด�บเบ!ลล!งก�ล!สต� (Double-Linked List)

• เป2นลั�งก�ลั�สต์�ที#+มู#คิวามูสามูารถส(ง• แต์&ลัะโหนดจะประกอบไปด�วยพื้อยน�เต์อร� 2 ต์ว

โดยต์วแรกจะชิ#�ไปยงต์วถดไป (Successor) แลัะอ#ก ต์วหน)+งจะชิ#�ไปยงต์วก&อนหน�า (Predecessor)

Page 64: Linked Lists

ด�บเบ!ลล!งก�ล!สต� (Double-Linked List)

• ภายในโคิรงสร�างโหนดส&วนหว มู#ข้�อมู(ลั 3 ฟั:ลัด� คิ�อ ต์วนบ ต์�าแหน&งเฮดพื้อยน�เต์อร� แลัะพื้อยน�เต์อร�

ฟั:ลัด� rear • แต์&ะโหนดข้องดลัเบ�ลัลั�งก�ลั�สต์�จะบรรจ,ต์วชิ#�หร�อ

พื้อยน�เต์อร�อย(& 2 ต์ว– Backward pointer ที#+ชิ#�ไปยงข้�างหลัง คิ�อ ต์วก&อนหน�า

(Predecessor)– Forward pointer จะชิ#�ไปยงข้�างหน�า คิ�อต์วถดไป

(Successor)

Page 65: Linked Lists

ต�วัอย างการแทรกโหันดในด�บเบ!ลล!งก�ล!สต�

Page 66: Linked Lists

ต�วัอย างการแทรกโหันดในด�บเบ!ลล!งก�ล!สต�

Page 67: Linked Lists

ต�วัอย างการลบโหันดในด�บเบ!ลล!งก�ล!สต�

Page 68: Linked Lists

ต�วัอย างการสร�างล!งก�ล!สต�• ต์วอย&างการสร�างคิลัาสที#+ใชิ�แทีนโหนดหน)+งๆ ในลั�งก�ลั�สต์�

(SimpleNode.java)• ต์วอย&างการสร�างลั�งก�ลั�สต์�แบบทีางเด#ยว (SimpleLinkedList.java)• ต์วอย&างการน�าลั�งก�ลั�สต์�ที#+สร�างข้)�นมูาใชิ�งาน

(TestSimpleLinkedList.java)• สร�างลั�งก�ลั�สต์�ข้)�นมูา แลั�วน�าข้�อมู(ลัมูาเก3บลังไป 5 ชิ,ด• เน�+องจากข้�อมู(ลัถ(กเพื้�+มูเข้�าไปทีางหวข้องลั�งก�ลั�สต์� ที�าให�ข้�อมู(ลัที#+เก3บ

อย(&ในลั�งก�ลั�สต์� เร#ยงลั�าดบที#+ต์รงกนข้�ามู กบการเพื้�+มูข้�อมู(ลัเข้�าไป• น�าข้�อมู(ลั 6 แทีรกลังในลั�งก�ลั�สต์�ต์�าแหน&งถดจากโหนดที#+ 3 • ลับข้�อมู(ลัออกที#ลัะชิ,ดจนกลัายเป2นลั�งก�ลั�สต์�ว&าง

Page 69: Linked Lists

การน)าล!งก�ล!สต�ไปประย�กต�ใชื่�งาน• ลั�งก�ลั�สต์�ถ(กน�าไปใชิ�ในการเก3บข้�อมู(ลัที#+ไมู&ทีราบจ�านวนข้องข้�อมู(ลัที�งหมูด

• สามูารถเพื้�+มูข้�อมู(ลัเข้�าไปในโคิรงสร�างข้�อมู(ลัได�เร�+อยๆ• การเพื้�+มูหร�อลับข้�อมู(ลัสามูารถที�าได�ง&ายแลัะรวดเร3วโดยการก�าหนดคิ&าต์วชิ#�ใหมู&

• แต์&ลั�งก�ลั�สต์�มู#ข้�อเส#ยในเร�+องการเข้�าถ)งข้�อมู(ลั เน�+องจาก ต์�องอ&านข้�อมู(ลัไปต์ามูลั�าดบที#ลัะชิ,ดข้�อมู(ลั ที�าให�เมู�+อมู#ข้�อมู(ลั

จ�านวนมูาก จะต์�องใชิ�เวลัาพื้อสมูคิวร• ลั�งก�ลั�สต์�เหมูาะกบงานที#+มู#การเพื้�+มูแลัะลับข้�อมู(ลัอย(&ต์ลัอดแต์&มู#การเข้�ามูาอ&านข้�อมู(ลัที#+เก3บไว�น�อยคิร�ง

Page 70: Linked Lists

สร�ปท�ายบทท�� 4• ลั�สต์�เชิ�งเส�น มู# 2 ประเภที คิ�อ แบบส,&มู แลัะแบบเร#ยงลั�าดบ

• การด�าเน�นงานพื้��นฐานข้องลั�สต์� ประกอบด�วย การ แทีรก การลับ การอ&าน การที&องเข้�าไปในลั�สต์� การ

คิ�นหาลั�สต์�• เซอร�คิ(ลัาร�ลั�งก�ลั�สต์� คิ�อ ลั�งก�ฟั:ลัด�ข้องโหนดส,ดที�ายจะเชิ�+อมูโยงไปยงโหนดแรกข้องลั�สต์�

• ดบเบ�ลัลั�งก�ลั�สต์� แต์&ลัะโหนดจะมู#ต์วชิ#�หร�อพื้อยน� เต์อร� 2 ต์ว

Page 71: Linked Lists

Any Questions ?