ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
4 โครงสร้างข้อมูลแบบลิงค์ลิสต์ (LINKED LIST)
2
เหตุผลในการใช้งาน โครงสร้างข้อมูลแบบลิงค์ลิสต์
เนื่องจากการจัดเก็บข้อมูลแบบ Array จะต้องจองเนื้อที่ทั้งหมดที่จะใช้ไว้ก่อน เช่น ต้องการจัดเก็บข้อมูลจำนวน 1,000 ค่า แต่ละค่าใช้เนื้อที่ 2 byte เนื้อที่ทั้งหมดจะเป็น 2,000 byte ICOM114: DATA STRUCTURES AND COMPUTER PROGRAMMING TECHNIQUES
3
เหตุผลในการใช้งาน โครงสร้างข้อมูลแบบลิงค์ลิสต์
การใช้งานตัวแปรแบบ ARRAY จะต้องหาเนื้อที่ที่อยู่ติดกัน 2,000 byte ถึงแม้ว่าจะไม่ได้ใช้ทั้งหมด จะไม่สามารถนำไปใช้กับการจัดเก็บข้อมูลอื่น ๆ ได้ ถ้าไม่สามารถหาเนื้อที่ว่างติดกัน 2,000 byte ได้ ก็จะไม่สามารถใช้งานได้ เช่น ไม่สามารถสั่งให้โปรแกรมทำงาน (execute) ได้ ถึงแม้ว่าจะ compile ผ่านแล้วก็ตาม เพราะเมื่อมีการสั่งให้โปรแกรมทำงาน ตัวแปรทุกตัวที่ใช้จะต้องมีการจับจองเนื้อที่ใน หน่วยความจำ เมื่อไม่สามารถจับจองเนื้อที่ได้ compiler ของภาษาที่ใช้เขียนโปรแกรมอาจจะแจ้งข้อผิด พลาด (error) Out of memory Not enough memory Insufficiency memory
4
ปัญหาของตัวแปร Array ต้องได้เนื้อที่ว่างที่อยู่ติดกันตามจำนวนเนื้อที่ทั้งหมด ถ้ามีเนื้อที่ว่างดังนี้ จุดที่ 1 ว่าง 1,900 byte จุดที่ 2 ว่าง 800 byte จุดที่ 3 ว่าง 1,990 byte จุดที่ 4 ว่าง 10 byte จะเห็นว่าไม่มีจุดใดเลยที่มีเนื้อที่ว่างติดกัน 2,000 byte ดังนั้นโปรแกรมนี้ไม่สามารถทำงานได้ กรณีที่จองเนื้อที่ไว้ 2,000 byte เก็บข้อมูล 1,000 ค่า แต่การใช้งานจริง ๆ เก็บข้อมูลเพียง 100 ค่า ใช้เนื้อที่ไปเพียง 200 byte ทำให้เหลือเนื้อที่ที่ไม่ได้ใช้ 1,800 byte ซึ่งเนื้อที่ 1,800 byte จะถูกกันไว้ สำหรับตัวแปรนั้น ๆ ดังนั้นเนื้อที่ที่เหลือจะไม่สามารถนำไปใช้งานอื่นได้ กรณีที่จองเนื้อที่ไว้เก็บข้อมูล 1,000 ค่า แต่การใช้งานจริง ๆ ต้องการมากกว่า 1,000 ค่า เช่น ต้องการเพิ่ม อีก 2 ค่า ก็ไม่สามารถที่จะเพิ่มเติมข้อมูลได้ (จองไว้แค่ไหน ใช้แค่นั้น) จากปัญหาของ array ทั้ง 3 ข้อ สามารถแก้ปัญหาได้โดยใช้ linked lists
5
ลักษณะ Linked lists Linked lists จะไม่มีการจองเนื้อที่ หรือที่อยู่ (address)ใน memory ไว้ก่อน เมื่อต้องการใช้จึงจะทำการขอ เนื้อที่ ซึ่งก็จะทำการขอเนื้อที่สำหรับ 1 ค่า เมื่อต้องการใช้สำหรับข้อมูลต่อไป ก็จะทำการขอเนื้อที่อีก เนื้อที่ที่ ขอใหม่ ไม่จำเป็นต้องเป็นเนื้อที่ที่อยู่ติดกัน แต่เป็นเนื้อที่บริเวณใดก็ได้ ที่หาและพบว่าว่าง เมื่อเนื้อที่ไม่ได้อยู่ ติดกัน จะต้องมีตัวที่ทำหน้าที่จำว่าข้อมูลตัวต่อไปเก็บอยู่ที่ address ใด ซึ่งตัวที่ทำหน้าที่จำจะหมายถึงตัวที่ทำหน้าที่ เชื่อมระหว่างข้อมูลใด ๆ กับข้อมูลตัวต่อไป ซึ่งการเชื่อมนี้เรียกว่า link และเมื่อเชื่อมข้อมูลหลาย ๆ ค่าเข้าด้วยกัน 1 ชุด จะเรียกว่า list ข้อมูล 1 ค่า จะเรียกว่า node ซึ่งแต่ละ node จะประกอบด้วย ข้อมูลที่จัดเก็บ address ของ node (ข้อมูล) ต่อไป
6
COMPONENTS OF A LINKED LIST
DATA NEXT POINTER NODE POINTER is similar variable for contain the address of node if not point to any address of node called “NULL” pointer will hold the address of first node call “START” NODE DATA : contain the information NEXT : contain the address of next node in link list
7
ลักษณะของหน่วยความจำหลัก
DATA 0xFF000011 0xFF000012 0xFF000013 0xFF000014 0xFF000015 0xFF000016 0xFF000017 0xFF000018
8
LINKED LIST REPRESENTATION IN MEMORY
DATA START NODE A DATA DATA NODE B NODE C DATA 0x800010 0x80017 DATA 0x800031 DATA NULL 0x80010 0x80031
10
Linked lists แก้ปัญหา Array
แก้ปัญหาที่ 1 เนื่องจาก linked list จะขอเนื้อที่ครั้งละ 1 ค่า และเนื้อที่ที่ขอไม่จำเป็นต้องติดกัน ดังนั้น สามารถใช้เนื้อที่ ว่างตามจุดต่าง ๆ ได้ เช่น ต้องการเนื้อที่สำหรับข้อมูล 1,000 ค่า แต่ละ ค่าใช้ 2 byte ก็จะทำการขอเนื้อที่ทีละ 1 ค่า คือ 2 byte จำนวน 1,000 ครั้ง ซึ่งสามารถใช้เนื้อตามจุดที่ 1-4 ดังแสดงจุดที่ว่างในปัญหาของ array ข้อที่ 1ได้ แก้ปัญหาที่ 2 เนื่องจาก linked list จะขอเนื้อที่ครั้งละ 1 ค่า และขอเมื่อต้องการใช้ ดังนั้นจะไม่มีการสูญเสียเนื้อที่ใน memory ไปฟรี ๆ นั่นคือ ใช้เนื้อที่ตามจริง ต้องการแค่ไหนใช้เนื้อที่ไปแค่นั้น แก้ปัญหาข้อที่ 3 เนื่องจาก linked list จะขอเนื้อที่ไปได้เรื่อย ๆ ดังนั้นเมื่อมีข้อมูลเพิ่มก็สามารถขอเนื้อที่ได้อีกนั่นคือ ขอได้ไปเรื่อยๆ ไม่มีข้อจำกัด จนกว่า เนื้อที่ใน memory จะเต็ม (ไม่ว่าง )
11
ประเภทของ linked lists
Singly linked lists ( list ที่มี linked เดียว ) Doubly linked list ( list ที่มี 2 linked )
12
TYPES OF LINKED LIST Singly linked list Doubly linked list
Circular linked list DATA START NODE A NODE B START DATA DATA NODE A NODE B
13
OPERATION ON LINKED LIST
1. Creation 2. Insertion 3. Deletion 4. Traversing 5. Searching 6. Concatenation
14
INSERTION OPERATION INSERTION OPERATION ของ LINKED LISTS คือ
การเพิ่มโหนดที่ต้นลิงค์ลิสต์ (AT THE BEGINNING OF THE LINKED LIST) การเพิ่มโหนดต่อท้ายลิงค์ลิสต์ (AT THE END OF THE LINKED LIST) การเพิ่มโดยการแทรกระหว่างโหนด (AT ANY SPECIFIED POSITION IN BETWEEN IN A LINKED LIST)
15
DELETION OPERATION DELETION OPERATION ของ LINKED LISTS คือ
การลบโหนดที่ต้นลิงค์ลิสต์ (AT THE BEGINNING OF THE LINKED LIST) การลบโหนดที่ท้ายลิงค์ลิสต์ (AT THE END OF THE LINKED LIST) การลบใดๆระหว่างโหนด (AT ANY SPECIFIED POSITION IN BETWEEN IN A LINKED LIST)
16
Singly linked lists เป็น linked lists ที่มีการเก็บ link เดียว คือเก็บเฉพาะ link ของ node ต่อไป (next node) node ของ singly linked lists ประกอบด้วย
17
ตัวอย่าง Node แบบ Single Link List
18
ALGORITHM INSERT A NODE AT THE BEGINNING
1. Input DATA to be inserted 2. Create a NewNode 3. NewNode → DATA = DATA 4. If (START equal to NULL) (a) NewNode → Next = NULL 5. Else (a) NewNode → Next = START 6. START = NewNode 7. Exit
19
ALGORITHM INSERT A NODE AT THE END
1. Input DATA to be inserted 2. Create a NewNode 3. NewNode → DATA = DATA 4. NewNode → Next = NULL 5. If (START equal to NULL) (a) START = NewNode 6. Else (a) TEMP = START (b) While (TEMP → Next not equal to NULL) (i) TEMP = TEMP → Next 7. TEMP → Next = NewNode 8. Exit
20
ALGORITHM INSERT A NODE AT ANY SPECIFIED POSITION
1. Input DATA and POS to be inserted 2. initialize TEMP = START; and j = 0 3. Repeat the step 3 while( k is less than POS) (a) TEMP = TEMP è Next (b) If (TEMP is equal to NULL) (i) Display “Node in the list less than the position” (ii) Exit (c) k = k Create a New Node 5. NewNode → DATA = DATA 6. NewNode → Next = TEMP → Next 7. TEMP → Next = NewNode 8. Exit
21
การเพิ่มข้อมูลใน Single Link List
Insert ของ Singly linked lists กำหนดให้ตัวแปร F เก็บ address ของ node แรกของ list NP เก็บ address ของ node ที่ต้องการเพิ่ม การอ้างถึงรายการใน node เช่น อ้างถึงข้อมูล ของ node F จะระบุเป็น F data อ้างถึง next ของ node F จะระบุเป็น F next
22
การเพิ่มข้อมูลต่อท้าย list (Append Singly linked list)
23
คำถาม ? ถาม ทราบได้อย่างไรว่า list ว่าง ( ยังไม่มีข้อมูลใน list )
ตอบ เมื่อ F = null โดยการตรวจสอบว่า F มีค่าเป็น null หรือไม่ ถาม ทราบได้อย่างไร ว่า node ใดเป็น node สุดท้ายของ list ตอบ node ที่ next เป็น null โดยการตรวจสอบทีละ node ว่า next เป็น null หรือไม่ เริ่มจาก node แรก คือ node ที่ F (เพราะ F เป็นตัวแปรที่จำ address ของ node แรกของ list) ไปเรื่อย ๆ
24
แสดงในลักษณะ Link List
แสดงในลักษณะการเก็บข้อมูลจริง
25
ถาม ถ้า next ของ node F ไม่ใช่ null แล้วจะเลื่อนไป node ต่อไปได้อย่างไร
F เป็นตัวแปรที่จำ address ของ node แรก ดังนั้นจะได้ นั่นคือ ตัวแปร F อยู่ที่ address 100 และมีค่าเป็น 100 ซึ่งเป็น address ของ node แรก การที่จะเลื่อน F ไป node ต่อไป คือ ให้ F มีค่าเป็น address ของ node ที่ 2 คือ address 200 F --> data จะได้ 5 F --> next จะได้ 200 ดังนั้น ถ้าต้องการให้ F มีค่าเป็น node ต่อไป คือ มีค่าเป็น 200 จะได้ F = F --> next เพราะ F --> next มีค่าเป็น 200 แต่ถ้าเลื่อนไป node ต่อไป โดยใช้ตัวแปร F จุดเริ่มต้นของ list ก็จะหายไป ดังนั้น ตัวแปรที่เป็นตัวจำ node แรก ของ list จะต้องอยู่ที่ node แรกตลอด ดังนั้น กรณีที่ต้องการเลื่อนไปยัง node ถัดไป จะต้องใช้ตัวแปรเพิ่มอีก เพื่อ ทำหน้าที่ในการเลื่อน ( ซึ่งไม่ทำให้ค่าของ F เปลี่ยนไป ) ในที่นี้จะใช้ตัวแปร P ในการเลื่อน nod
26
ถ้าให้ P = F จะได้ ภาพเสมือนจะได้ดังต่อไปนี้
ถ้าให้ P = PNext จะได้ภาพเสมือนจะได้ดังต่อไปนี้
27
ตัวอย่างคำถาม คำถาม จะเชื่อมระหว่าง node ได้อย่างไร (link) คำตอบ
กำหนดให้ P และ NP เป็นดังนี้ ต้องการเชื่อมระหว่าง node P กับ node NP นั่นคือ ให้ next ของ node P มีค่าเป็น 400 ซึ่ง 400 จะเป็นค่าของ NP ดังนั้นจะระบุเป็น P next = NP จะได้ หรือ
28
ตัวอย่างโจทย์การใช้ลิงค์ลิสต์
จงเขียนขั้นตอนการทำงาน (Algorithm) ของการสร้างโครงสร้าง ข้อมูลแบบลิงค์ลิสต์และแสดงขั้นตอนการทำงานของแต่ละ ขั้นตอนในการเพิ่มข้อมูลแต่ละตัว เพื่อใส่ข้อมูลและเรียงข้อมูล จากน้อยไปมาก โดยมีข้อมูลสมมุติดังนี้ ตามลำดับ 8 , 5 , 9 , 3 , 6 , 4
29
Delete Node From Linked List
Pointer START Pointer เพื่อใช้ในการระบุถึงต้นของ Linked List TEMP Pointer เพื่อใช้ในการระบุถึง Node ที่ต้องการลบ HOLD Pointer เพื่อใช้ในการระบุถึง Node ที่ก่อนหน้า Temp
30
ALGORITHM FOR DELETING A NODE (#1)
1. Input the DATA to be deleted 2. if ((START → DATA) is equal to DATA) (a) TEMP = START (b) START = START → Next (c) Set free the node TEMP, which is deleted (d) Exit 3. HOLD = START
31
ALGORITHM FOR DELETING A NODE (#2)
4. while ((HOLD → Next → Next) not equal to NULL)) (a) if ((HOLD → NEXT → DATA) equal to DATA) (i) TEMP = HOLD → Next (ii) HOLD → Next = TEMP → Next (iii) Set free the node TEMP, which is deleted (iv) Exit (b) HOLD = HOLD → Next
32
ALGORITHM FOR DELETING A NODE (#3)
5. if ((HOLD → next → DATA) == DATA) (a) TEMP = HOLD → Next (b) Set free the node TEMP, which is deleted (c) HOLD → Next = NULL (d) Exit 6. Display “DATA not found” 7. Exit
33
20 30 33 34 NULL
34
Idea Hold Pointer ในการท่องเข้าไปใน Linked List เพื่อหา Node เป้าหมายที่จะเพิ่มหรือลบ Temp Pointer ในการระบุถึง Node เป้าหมายที่จะเพิ่มหรือลบ Hold อยู่หน้า Temp เพื่อให้สามารถเพิ่มหรือลบ Node ได้ *** ไม่ว่าจะเป็นการเพิ่มหรือลบ ควรจะมี Function ในการค้นหาเป้าหมายให้ได้ก่อน
35
ปรับปรุง Algorithm ในการค้นหา
จาก Algorithm ที่ให้จะได้ Temp Pointer ชี้อยู่ที่เป้าหมาย เพียงอย่างเดียว *** ปรับปรุง Algorithm ให้ได้ Temp Pointer และ Hold Pointer หลังจากค้นหาเป้าหมายเจอ Temp Pointer อยู่ที่เป้าหมาย Hold Pointer อยู่ที่หน้าเป้าหมาย
36
ALGORITHM FOR SEARCHING A NODE
1. Input the DATA to be searched 2. Initialize TEMP = START; POS =1; 3. Repeat the step 4, 5 and 6 until (TEMP is equal to NULL) 4. If (TEMP → DATA is equal to DATA) (a) Display “The data is found at POS” (b) Exit 5. TEMP = TEMP → Next 6. POS = POS+1 7. If (TEMP is equal to NULL) (a) Display “The data is not found in the list” 8. Exit
37
DOUBLY LINKED LIST All nodes are linked together by multiple links
Every nodes can reference to next node previous node Every nodes has three fields Left Pointer will hold the address of previous node DATA will store the information of the node Right Pointer will hold the address of next node L Pointer DATA R Pointer DOUBLY LINKED LIST NODE
38
REPRESENTATION OF DOUBLY LINKED LIST
39
ALGORITHM FOR INSERTING A NODE OF DOUBLY LINKED LIST
1. Input the DATA and POS 2. Initialize TEMP = START; i = 0 3. Repeat the step 4 if (i less than POS) and (TEMP is not equal to NULL) 4. TEMP = TEMP → RPoint; i = i +1 5. If (TEMP not equal to NULL) and (i equal to POS) (a) Create a New Node (b) NewNode → DATA = DATA (c) NewNode → RPoint = TEMP → RPoint (d) NewNode → LPoint = TEMP (e) (TEMP → RPoint) → LPoint = NewNode (f ) TEMP → RPoint = New Node 6. Else (a) Display “Position NOT found” 7. Exit
40
ตัวอย่าง Linked List จาก Linked List ที่กำหนดให้ 3 , 5 , 7 , 8
1) ให้เขียนขั้นตอนและหรือรูปภาพเพื่ออธิบายขั้นตอนการลบ Node 7 ออกจาก Linked List ทั้ง 2 แบบ Singly linked list Doubly linked list 2) ให้เขียนขั้นตอนและหรือรูปภาพเพื่ออธิบายขั้นตอนการเพิ่ม Node 11 หลัง Node 5 เข้าไปที่ Linked List ทั้ง 2 แบบ
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.