1 / 46

โครงสร้างข้อมูลแบบลิงค์ลิสต์ Linked List

1. โครงสร้างข้อมูลแบบลิงค์ลิสต์ Linked List. 2. โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List).

carter-mays
Download Presentation

โครงสร้างข้อมูลแบบลิงค์ลิสต์ Linked List

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1 โครงสร้างข้อมูลแบบลิงค์ลิสต์ Linked List

  2. 2 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) จากการทำงานของโครงสร้างข้อมูลอาร์เรย์ (Array Structure) , โครงสร้างข้อมูลสแตก(Stack Structure) และโครงสร้างข้อมูลคิว (Queue Structure) มีลักษณะการจัดเก็บข้อมูลและการเข้าถึงข้อมูลในโครงสร้างแบบลำดับเป็นพื้นที่ต่อเนื่องกัน การใช้งานของโครงสร้างถูกจำกัดไว้ไม่สามารถทำการปรับเปลี่ยนหรือแก้ไขขนาดของโครงสร้างได้ หรือหากต้องการปรับเปลี่ยนโครงสร้างใหม่ จะทำให้เสียเวลาในการประมวลผล ซึ่งในการใช้งานโปรแกรมพื้นที่หน่วยความจำ (Memory) เป็นสิ่งจำเป็นมาก การแก้ไขปัญหาดังกล่าว โดยใช้โครงสร้างข้อมูลแบบอื่น ๆ เป็นสิ่งจำเป็นที่ต้องพิจารณาและยากมาก

  3. 3 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ลักษณะของลิงค์ลิสต์ เป็นโครงสร้างข้อมูลชนิดไม่เป็นเชิงเส้น (Non Linear Structure)คือ จัดเก็บข้อมูลในหน่วยความจำแบบไม่ต่อเนื่องกัน การเขียนโปรแกรมจะใช้พอยเตอร์(Pointer) ไม่จำเป็นต้องระบุจำนวนของข้อมูลที่จัดเก็บ เนื่องจากสามารถขอหน่วยความจำใหม่ได้ เมื่อต้องการจัดเก็บข้อมูลเพิ่ม จำทำให้ไม่ต้องระบุจำนวนข้อมูลที่จะจัดเก็บไว้ตั้งแต่ตอนกำหนดตัวแปร ขนาดของหน่วยความจำที่ใช้เท่ากับข้อมูลที่จัดเก็บ คือ หน่วยความจำที่ใช้งานจะพอดีกับข้อมูลเพราะไม่ได้ระบุขนาดไว้ก่อนจำทำให้ไม่มีหน่วยความจำที่จองไว้เหลือเหมือนการใช้อารืเรย์ ต้องมีพอยเตอร์ชี้โหนดแรก หากไม่มีพอยเอตร์ทีจำตำแหน่งที่อยู่ของโหนดแรกแล้วก็จะไม่สามารถเข้าถึงข้อมูลที่จัดเก็บในโหนดต่างๆ ได้

  4. 4 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) จากแนวความคิดที่จะนำตัวชี้ (Pointer) มาใช้ตำแหน่งโครงสร้างข้อมูลซึ่งจะทำให้ไม่ต้องคอยกังวลในเรื่องของการกำหนดขนาดโครงสร้าง ทำให้คอมพิวเตอร์สามารถใช้งานพื้นที่หน่วยความจำได้เต็มประสิทธิภาพ ตัวชี้ (Pointer) บางครั้งเรียก ลิงค์ (Link) หรือ ตัวอ้างอิง (Reference) คือ การกำหนดตัวแปร (Variable) เพื่อเก็บตำแหน่งของตัวแปรอื่นๆ หรือโครงสร้างข้อมูลอื่น ๆ ที่ใช้อยู่ในโปรแกรม

  5. 5 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์เป็นโครงสร้างข้อมูลแบบรายการเชิงเส้นที่มีลักษณะการดำเนินการเพิ่มข้อมูล (Insertion) หรือลบข้อมูล (Deletion) ออกจากโครงสร้าง สามารถกระทำที่ข้อมูลตรงตำแหน่งใด ๆ ในโครงสร้างก็ได้ ดังนั้น ลักษณะของโครงสร้างจึงมีความยืดหยุ่น (Flexible)กว่าและไม่มีขีดจำกัดด้านความจุของข้อมูลในโครงสร้าง แต่ขั้นตอนการดำเนินงานกับโครงสร้างลิงค์ลิสต์นี้มีความยุ่งยากและซับซ้อนมากกว่า

  6. 6 ลักษณะของโหนด DATA LINK ส่วนที่เก็บตำแหน่งที่อยู่ ของโหนดถัดไป ส่วนที่เก็บข้อมูล โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การแทนโครงสร้างข้อมูลลิงค์ลิสต์ • โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ประกอบด้วยส่วนสำคัญ 2 ส่วนรวมเป็นโครงสร้างเรียกว่า โหนด (Node)คือ • 1 .Data Link ทำหน้าที่เก็บข้อมูล • 2. Link Field ทำหน้าที่เก็บตำแหน่งที่อยู่ของโครงสร้างสมาชิกตัวถัดไป

  7. 7 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ลักษณะของการเก็บข้อมูลและเชื่อมโยงโหนดอื่น ๆ ของลิงค์ลิสต์ เริ่มจากจุดเริ่มต้นของโครงสร้าง (Start Pointer) ซึ่งเป็นตัวแปรที่ทำหน้าที่เก็บตำแหน่งของข้อมูลที่อยู่โหนดแรกในโครงสร้างชี้ไปยังโครงสร้างข้อมูลชุดถัดไป และในโครงสร้างชุดดังกล่าวนี้ก็มี Pointer ชี้ไปยังโครงสร้างข้อมูลอื่น ๆ ต่อไปในลักษณะเดียว ส่วน Pointer ในโหนดสุดท้ายจะเก็บค่า NULL (ค่าว่าง) บางครั้งแทนตำแหน่งสุดท้ายในโครงสร้างด้วยสัญลักษณ์ทางไฟฟ้า เรียกว่า ground symbolเป็นการแสดงตำแหน่งสุดท้ายในโครงสร้าง หรือ

  8. 8 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเชื่อมโยงของโครงสร้างลิงค์ลิสต์ (A linked list)

  9. 9 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การแทนลิงค์ลิสต์ในพื้นที่หน่วยความจำแบบหนึ่ง

  10. 10 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเข้าถึงข้อมูลภายในโครงสร้างลิงค์ลิสต์ การเข้าถึงข้อมูลภายในโครงสร้างลิงค์ลิสต์ จะต้องอาศัยพอยน์เตอร์ เป็นตัวเข้าไปในโครงสร้าง สมมติให้พอยน์เตอร์ดังกล่าว คือ PTR และทำหน้า ที่ชี้ตำแหน่งแอดเดรสของโหนดในโครงสร้าง เมื่อต้องการไปยังโหนดถัดไปก็ให้ ทำการเลื่อนตำแหน่งของพอยน์เตอร์ โดยตำแหน่งของโหนดถัดไปได้จากส่วน ของ LINK ในโหนดปัจจุบัน

  11. 11 PTR โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการเปลี่ยนพอยน์เตอร์เพื่อไปยังโหนดถัดไป ( PTR = LINK[PTR] )

  12. 12 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเข้าถึงข้อมูลในโครงสร้าง การเข้าถึงในโครงสร้างเรียกว่าการทำ Traversingมีขั้นตอนดังต่อไปนี้ กำหนดให้ DATA เป็นโครงสร้างข้อมูลลิงค์ลิสต์และพอยน์เตอร์ PTR ทำหน้าที่ชี้โหนดที่กำลังดำเนินการ Process อยู่ในขณะนั้น (Current Node) 1. กำหนดค่าเริ่มต้นให้กับพอยน์เตอร์ PTR. 2. การวนรอบดำเนินการ Process ข้อมูล 3. Apply Process to DATA [PTR] 4. ปลี่ยนค่าพอยน์เตอร์ PTR ให้ชี้โหนดถัดไป 5. เสร็จสิ้นขั้นตอน

  13. 13 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List)

  14. 14 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การสร้างโหนดและกำหนดโครงสร้าง • การสร้างโหนด คือ การเตรียมโครงสร้างระเบียนสำหรับจัดเก็บข้อมูล เมื่อกำหนดโครงสร้างของโหนดแล้วก็สามารถกำหนดพอยน์เตอร์ และเขียนส่วนของโปรแกรมแสดงการประกาศโครงสร้างดังนี้ • structnode • { • intnum ; • strucknode *Link ; • } *Start, *Ptr ; • เมื่อ *Start คือ พอยน์เตอร์ที่ทำหน้าที่ชี้ตำแหน่งของโหนดแรกในโครงสร้าง • *Ptr คือ พอยน์เตอร์ที่ทำหน้าที่ชี้ตำแหน่งของโหนดปัจจุบัน

  15. 15 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) StoragePool StoragePool หรือ FreeList หมายถึง เนื้อที่ว่างในหน่วยความจำ มีลักษณะเป็นโหนดเก็บอยู่ในโครงสร้างข้อมูลลิงค์ลิสต์ หรืออาจเรียกได้ว่าเป็น FreeStack ลักษณะการดำเนินการเหมือนกับโครงสร้างข้อมูลสแต็ก เมื่อมีการเพิ่มสมาชิกใหม่ในโครงสร้างข้อมูลลิงค์ลิสต์จะนำโหนดว่าง 1 โหนดออกมาจาก FreeList (เป็นโหนดแรกใน FreeList) จากนั้นใส่ข้อมูลลงไปในส่วนของ DataField หลังจากนั้น นำโหนดดังกล่าวเชื่อมโยงเข้าไปไว้ในโครงสร้างข้อมูลที่ต้องการ และหากมีการลบสมาชิกตัวใดตัวหนึ่งออกจากโครงสร้างจะต้องนำโหนดที่ถูกลบนี้ใส่คืนใน Free List ไว้เป็นโหนดแรกใน Free List เสมอ

  16. 16 START DATA LIST p q AVAIL FREE LIST P P โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงโครงสร้างลิงค์ลิสต์ของ Free Storage List

  17. 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. 18 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การเพิ่มข้อมูลในโครงสร้าง • เมื่อกำหนดโครงสร้างข้อมูลเรียบร้อยแล้ว ก็สามารถทำการเพิ่มข้อมูลในโครงสร้างได้ โดยการขอโหนดว่างจาก free list และนำมาเชื่อมโยงกับรายการข้อมูลที่มีอยู่เดิมในโครงสร้างตรงตำแหน่งที่ต้องการ • การเพิ่มข้อมูลในโครงสร้างข้อมูลลิงค์ลิสต์ อาจเกิดในลักษณะที่ต่างกัน ซึ่งสรุปได้เป็น 3 ลักษณะ คือ • 1. การเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง • 2. การเพิ่มข้อมูลต่อจากโหนดที่กำหนด • 3. การเพิ่มข้อมูลที่จุดสุดท้ายของโครงสร้าง

  19. 19 START ….. NEW NEW คือ โหนดว่างที่ได้จาก Storage Pool โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • แสดงการเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง

  20. 20 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลที่ตำแหน่งเริ่มต้นของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR ให้ชี้ไปที่โหนดของ FREE LIST 3.ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4.ให้โหนดใหม่ชี้ไปยังโหนดเริ่มต้นเดิมและเปลี่ยนตำแหน่งเริ่มต้นให้ชี้ไปยังโหนดใหม่

  21. 21 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • การเพิ่มข้อมูลในโครงสร้าง • เมื่อกำหนดโครงสร้างข้อมูลเรียบร้อยแล้ว ก็สามารถทำการเพิ่มข้อมูลในโครงสร้างได้ โดยการขอโหนดว่างจาก free list และนำมาเชื่อมโยงกับรายการข้อมูลที่มีอยู่เดิมในโครงสร้างตรงตำแหน่งที่ต้องการ • การเพิ่มข้อมูลในโครงสร้างข้อมูลลิงค์ลิสต์ อาจเกิดในลักษณะที่ต่างกัน ซึ่งสรุปได้เป็น 3 ลักษณะ คือ • 1. การเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง • 2. การเพิ่มข้อมูลต่อจากโหนดที่กำหนด • 3. การเพิ่มข้อมูลที่จุดสุดท้ายของโครงสร้าง

  22. 22 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง เป็นการเพิ่มโหนดของข้อมูลไปยังตำแหน่งแรกของโครงสร้างลิงค์ลิสต์ โดยการเปลี่ยนค่าเริ่มต้นให้ชี้ไปยังตำแหน่งของโหนดใหม่ (NEW Node) ที่สร้างขึ้นและให้ Pointer ของโหดใหม่ชี้ไปยังตำแหน่งเริ่มต้นเดิมแทน

  23. 23 START ….. NEW NEW คือ โหนดว่างที่ได้จาก Storage Pool โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • แสดงการเพิ่มข้อมูลที่จุดเริ่มต้นของโครงสร้าง

  24. 24 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลที่ตำแหน่งเริ่มต้นของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR ให้ชี้ไปที่โหนดของ FREE LIST 3.ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4.ให้โหนดใหม่ชี้ไปยังโหนดเริ่มต้นเดิม 5. เปลี่ยนตำแหน่งเริ่มต้นให้ชี้ไปยังโหนดใหม่

  25. 25 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเพิ่มข้อมูลต่อจากโหนดที่กำหนด เป็นการแทรกโหนดข้อมูลใหม่เข้าไประหว่างโหนดข้อมูล 2 โหนด โดยการเปลี่ยน Pionterที่ชี้โหนดเก่าให้ชี้ไปยังตำแหน่งของโหนดใหม่ และ ให้ Poinnterของโหนดใหม่ขี้ไปยังตำแหน่งเดิมแทน

  26. 26 Start NEW p q โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการเพิ่มข้อมูลต่อจากโหนดที่กำหนด

  27. 27 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลที่ตำแหน่งเริ่มต้นของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR ให้ชี้ไปที่โหนดของ FREE LIST 3. ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4. กำหนดค่าให้โหนดแรก ถ้า PTR = NULL ให้กำหนดโหนดใหม่เป็นจุดเริ่มต้น ถ้า PTR <> NULL ให้นำโหนดใหม่มาต่อ (PTR ชี้ไปที่โหนดใหม่)

  28. 28 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การเพิ่มข้อมูลเป็นโหนดสุดท้ายของโครงสร้าง เป็นการนำโหนดข้อมูลใหม่มาต่อยังตำแหน่งท้ายสุดของโครงสร้าง (Pointer ของโหนดสุดท้ายมีค่าเป็น NULL) โดยการกำหนดให้ Pointer ของโหนดข้อมูลสุดท้าย ชี้ไปยังโหนดใหม่ และให้ Pointer ของ โหนดใหม่มีค่าเป็น NULL แทน

  29. 29 NEW NULL Start p q โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงขั้นตอนการเพิ่มข้อมูลเป็นโหนดสุดท้ายของโครงสร้าง

  30. 30 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการเพิ่มข้อมูลเป็นโหนดสุดท้ายของโครงสร้าง 1. ตรวจสอบ OVERFLOW ถ้าโหนดใหม่มีค่าเป็น NULL แสดงว่า OVERFLOW 2. กำหนด PTR (ที่อยู่ตำแหน่งสุดท้าย) ให้ชี้ไปที่โหนดของ FREE LIST 3. ใส่ข้อมูลใหม่ลงไปในโหนดใหม่ 4. กำหนด PTR ของโหนดใหม่มีค่าเป็นนNULL

  31. 31 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การลบข้อมูลจากโครงสร้าง การลบข้อมูลจากโครงสร้าง หมายถึง การดึงเอาโหนดที่ต้องการลบออกจากลิงค์ลิสต์ชุดเดิม ดังนั้น การเปลี่ยนแปลงที่เกิดขึ้นคือ การเปลี่ยนค่าพอยน์เตอร์และเมื่อทำการลบข้อมูลออกจากโครงสร้างแล้วจะต้องคืนโหนดที่ถูกลบให้กับ StoragePool เพื่อที่จะได้สามารถนำหน่วยความจำส่วนนั้นไปใช้งานต่อไป การลบข้อมูลออกจากโครงสร้างลิงค์ลิสต์ เกิดขึ้นได้หลายลักษณะสรุปได้ดังนี้ 1. การลบโหนดแรก 2. การลบโหนดที่อยู่หลังโหนดที่กำหนด 3. การลบโหนดสุดท้าย

  32. 32 Start p x q ข) หลังการลบข้อมูล Start p x q ก) ก่อนลบข้อมูล โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการลบโหนดออกจากโครงสร้างข้อมูลลิงค์ลิสต์

  33. 33 Start p x q Avail โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการลบโหนดและส่งโหนดคืนกลับ Storage Pool

  34. 34 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ขั้นตอนการลบโหนดมีดังนี้ 1. เก็บค่าตำแหน่งและค่าของ Pointer ของโหนดที่ต้องการล 2. กำหนดค่าของ Pointer ของโหนดที่ต้องการลบ ไปยังโหนดก่อนหน้านั้น 3. กำหนดตำแหน่งของโหนดที่ต้องการลบคืนกลับไปยัง Storage Pool

  35. 35 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) ประเภทของโครงสร้างข้อมูลลิงค์ลิสต์ โครงสร้างข้อมูลลิงค์ลิสต์ แบ่งเป็น 2 กลุ่มใหญ่ ๆ ได้แก่ 1. โครงสร้างข้อมูลลิงค์ลิสต์เดี่ยว (Singly Linked List : SLL) 2. โครงสร้างข้อมูลลิงค์ลิสต์คู่ (Doubly Linked List : DLL)

  36. 36 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์เดี่ยว (SLL) แบ่งออกเป็น2 ประเภท 1. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary Singly Linked List คือโครงสร้างข้อมูลลิงค์ลิสต์ที่มีลักษณะเหมือนกับโครงสร้างข้อมูลลิงค์ลิสต์ที่กล่าวมาแล้วตั้งแต่ต้น 2. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circular Singly Linked List (CLL) มีลักษณะคล้ายกับแบบ SLL ทั่วไป เพียงแต่พอยน์เตอร์สามารถชี้กลับมายังตำแหน่งเริ่มต้นของโครงสร้างได้ โดยใช้พอยน์เตอร์ของโหนดสุดท้ายในโครงสร้างชี้ไปยังโหนดแรกทำให้โครงสร้างข้อมูลมีลักษณะเป็นวงกลม

  37. 37 START ….. HEAD โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงลักษณะของ Circular Singly Linked List แสดงลักษณะของ Empty Circular Singly Linked List

  38. 38 LLINK DATA RLINK โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์คู่ (Doubly Linked List) โครงสร้างข้อมูลลิงค์ลิสต์คู่ (DoublyLinkedList) เป็นโครงสร้างที่แต่ละโหนดข้อมูลสามารถชี้ตำแหน่งโหนดข้อมูลถัดไปได้ 2 ทิศทาง (มีพอยน์เตอร์ชี้ตำแหน่งอยู่สองทิศทาง) โดยมีพอยน์เตอร์อยู่ 2 ตัว คือ พอยน์เตอร์LLINK ทำหน้าที่ชี้ไปยังโหนดด้านซ้ายของโหนดข้อมูลนั้น ๆ และ พอยน์เตอร์RLINK ทำหน้าที่ชี้ไปยังโหนดด้านขวาของโหนดข้อมูลนั้น ๆ

  39. 39 LLINK DATA RLINK LLINK DATA RLINK LLINK DATA RLINK โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) การใช้งานของโหนดข้อมูลแบบลิงค์ลิสต์คู่ คือ พอยน์เตอร์LLINK จะชี้ไปยังโหนดด้านซ้ายของโหนดข้อมูลนั้น ๆ โดยพอย์เตอร์ที่โหนดข้อมูลสุดท้ายทางด้านซ้าย (LLINK ตัวสุดท้าย) จะมีค่าเป็น NULL และ พอยน์เตอร์RLINK ทำหน้าที่ชี้ไปยังโหนดด้านขวาของโหนดข้อมูลนั้น ๆ โดยพอย์เตอร์ที่โหนดข้อมูลสุดท้ายทางด้านขวา (RLINK ตัวสุดท้าย) จะมีค่าเป็น NULL เช่นกัน ลักษณะการทำงานของโครงสร้างลิงค์ลิสต์คู่ (Doubly Linked List)

  40. 40 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • ชนิดของโครงสร้างข้อมูลลิงค์ลิสต์แบบ Doubly Linked List • แบ่งออกเป็น 2 แบบ คือ • 1. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary Doubly Linked List(ODLL) • 2. โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly Doubly Linked List • (CDLL)

  41. 41 LLINK DATA RLINK LLINK DATA RLINK LLINK DATA RLINK NULL NULL HEAD โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary DLL โครงสร้างข้อมูลลิงค์ลิสต์แบบ Ordinary DLL คือ ลักษณะของโครงสร้างลิงค์ลิสต์ที่ส่วนของพอยน์เตอร์ที่ link ทางซ้าย (LLINK) ของโหนดซ้ายมือสุดและพอยน์เตอร์ที่ link ทางด้านขวาสุดของโครงสร้าง (RLINK) มีค่าเป็น NULL ทั้งคู่ เพื่อแสดงว่าเป็นโหนดสุดท้ายของโครงสร้างที่ปลายทั้งสองด้าน

  42. 42 p q n โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงการเพิ่มโหนดข้อมูลเข้าสู่โครงสร้าง Ordinary DLL

  43. 43 โครงสร้างข้อมูลลิงค์ลิสต์ (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. 44 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) • ขั้นตอนการลบโหนดมีดังนี้ • 1. ตรวจสอบว่ามีข้อมูลหรือไม่ (ถ้าโหนดr และ l มีค่าเป็น start แสดงว่าไม่มีข้อมูล) • 2. ถ้ามีข้อมูล ให้กำหนดพอยน์เตอร์ของ p และ q • p -> r = d -> r • q -> l = d -> l • 3. คืนโหนดที่ลบให้กับระบบ

  45. 45 โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly DLL โครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly DLLคือ ลักษณะของ Doubly linked list ที่มี Link ทางซ้าย (LLINK) ของโหนดซ้ายมือสุดเก็บตำแหน่งที่อยู่ของโหนดที่อยู่ทางขวามือสุดและ Link ทางด้านขวา (RLINK) ของโหนดขวามือสุดก็จะเก็บตำแหน่งที่อยู่ของโหนดที่อยู่ทางซ้ายมือสุด

  46. 46 LLINK DATA RLINK LLINK DATA RLINK LLINK DATA RLINK NULL Start โครงสร้างข้อมูลลิงค์ลิสต์ (Linked List) แสดงโครงสร้างข้อมูลลิงค์ลิสต์แบบ Circularly DLL

More Related