600 likes | 1.07k Views
1. Charter 4. โครงสร้างข้อมูลแบบลิงค์ลิสต์ Linked List. 2. Charter 4. โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List).
E N D
1 Charter 4 โครงสร้างข้อมูลแบบลิงค์ลิสต์ Linked List
2 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) จากการทำงานของโครงสร้างข้อมูลอาร์เรย์ (Array Structure) , โครงสร้างข้อมูลสแตก (Stack Structure) และโครงสร้างข้อมูลคิว (Queue Structure) มีลักษณะการจัดเก็บข้อมูลและการเข้าถึงข้อมูลในโครงสร้างแบบลำดับเป็นพื้นที่ต่อเนื่องกัน การใช้งานของโครงสร้างถูกจำกัดไว้ไม่สามารถทำการปรับเปลี่ยนหรือแก้ไขขนาดของโครงสร้างได้ หรือหากต้องการปรับเปลี่ยนโครงสร้างใหม่ จะทำให้เสียเวลาในการประมวลผล ซึ่งในการใช้งานโปรแกรมพื้นที่หน่วยความจำ (Memory) เป็นสิ่งจำเป็นมาก การแก้ไขปัญหาดังกล่าว โดยใช้โครงสร้างข้อมูลแบบอื่น ๆ เป็นสิ่งจำเป็นที่ต้องพิจารณาและยากมาก
3 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) จากแนวความคิดที่จะนำตัวชี้ (Pointer) มาใช้ตำแหน่งโครงสร้างข้อมูลซึ่งจะทำให้ไม่ต้องคอยกังวลในเรื่องของการกำหนดขนาดโครงสร้าง ทำให้คอมพิวเตอร์สามารถใช้งานพื้นที่หน่วยความจำได้เต็มประสิทธิภาพ ตัวชี้ (Pointer) บางครั้งเรียก ลิงค์ (Link) หรือ ตัวอ้างอิง (Reference) คือ การกำหนดตัวแปร (Variable) เพื่อเก็บตำแหน่งของตัวแปรอื่นๆ หรือโครงสร้างข้อมูลอื่น ๆ ที่ใช้อยู่ในโปรแกรม
4 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) Pointers to Structures
5 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์เป็นโครงสร้างข้อมูลแบบรายการเชิงเส้นที่มีลักษณะการดำเนินการเพิ่มข้อมูล (Insertion) หรือลบข้อมูล (Deletion) ออกจากโครงสร้าง สามารถกระทำที่ข้อมูลตรงตำแหน่งใด ๆ ในโครงสร้างก็ได้ ดังนั้น ลักษณะของโครงสร้างจึงมีความยืดหยุ่น (Flexible)กว่าและไม่มีขีดจำกัดด้านความจุของข้อมูลในโครงสร้าง แต่ขั้นตอนการดำเนินงานกับโครงสร้างลิงค์ลิสต์นี้มีความยุ่งยากและซับซ้อนมากกว่า
6 ลักษณะของโหนด DATA LINK ส่วนที่เก็บตำแหน่งที่อยู่ ของโหนดถัดไป ส่วนที่เก็บข้อมูล Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การแทนโครงสร้างข้อมูลลิงค์ลิสต์ • โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ประกอบด้วยส่วนสำคัญ 2 ส่วนรวมเป็นโครงสร้างเรียกว่า โหนด (Node)คือ • 1 .Data Link ทำหน้าที่เก็บข้อมูล • 2. Link Fieldทำหน้าที่เก็บตำแหน่งที่อยู่ของโครงสร้างสมาชิกตัวถัดไป
7 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ลักษณะของการเก็บข้อมูลและเชื่อมโยงโหนดอื่น ๆ ของลิงค์ลิสต์ เริ่มจากจุดเริ่มต้นของโครงสร้าง (Start Pointer) ซึ่งเป็นตัวแปรที่ทำหน้าที่เก็บตำแหน่งของข้อมูลที่อยู่โหนดแรกในโครงสร้างชี้ไปยังโครงสร้างข้อมูลชุดถัดไป และในโครงสร้างชุดดังกล่าวนี้ก็มี Pointer ชี้ไปยังโครงสร้างข้อมูลอื่น ๆ ต่อไปในลักษณะเดียว ส่วน Pointer ในโหนดสุดท้ายจะเก็บค่า NULL (ค่าว่าง) บางครั้งแทนตำแหน่งสุดท้ายในโครงสร้างด้วยสัญลักษณ์ทางไฟฟ้า เรียกว่า ground symbol) เป็นการแสดงตำแหน่งสุดท้ายในโครงสร้าง
8 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเชื่อมโยงของโครงสร้างลิงค์ลิสต์ (A linked list)
9 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การแทนลิงค์ลิสต์ ในพื้นที่หน่วยความ จำแบบหนึ่ง
10 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเข้าถึงข้อมูลภายในโครงสร้างลิงค์ลิสต์ การเข้าถึงข้อมูลภายในโครงสร้างลิงค์ลิสต์ จะต้องอาศัยพอยน์เตอร์ เป็นตัวเข้าไปในโครงสร้าง สมมติให้พอยน์เตอร์ดังกล่าว คือ PTR และทำหน้า ที่ชี้ตำแหน่งแอดเดรสของโหนดในโครงสร้าง เมื่อต้องการไปยังโหนดถัดไปก็ให้ ทำการเลื่อนตำแหน่งของพอยน์เตอร์ โดยตำแหน่งของโหนดถัดไปได้จากส่วน ของ LINK ในโหนดปัจจุบัน
11 PTR Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการเปลี่ยนพอยน์เตอร์เพื่อไปยังโหนดถัดไป ( PTR = LINK[PTR] )
12 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเข้าถึงข้อมูลในโครงสร้าง การเข้าถึงในโครงสร้างเรียกว่า การทำ Traversing มีขั้นตอนดังต่อไปนี้ กำหนดให้ DATA เป็นโครงสร้างข้อมูลลิงค์ลิสต์ และพอยน์เตอร์ PTR ทำหน้าที่ชี้โหนดที่กำลังดำเนินการ Process อยู่ในขณะนั้น (Current Node) 1. กำหนดค่าเริ่มต้นให้กับพอยน์เตอร์ PTR. 2. การวนรอบดำเนินการ Process ข้อมูล 3. Apply Process to DATA [PTR] 4. ปลี่ยนค่าพอยน์เตอร์ PTR ให้ชี้โหนดถัดไป 5. เสร็จสิ้นขั้นตอน
13 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List)
14 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การสร้างโหนดและกำหนดโครงสร้าง • การสร้างโหนด คือ การเตรียมโครงสร้างระเบียนสำหรับจัดเก็บข้อมูล เมื่อกำหนดโครงสร้างของโหนดแล้วก็สามารถกำหนดพอยน์เตอร์ และเขียนส่วนของโปรแกรมแสดงการประกาศโครงสร้างดังนี้ • struct node • { • int num ; • struck node *Link ; • } *Start, *Ptr ; • เมื่อ *Start คือ พอยน์เตอร์ที่ทำหน้าที่ชี้ตำแหน่งของโหนดแรกในโครงสร้าง • *Ptr คือ พอยน์เตอร์ที่ทำหน้าที่ชี้ตำแหน่งของโหนดปัจจุบัน
15 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) Storage Pool Storage Pool หรือ Free List หมายถึง เนื้อที่ว่างในหน่วยความจำ มีลักษณะเป็นโหนดเก็บอยู่ในโครงสร้างข้อมูลลิงค์ลิสต์ หรืออาจเรียกได้ว่าเป็น Free Stack ลักษณะการดำเนินการเหมือนกับโครงสร้างข้อมูลสแต็ก เมื่อมีการเพิ่มสมาชิกใหม่ในโครงสร้างข้อมูลลิงค์ลิสต์จะนำโหนดว่าง 1 โหนดออกมาจาก Free List (เป็นโหนดแรกใน Free List) จากนั้นใส่ข้อมูลลงไปในส่วนของ Data Field หลังจากนั้น นำโหนดดังกล่าวเชื่อมโยงเข้าไปไว้ในโครงสร้างข้อมูลที่ต้องการ และหากมีการลบสมาชิกตัวใดตัวหนึ่งออกจากโครงสร้างจะต้องนำโหนดที่ถูกลบนี้ใส่คืนใน Free List ไว้เป็นโหนดแรกใน Free List เสมอ
16 START DATA LIST p q AVAIL FREE LIST P P Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงโครงสร้างลิงค์ลิสต์ของ Free Storage List
17 Step (a) : NEW Avail ….. NULL AVAIL NEW Step (B) : AvailLink(Avail) ….. NULL NEW AVAIL Step (C) : NEW NULL ….. NULL NEW AVAIL Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการขอ New Node (Get Node)
18 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การเพิ่มข้อมูลในโครงสร้าง • เมื่อกำหนดโครงสร้างข้อมูลเรียบร้อยแล้ว ก็สามารถทำการเพิ่มข้อมูลในโครงสร้างได้ โดยการขอโหนดว่างจาก free list และนำมาเชื่อมโยงกับรายการข้อมูลที่มีอยู่เดิมในโครงสร้างตรงตำแหน่งที่ต้องการ • การเพิ่มข้อมูลในโครงสร้างข้อมูลลิงค์ลิสต์ อาจเกิดในลักษณะที่ต่างกัน ซึ่งสรุปได้เป็น 3 ลักษณะ คือ • 1. การเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง • 2. การเพิ่มข้อมูลต่อจากโหนดที่กำหนด • 3. การเพิ่มข้อมูลที่จุดสุดท้ายของโครงสร้าง
19 START ….. NEW NEW คือ โหนดว่างที่ได้จาก Storage Pool Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • แสดงการเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง
20 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลที่ตำแหน่งเริ่มต้นของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR ให้ชี้ไปที่โหนดของ FREE LIST 3.ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4.ให้โหนดใหม่ชี้ไปยังโหนดเริ่มต้นเดิมและเปลี่ยนตำแหน่งเริ่มต้นให้ชี้ไปยังโหนดใหม่
21 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การเพิ่มข้อมูลในโครงสร้าง • เมื่อกำหนดโครงสร้างข้อมูลเรียบร้อยแล้ว ก็สามารถทำการเพิ่มข้อมูลในโครงสร้างได้ โดยการขอโหนดว่างจาก free list และนำมาเชื่อมโยงกับรายการข้อมูลที่มีอยู่เดิมในโครงสร้างตรงตำแหน่งที่ต้องการ • การเพิ่มข้อมูลในโครงสร้างข้อมูลลิงค์ลิสต์ อาจเกิดในลักษณะที่ต่างกัน ซึ่งสรุปได้เป็น 3 ลักษณะ คือ • 1. การเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง • 2. การเพิ่มข้อมูลต่อจากโหนดที่กำหนด • 3. การเพิ่มข้อมูลที่จุดสุดท้ายของโครงสร้าง
22 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง เป็นการเพิ่มโหนดของข้อมูลไปยังตำแหน่งแรกของโครงสร้างลิงค์ลิสต์ โดยการเปลี่ยนค่าเริ่มต้นให้ชี้ไปยังตำแหน่งของโหนดใหม่ (NEW Node) ที่สร้างขึ้นและให้ Pointer ของโหดใหม่ชี้ไปยังตำแหน่งเริ่มต้นเดิมแทน
23 START ….. NEW NEW คือ โหนดว่างที่ได้จาก Storage Pool Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • แสดงการเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง
24 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลที่ตำแหน่งเริ่มต้นของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR ให้ชี้ไปที่โหนดของ FREE LIST 3.ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4.ให้โหนดใหม่ชี้ไปยังโหนดเริ่มต้นเดิม 5. เปลี่ยนตำแหน่งเริ่มต้นให้ชี้ไปยังโหนดใหม่
25 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเพิ่มข้อมูลต่อจากโหนดที่กำหนด เป็นการแทรกโหนดข้อมูลใหม่เข้าไประหว่างโหนดข้อมูล 2 โหนด โดยการเปลี่ยน Pionter ที่ชี้โหนดเก่าให้ชี้ไปยังตำแหน่งของโหนดใหม่ และ ให้ Poinnter ของโหนดใหม่ขี้ไปยังตำแหน่งเดิมแทน
26 Start NEW p q Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการเพิ่มข้อมูลต่อจากโหนดที่กำหนด
27 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลที่ตำแหน่งเริ่มต้นของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR ให้ชี้ไปที่โหนดของ FREE LIST 3. ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4. กำหนดค่าให้โหนดแรก ถ้า PTR = NULL ให้กำหนดโหนดใหม่เป็นจุดเริ่มต้น ถ้า PTR <> NULL ให้นำโหนดใหม่มาต่อ (PTR ชี้ไปที่โหนดใหม่)
28 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเพิ่มข้อมูลเป็นโหนดสุดท้ายของโครงสร้าง เป็นการนำโหนดข้อมูลใหม่มาต่อยังตำแหน่งท้ายสุดของโครงสร้าง (Pointer ของโหนดสุดท้ายมีค่าเป็น NULL) โดยการกำหนดให้ Pointer ของโหนดข้อมูลสุดท้าย ชี้ไปยังโหนดใหม่ และให้ Pointer ของ โหนดใหม่มีค่าเป็น NULL แทน
29 NEW NULL Start p q Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงขั้นตอนการเพิ่มข้อมูลเป็นโหนดสุดท้ายของโครงสร้าง
30 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลเป็นโหนดสุดท้ายของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR (ที่อยู่ตำแหน่งสุดท้าย) ให้ชี้ไปที่โหนดของ FREE LIST 3. ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4. กำหนด PTR ของโหนดใหม่มีค่าเป็นน NULL
31 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การลบข้อมูลจากโครงสร้าง การลบข้อมูลจากโครงสร้าง หมายถึง การดึงเอาโหนดที่ต้องการลบออกจากลิงค์ลิสต์ชุดเดิม ดังนั้น การเปลี่ยนแปลงที่เกิดขึ้นคือ การเปลี่ยนค่าพอยน์เตอร์และเมื่อทำการลบข้อมูลออกจากโครงสร้างแล้วจะต้องคืนโหนดที่ถูกลบให้กับ StoragePool เพื่อที่จะได้สามารถนำหน่วยความจำส่วนนั้นไปใช้งานต่อไป การลบข้อมูลออกจากโครงสร้างลิงค์ลิสต์ เกิดขึ้นได้หลายลักษณะสรุปได้ดังนี้ 1. การลบโหนดแรก 2. การลบโหนดที่อยู่หลังโหนดที่กำหนด 3. การลบโหนดสุดท้าย
32 Start p x q ข) หลังการลบข้อมูล Start p x q ก) ก่อนลบข้อมูล Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการลบโหนดออกจากโครงสร้างข้อมูลลิงค์ลิสต์
33 Start p x q Avail Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการลบโหนดและส่งโหนดคืนกลับ Storage Pool
34 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการลบโหนดมีดังนี้ 1. เก็บค่าตำแหน่งและค่าของ Pointer ของโหนดที่ต้องการล 2. กำหนดค่าของ Pointer ของโหนดที่ต้องการลบ ไปยังโหนดก่อนหน้านั้น 3. กำหนดตำแหน่งของโหนดที่ต้องการลบคืนกลับไปยัง Storage Pool
35 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ประเภทของโครงสร้างข้อมูลลิงค์ลิสต์ โครงสร้างข้อมูลลิงค์ลิสต์ แบ่งเป็น 2 กลุ่มใหญ่ ๆ ได้แก่ 1. โครงสร้างข้อมูลลิงค์ลิสต์เดี่ยว (Singly Linked List : SLL) 2. โครงสร้างข้อมูลลิงค์ลิสต์คู่ (Doubly Linked List : DLL)
36 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์เดี่ยว (SLL) แบ่งออกเป็น2 ประเภท 1. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary Singly Linked List คือโครงสร้างข้อมูลลิงค์ลิสต์ที่มีลักษณะเหมือนกับโครงสร้างข้อมูลลิงค์ลิสต์ที่กล่าวมาแล้วตั้งแต่ต้น 2. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circular Singly Linked List (CLL) มีลักษณะคล้ายกับแบบ SLL ทั่วไป เพียงแต่พอยน์เตอร์สามารถชี้กลับมายังตำแหน่งเริ่มต้นของโครงสร้างได้ โดยใช้พอยน์เตอร์ของโหนดสุดท้ายในโครงสร้างชี้ไปยังโหนดแรกทำให้โครงสร้างข้อมูลมีลักษณะเป็นวงกลม
37 START ….. HEAD Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงลักษณะของ Circular Singly Linked List แสดงลักษณะของ Empty Circular Singly Linked List
38 LLINK DATA RLINK Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์คู่ (Doubly Linked List) โครงสร้างข้อมูลลิงค์ลิสต์คู่ (DoublyLinkedList) เป็นโครงสร้างที่แต่ละโหนดข้อมูลสามารถชี้ตำแหน่งโหนดข้อมูลถัดไปได้ 2 ทิศทาง (มีพอยน์เตอร์ชี้ตำแหน่งอยู่สองทิศทาง) โดยมีพอยน์เตอร์อยู่ 2 ตัว คือ พอยน์เตอร์ LLINK ทำหน้าที่ชี้ไปยังโหนดด้านซ้ายของโหนดข้อมูลนั้น ๆ และ พอยน์เตอร์ RLINK ทำหน้าที่ชี้ไปยังโหนดด้านขวาของโหนดข้อมูลนั้น ๆ
39 LLINK DATA RLINK LLINK DATA RLINK LLINK DATA RLINK Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การใช้งานของโหนดข้อมูลแบบลิงค์ลิสต์คู่ คือ พอยน์เตอร์ LLINK จะชี้ไปยังโหนดด้านซ้ายของโหนดข้อมูลนั้น ๆ โดยพอย์เตอร์ที่โหนดข้อมูลสุดท้ายทางด้านซ้าย (LLINK ตัวสุดท้าย) จะมีค่าเป็น NULL และ พอยน์เตอร์ RLINK ทำหน้าที่ชี้ไปยังโหนดด้านขวาของโหนดข้อมูลนั้น ๆ โดยพอย์เตอร์ที่โหนดข้อมูลสุดท้ายทางด้านขวา (RLINK ตัวสุดท้าย) จะมีค่าเป็น NULL เช่นกัน ลักษณะการทำงานของโครงสร้างลิงค์ลิสต์คู่ (Doubly Linked List)
40 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • ชนิดของโครงสร้างข้อมูลลิงค์ลิสต์แบบ Doubly Linked List • แบ่งออกเป็น 2 แบบ คือ • 1. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary Doubly Linked List(ODLL) • 2. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly Doubly Linked List • (CDLL)
41 LLINK DATA RLINK LLINK DATA RLINK LLINK DATA RLINK NULL NULL HEAD Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary DLL โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary DLL คือ ลักษณะของโครงสร้างลิงค์ลิสต์ที่ส่วนของพอยน์เตอร์ที่ link ทางซ้าย (LLINK) ของโหนดซ้ายมือสุดและพอยน์เตอร์ที่ link ทางด้านขวาสุดของโครงสร้าง (RLINK) มีค่าเป็น NULL ทั้งคู่ เพื่อแสดงว่าเป็นโหนดสุดท้ายของโครงสร้างที่ปลายทั้งสองด้าน
42 p q n Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการเพิ่มโหนดข้อมูลเข้าสู่โครงสร้าง Ordinary DLL
43 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • ขั้นตอนการเพิ่มโหนดข้อมูลมีดังนี้ • 1. ตรวจสอบว่าโหนด n เป็นโหนดว่างหรือไม่ (ถ้าโหนด n มีค่าเป็น NULL แสดงว่าเป็นโหนดว่าง) • 2. ถ้าโหนด n ไม่เป็นโหนดว่าง ให้กำหนดพอยน์เตอร์ของ n • n -> r = p -> r • n -> l = q -> l • 3. กำหนดพอยน์เตอร์ p -> r ให้เป็นตำแหน่งของโหนด n • 4. กำหนดพอยน์เตอร์ q -> l ให้เป็นตำแหน่งของโหนด n • 5. ใส่ข้อมูลลงไปในโหนด n
44 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • ขั้นตอนการลบโหนดมีดังนี้ • 1. ตรวจสอบว่ามีข้อมูลหรือไม่ (ถ้าโหนด r และ l มีค่าเป็น start แสดงว่าไม่มีข้อมูล) • 2. ถ้ามีข้อมูล ให้กำหนดพอยน์เตอร์ของ p และ q • p -> r = d -> r • q -> l = d -> l • 3. คืนโหนดที่ลบให้กับระบบ
45 Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly DLL โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly DLLคือ ลักษณะของ Doubly linked list ที่มี Link ทางซ้าย (LLINK) ของโหนดซ้ายมือสุดเก็บตำแหน่งที่อยู่ของโหนดที่อยู่ทางขวามือสุดและ Link ทางด้านขวา (RLINK) ของโหนดขวามือสุดก็จะเก็บตำแหน่งที่อยู่ของโหนดที่อยู่ทางซ้ายมือสุด
46 LLINK DATA RLINK LLINK DATA RLINK LLINK DATA RLINK NULL Start Charter 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงโครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly DLL