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

Download Report

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

1
โครงสร ้างข้อมู ลแบบ
ลิงค ์ลิสต ์
Linked List
2
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
จากการทางานของโครงสร ้างข ้อมูลอาร์เรย์
(Array Structure) , โครงสร ้างข ้อมูลสแตก (Stack
Structure) และโครงสร ้างข ้อมูลคิว (Queue
Structure) มีลักษณะการจัดเก็บข ้อมูลและการ
เข ้าถึงข ้อมูลในโครงสร ้างแบบลาดับเป็ นพืน
้ ที่
้
ต่อเนือ
่ งกัน การใชงานของโครงสร
้างถูกจากัดไว ้ไม่
สามารถทาการปรับเปลีย
่ นหรือแก ้ไขขนาดของ
โครงสร ้างได ้ หรือหากต ้องการปรับเปลีย
่ น
ี เวลาในการประมวลผล
โครงสร ้างใหม่ จะทาให ้เสย
้
ซงึ่ ในการใชงานโปรแกรมพื
น
้ ทีห
่ น่วยความจา
(Memory) เป็ นสงิ่ จาเป็ นมาก การแก ้ไขปั ญหา
้
ดังกล่าว โดยใชโครงสร
้างข ้อมูลแบบอืน
่ ๆ เป็ น
สงิ่ จาเป็ นทีต
่ ้องพิจารณาและยากมาก
3
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)

ื่ มโยงต่อเนือ
เป็ นการจัดเก็บชุดข ้อมูลเชอ
่ งกัน
ไปตามลาดับ โครงสร ้างข ้อมูลแบบลิงค์ลส
ิ ต์
จะประกอบไปด ้วยสว่ นทีเ่ รียกว่า สมาชิก (
Node) สว่ น เก็บข ้อมูล (Data) และตาแหน่ งของ
อาร ์เรย ์(A
สมาชิ
กตัวถัดไป (Link)
rray)
ลิงค ์ลิสต ์
(Linked
List)
4
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
ลักษณะของลิงค ์ลิสต ์
1. เป็ นโครงสร ้างข้อมู ลชนิ ดไม่เป็ นเชิงเส้น (Non
Linear Structure) คือ จัดเก็บข ้อมูลใน
หน่วยความจาแบบไม่ตอ
่ เนือ
่ งกัน การเขียน
้
จะใชพอยเตอร์
(Pointer)
่ ดเก็บ
2. ไม่จาเป็ นต้องระบุจานวนของข้อมู ลทีจั
เนือ
่ งจากสามารถขอหน่วยความจาใหม่ได ้ เมือ
่
ต ้องการจัดเก็บข ้อมูลเพิม
่ จาทาให ้ไม่ต ้องระบุ
ข ้อมูลทีจ
่ ะจัดเก็บไว ้ตัง้ แต่ตอนกาหนดตัวแปร
่ เท่าก ับข้อมู ลที่
3. ขนาดของหน่ วยความจาทีใช้
้
จัดเก็บ คือ หน่วยความจาทีใ่ ชงานจะพอดี
กบ
ั
เพราะไม่ได ้ระบุขนาดไว ้ก่อนจาทาให ้ไม่ม ี
้
หน่วยความจาทีจ
่ องไว ้เหลือเหมือนการใชอารื
5
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
ข้อดีของลิงค ์ลิสต ์
• เป็ นโครงสร ้างทีง่ า่ ยต่อการเพิม
่ หรือลบข ้อมูล
• ไม่จาเป็ นต ้องขยับอิลเิ มนต์ของลิสต์ไปข ้างหน ้า
เกิดพืน
้ ทีว่ า่ ง ในกรณีทม
ี่ ก
ี ารลบอิลเิ มนต์ตรงสว่ น
่ เดียวกับอาร์เรย์
หรือสว่ นกลางของลิสต์เชน
้ น
ิ ธิภาพ เนือ
• ใชพื
้ ทีห
่ น่วยความจาได ้เต็มประสท
่ งจาก
ข ้อมูลภายในลิสต์มน
ี ้อยก็ใชน้ ้อย ซงึ่ ผิดกับอาร์เรย์ท ี่
ี พืน
สูญเสย
้ ทีไ่ ปในทันที ถึงแม ้จะไม่มข
ี ้อมูลภายใน
ตาม
6
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
จากแนวความคิดทีจ
่ ะนาตัวช ี้ (Pointer) มา
ใชต้ าแหน่งโครงสร ้างข ้อมูลซงึ่ จะทาให ้ไม่ต ้องคอย
เรือ
่ งของการกาหนดขนาดโครงสร ้าง
ทาให ้
้
สามารถใชงานพื
น
้ ทีห
่ น่วยความจาได ้เต็ม
ต ัวช ี้ (Pointer) บางครงเรี
ั้ ยก ลิงค์ (Link)
หรือ ต ัวอ้างอิง (Reference) คือ การกาหนดต ัว
แปร (Variable) เพือ
่ เก็บตาแหน่งของต ัวแปร
้ ยูใ่ นโปรแกรม
หรือโครงสร้างข้อมูลอืน
่ ๆ ทีใ่ ชอ
7
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
โครงสร ้างข ้อมูลลิงค์ลส
ิ ต์เป็ นโครงสร ้าง
้ ม
ข ้อมูลแบบรายการเชงิ เสนที
่ ล
ี ักษณะการดาเนินการ
ข ้อมูล (Insertion) หรือลบข ้อมูล (Deletion) ออก
โครงสร ้าง สามารถกระทาทีข
่ อ
้ มูลตรงตาแหน่งใด
ในโครงสร้างก็ได้ ดังนัน
้ ลักษณะของโครงสร ้างจึง
ความยืดหยุน
่ (Flexible) กว่าและไม่มข
ี ด
ี จาก ัด
ด้านความจุของข้อมูลในโครงสร้าง แต่ขน
ั ้ ตอน
ดาเนินงานกับโครงสร ้างลิงค์ลส
ิ ต์นม
ี้ ค
ี วามยุ่งยาก
ั ซอนมากกว่
้
ซบ
า
8
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
การแทนโครงสร ้างข้อมู ลลิงค ์ลิสต ์
โครงสร ้างข ้อมูลลิงค ์ลิสต ์ (Linked List)
ประกอบด ้วยส่วนสาคัญ 2 ส่วนรวมเป็ นโครงสร ้างเรียกว่า
โหนด (Node) คือ
่ บข ้อมูล
1 .Data Link ทาหน้าทีเก็
่ บตาแหน่ งทีอยู
่ ข
2. Link Field ทาหน้าทีเก็
่ อง
โครงสร ้างสมาชิกตัลัวกถัษณะของ
ดไป
โหนด
DATA
่ บ
ส่วนทีเก็
ข้อมู ล
LINK
่ บตาแหน่ งที่
ส่วนทีเก็
อยู ่
ของโหนดถัดไป
9
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
่
่ ๆ
ลักษณะของการเก็บข ้อมูลและเชือมโยงโหนดอืน
่
่ ้นของโครงสร ้าง (Start
ของลิงค ์ลิสต ์ เริมจากจุ
ดเริมต
่ นตัวแปรทีท
่ าหน้าทีเก็
่ บตาแหน่ งของ
Pointer) ซึงเป็
่ โ่ หนดแรกในโครงสร ้างชีไปยั
้ งโครงสร ้างข ้อมูล
ข ้อมูลทีอยู
้ มี Pointer ชีไป
้
ชุดถัดไป และในโครงสร ้างชุดดังกล่าวนี ก็
่ ๆ ต่อไปในลักษณะเดียว ส่วน
ยังโครงสร ้างข ้อมูลอืน
Pointer ในโหนดสุดท ้ายจะเก็บค่า NULL (ค่าว่าง)
้
บางครังแทนต
าแหน่ งสุดท้ายในโครงสร ้างด ้วยสัญลักษณ์
ทางไฟฟ้ า เรียกว่า ground symbol เป็ นการแสดง
ตาแหน่ งสุดท ้ายในโครงสร ้าง หรือ
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
1
0
่
การเชือมโยงของโครงสร
้างลิงค ์ลิสต ์ (A linked li
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
1
1
การแทนลิงค ์ลิสต ์ใน
้ หน่
่ วยความจา
พืนที
แบบหนึ่ ง
12
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
การเข้าถึงข้อมู ลภายในโครงสร ้างลิงค ์ลิสต ์
การเข ้าถึงข ้อมูลภายในโครงสร ้างลิงค์ลส
ิ ต์ จะต ้อง
เป็ นตัวเข ้าไปในโครงสร ้าง สมมติให ้พอยน์เตอร์ดงั กล่าว
ี้ าแหน่งแอดเดรสของโหนดในโครงสร ้าง เมือ
ทีช
่ ต
่ ต ้องกา
ทาการเลือ
่ นตาแหน่งของพอยน์เตอร์ โดยตาแหน่งของ
ของ LINK ในโหนดปั จจุบน
ั
13
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
PTR
่
่
แสดงการเปลียนพอยน์
เตอร ์เพือไปยั
งโหนดถ ัดไป ( PTR =
14
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
้
ขันตอนการเข้าถึงข้อมู ลในโครงสร ้าง
การเข ้าถึงในโครงสร ้างเรียกว่า การทา Traversing
กาหนดให ้ DATA เป็ นโครงสร ้างข ้อมูลลิงค์ลส
ิ ต์ แ
ทาหน ้าทีช
่ โี้ หนดทีก
่ าลังดาเนินการ Process อยูใ่ นขณะน
1. กาหนดค่าเริม
่ ต ้นให ้กับพอยน์เตอร์ PTR.
2. การวนรอบดาเนินการ Process ข ้อมูล
3. Apply Process to DATA [PTR]
4. เปลีย
่ นค่าพอยน์เตอร์ PTR ให ้ชโี้ หนดถัดไป
ิ้ ขัน
5. เสร็จสน
้ ตอน
15
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
Start
Set PTR = Start
PTR = NULL
Yes
Stop
No
Apply Process to DATA[PTR]
Set PTR = LINK[PTR]
16
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
การสร ้างโหนดและกาหนดโครงสร ้าง
การสร ้างโหนด คือ การเตรียมโครงสร ้างระเบียน
่ าหนดโครงสร ้างของโหนดแล ้ว
สาหร ับจัดเก็บข ้อมูล เมือก
ก็สามารถกาหนดพอยน์เตอร ์ และเขียนส่วนของโปรแกรม
แสดงการประกาศโครงสร ้าง ดังนี ้
struct node
{
int num ;
struck node *Link ;
} *Start, *Ptr ;
่ *Start คือ พอยน์เตอร ์ทีท
่ าหน้าทีชี
่ ต้ าแหน่ งของ
เมือ
โหนดแรกในโครงสร ้าง
่ าหน้าทีชี
่ ต้ าแหน่ งของ
*Ptr คือ พอยน์เตอร ์ทีท
17
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
Storage Pool
้ ่
Storage Pool หรือ Free List หมายถึง เนื อที
ทีว่่ างในหน่ วยความจา มีลก
ั ษณะเป็ นโหนดเก็บอยูใ่ น
โครงสร ้างข ้อมูลลิงค ์ลิสต ์ หรืออาจเรียกได ้ว่าเป็ น Free
Stack ลักษณะการดาเนิ นการเหมือนกับโครงสร ้าง
่ การเพิมสมาชิ
่
ข ้อมูลสแต็ก
เมือมี
กใหม่ใน
โครงสร ้างข ้อมูลลิงค ์ลิสต ์จะนาโหนดว่าง 1 โหนดออกมา
จาก Free List (เป็ นโหนดแรกใน Free List) จากนั้นใส่
ข ้อมูลลงไปในส่วนของ Data Field หลังจากนั้น นา
่
้าไปไว ้ในโครงสร ้างข ้อมูลที่
โหนดดังกล่าวเชือมโยงเข
ต ้องการ และหากมีการลบสมาชิกตัวใดตัวหนึ่ งออกจาก
่ กลบนี ใส่
้ คน
โครงสร ้างจะต ้องนาโหนดทีถู
ื ใน Free List ไว ้
เป็ นโหนดแรกใน Free List เสมอ
18
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
STA
RT
AVAI
L
DATA
LIST
p
q
FREE
LIST
P
P
แสดงโครงสร ้างลิงค ์ลิสต ์ของ Free Storage List
Charter 4
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
Step (a) : NEW
Avail
AVA
IL NE
W
Step (B) : Avail
Link(Avail)
NE
W
AVA
IL
Step (C) : NEW
NULL
NE
W
AVA
IL
….
.
NU
LL
….
.
NU
LL
….
.
NU
LL
้
ขันตอนการขอ
New Node (Get Node)
1
9
20
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
่
การเพิมข้อมู ลในโครงสร ้าง
่ าหนดโครงสร ้างข ้อมูลเรียบร ้อยแล ้ว ก็
เมือก
่ ้อมูลในโครงสร ้างได ้ โดยการขอ
สามารถทาการเพิมข
่
โหนดว่างจาก free list และนามาเชือมโยงกั
บรายการ
่ อยูเ่ ดิมในโครงสร ้างตรงตาแหน่ งทีต
่ ้องการ
ข ้อมูลทีมี
่ ้อมูลในโครงสร ้างข ้อมูลลิงค ์ลิสต ์
การเพิมข
อาจ
่ างกัน ซึงสรุ
่ ปได ้เป็ น 3 ลักษณะ
อาจเกิดในลักษณะทีต่
คือ
่ ้อมูลทีจุ่ ดเริมต
่ ้นของโครงสร ้าง
1. การเพิมข
่ าหนด
่ ้อมูลต่อจากโหนดทีก
2. การเพิมข
่ ้อมูลทีจุ่ ดสุดท ้ายของโครงสร ้าง
3. การเพิมข
21
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
่
่ List)
่
การเพิมข้อมู ลทีจุดเริมต้นของโครงสร ้าง
่
เป็ นการเพิมโหนดของข
้อมูลไปยังตาแหน่ งแรกของ
่
่ ้นให ้ชีไปยั
้ ง
โครงสร ้างลิงค ์ลิสต ์ โดยการเปลียนค่
าเริมต
่ ้างขึน้ และให ้
ตาแหน่ งของโหนดใหม่ (NEW Node) ทีสร
่ ้นเดิมแทน
Pointer ของโหนดใหม่ชไปยั
ี ้ งตาแหน่ งเริมต
22
STA
RT
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
…..
NEW
่ จาก Storage
NEW คือ โหนดว่างทีได้
Pool
่ อมู ลทีจุ
่ ดเริมต้
่ นของโครงสร ้าง
แสดงการเพิมข้
23
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)่
้
่
่
ขันตอนการเพิมข้อมู ลทีตาแหน่ งเริมต้นของ
โครงสร ้าง
1. ตรวจสอบ OVERFLOW ถ ้าโหนดใหม่มค
ี า่
เป็ น NULL แสดงว่า OVERFLOW
้ โหนดของ
่
2. กาหนด PTR ให ้ชีไปที
FREE LIST
3.ใส่ข ้อมูลใหม่ลงไปในโหนดใหม่
่ ้นเดิมและเปลียน
่
4.ให ้โหนดใหม่ชไปยั
ี ้ งโหนดเริมต
่ ้นให ้ชีไปยั
้ งโหนดใหม่
ตาแหน่ งเริมต
24
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List) ่
่
การเพิมข้อมู ลต่อจากโหนดทีกาหนด
เป็ นการแทรกโหนดข ้อมูลใหม่เข ้าไประหว่างโหนด
่ Pionter ทีชี
่ โหนดเก่
้
ข ้อมูล 2 โหนด โดยการเปลียน
าให ้
้ งตาแหน่ งของโหนดใหม่ และ ให ้ Poinnter ของ
ชีไปยั
โหนดใหม่ขไปยั
ี ้ งตาแหน่ งเดิมแทน
25
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
Start
NE
W
p
q
่ อมู ลต่อจากโหนดทีก
่ าหนด
แสดงการเพิมข้
26
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
้
่
่
่
ขันตอนการเพิมข้อมู ลทีตาแหน่ งโหนดทีกาหนด
ของโครงสร ้าง
1. ตรวจสอบ OVERFLOW ถ ้าโหนดใหม่มค
ี า่ เป็ น
NULL แสดงว่า OVERFLOW
้ โหนดของ
่
2. กาหนด PTR ให ้ชีไปที
FREE LIST
3. ใส่ข ้อมูลใหม่ลงไปในโหนดใหม่
4. กาหนดค่าใหโ้ หนดแรก ถ ้า PTR = NULL ให ้
่ ้น ถ ้า PTR <> NULL ให ้
กาหนดโหนดใหม่เป็ นจุดเริมต
้ โหนดใหม่
่
นาโหนดใหม่มาต่อ
(P T R
ชีไปที
)
27
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
่
การเพิมข้อมู ลเป็ นโหนดสุดท้ายของโครงสร ้าง
เป็ นการนาโหนดข ้อมูลใหม่มาต่อยังตาแหน่ ง
ท ้ายสุดของโครงสร ้าง (Pointer ของโหนดสุดท ้ายมีคา่
เป็ น NULL) โดยการกาหนดให ้ Pointer ของโหนด
้ งโหนดใหม่ และให ้ Pointer ของ
ข ้อมูลสุดท ้าย ชีไปยั
โหนดใหม่มค
ี า่ เป็ น NULL แทน
28
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
Star
t
NE
W
NU
LL
p
q
้
่ อมู ลเป็ นโหนดสุดท้ายของโคร
แสดงขันตอนการเพิ
มข้
29
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
้
่
ขันตอนการเพิมข้อมู ลเป็ นโหนดสุดท้ายของ
โครงสร ้าง
1. ตรวจสอบ OVERFLOW ถ ้าโหนดใหม่มค
ี า่
เป็ น NULL แสดงว่า OVERFLOW
่ ต
้ ่
2. กาหนด PTR (ทีอยู
่ าแหน่ งสุดท ้าย) ให ้ชีไปที
โหนดของ FREE LIST
3. ใส่ข ้อมูลใหม่ลงไปในโหนดใหม่
4. กาหนด PTR ของโหนดใหม่มค
ี า่ เป็ นน NULL
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
3
0
การลบข้อมู ลจากโครงสร ้าง
การลบข ้อมูลจากโครงสร ้าง หมายถึง การดึงเอา
่ ้องการลบออกจากลิงค ์ลิสต ์ชุดเดิม ดังนั้น
เอาโหนดทีต
่
่ ดขึนคื
้ อ การเปลียนค่
่
การเปลียนแปลงที
เกิ
าพอยน์เตอร ์
่ าการลบข ้อมูลออกจากโครงสร ้างแล ้วจะต ้องคืน
และเมือท
่ กลบให ้กับ Storage Pool เพือที
่ จะได
่
โหนดทีถู
้สามารถ
นาหน่ วยความจาส่วนนั้นไปใช ้งานต่อไป
การลบข ้อมูลออกจากโครงสร ้างลิงค ์ลิสต ์ เกิดขึน้
ได ้หลายลักษณะสรุปได ้ดังนี ้
1. การลบโหนดแรก
่ ห
่ าหนด
2. การลบโหนดทีอยู
่ ลังโหนดทีก
3. การลบโหนดสุดท ้าย
31
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
Star
List)
t
แสดงการลบโหนดออกจากโครงสร ้างข้อมู ล
p
Star
t
x
q
x
q
ก) ก่อนลบ
ข้อมู ล
p
ข) หลังการลบ
ข้อมู ล
32
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
Star
t
p
x
q
Avai
l
แสดงการลบโหนดและส่งโหนดคืนกลับ Storage
33
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
้
ขันตอนการลบโหนดมี
ดงั นี ้
1. เก็บค่าตาแหน่งและค่าของ Pointer ของ
โหนดทีต
่ ้องการล
2. กาหนดค่าของ Pointer ของโหนดที่
ต ้องการลบ ไปยังโหนดก่อนหน ้านัน
้
3. กาหนดตาแหน่งของโหนดทีต
่ ้องการลบ
คืนกลับไปยัง Storage Pool
34
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
ประเภทของโครงสร ้างข้อมู ลลิงค ์ลิสต ์
โครงสร ้างข ้อมูลลิงค ์ลิสต ์ แบ่งเป็ น 2 กลุม
่ ใหญ่
ใหญ่ ๆ ได ้แก่
่
1. โครงสร ้างข ้อมูลลิงค ์ลิสต ์เดียว
(Singly
Linked List : SLL)
2. โครงสร ้างข ้อมูลลิงค ์ลิสต ์คู่ (Doubly Linked
List : DLL)
35
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List) ่
โครงสร ้างข้อมู ลลิงค ์ลิสต ์เดียว (SLL)
แบ่งออกเป็ น 2 ประเภท
1. โครงสร ้างข ้อมูลลิงค ์ลิสต ์แบบ Ordinary
่
Singly Linked List คือ โครงสร ้างข ้อมูลลิงค ์ลิสต ์ทีมี
่ าว
ลักษณะเหมือนกับโครงสร ้างข ้อมูลลิงค ์ลิสต ์ทีกล่
้ ต ้น
มาแล ้วตังแต่
2. โครงสร ้างข ้อมูลลิงค ์ลิสต ์แบบ Circular
Singly Linked List (CLL) มีลก
ั ษณะคล ้ายกับแบบ
่
้ บมายัง
SLL ทัวไป
เพียงแต่พอยน์เตอร ์สามารถชีกลั
่ ้นของโครงสร ้างได ้ โดยใช ้พอยน์เตอร ์ของ
ตาแหน่ งเริมต
้ งโหนดแรก ทาให ้
โหนดสุดท ้ายในโครงสร ้างชีไปยั
โครงสร ้างข ้อมูลมีลก
ั ษณะเป็ นวงกลม
36
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
STA
RT
…..
แสดงลักษณะของ Circular Singly Linked L
HEA
D
แสดงลักษณะของ Empty Circular Singly Lin
37
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
โครงสร ้างข้อมู ลลิงค ์ลิสต ์คู ่
(Doubly Linked
List)
โครงสร ้างข ้อมูลลิงค ์ลิสต ์คู่ (Doubly Linked
่ ละโหนดข ้อมูลสามารถชี ้
List) เป็ นโครงสร ้างทีแต่
ตาแหน่ งโหนดข ้อมูลถัดไปได ้ 2 ทิศทาง (มีพอยน์เตอร ์ชี ้
ตาแหน่ งอยู่สองทิศทาง) โดยมีพอยน์เตอร ์อยู่ 2 ตัว คือ
่ ไปยั
้ งโหนดด ้านซ ้ายของ
พอยน์เตอร ์ LLINK ทาหน้าทีชี
่ ไป
้
โหนดข ้อมูลนั้น ๆ และ พอยน์เตอร ์ RLINK ทาหน้าทีชี
LLINK
DATA
RLIN
ยังโหนดด ้านขวาของโหนดข ้อมูลนั้นK ๆ
38
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
การใช ้งานของโหนดข ้อมูลแบบลิงค ์ลิสต ์คู่
คือ
้ งโหนดด ้านซ ้ายของโหนด
พอยน์เตอร ์ LLINK จะชีไปยั
่
ข ้อมูลนั้น ๆ โดยพอย ์เตอร ์ทีโหนดข
้อมูลสุดท ้ายทาง
ด ้านซ ้าย (LLINK ตัวสุดท ้าย) จะมีคา่ เป็ น NULL และ
่ ไปยั
้ งโหนดด ้านขวาของ
พอยน์เตอร ์ RLINK ทาหน้าทีชี
่
โหนดข ้อมูลนั้น ๆ โดยพอย ์เตอร ์ทีโหนดข
้อมูลสุดท ้าย
ทางด ้านขวา (RLINK ตัวสุดท ้าย) จะมีคา่ เป็ น NULL
LLIN
LLIN DATA RLI
LLIN DATA RLI
เช่
นกันDATA RLI
K
NK
K
NK
K
NK
ลักษณะการทางานของโครงสร ้างลิงค ์ลิสต ์คู ่ (Doubly L
39
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
ชนิ ดของโครงสร ้างข ้อมูลลิงค ์ลิสต ์แบบ Doubly
Linked List
แบ่งออกเป็ น 2 แบบ คือ
1. โครงสร ้างข ้อมูลลิงค ์ลิสต ์แบบ Ordinary
Doubly Linked List(ODLL)
2. โครงสร ้างข ้อมูลลิงค ์ลิสต ์แบบ Circularly
Doubly Linked List
(CDLL)
40
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
โครงสร ้างข้อมู ลลิงค ์ลิสต ์แบบ Ordinary DLL
โครงสร ้างข ้อมูลลิงค ์ลิสต ์แบบ Ordinary DLL
่ วนของพอยน์เตอร ์
คือ ลักษณะของโครงสร ้างลิงค ์ลิสต ์ทีส่
ที่ link ทางซ ้าย (LLINK) ของโหนดซ ้ายมือสุดและพอยน์
เตอร ์ที่ link ทางด ้านขวาสุดของโครงสร ้าง (RLINK) มี
้ ่ เพือแสดงว่
่
ค่าเป็ น NULL ทังคู
าเป็ นโหนดสุดท ้ายของ
่
้
โครงสร ้างทีปลายทั
งสองด
้าน
LLIN DAT
K
A
NU
LL
HE
AD
RLI
NK
LLIN DAT
K
A
RLIN
K
LLI DAT RLIN
NK A NU
K
LL
41
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
p
q
n
่
แสดงการเพิมโหนดข้
อมู ลเข้าสู ่โครงสร ้าง Ordina
42
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (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
43
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
้
้
ขันตอนการลบโหนดมีดงั นี
1. ตรวจสอบว่ามีข ้อมูลหรือไม่ (ถ ้าโหนด r และ l
มีคา่ เป็ น start แสดงว่าไม่มข
ี ้อมูล)
2. ถ ้ามีข ้อมูล ให ้กาหนดพอยน์เตอร ์ของ p และ q
p -> r = d -> r
q -> l = d -> l
่
3. คืนโหนดทีลบให
้กับระบบ
44
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
โครงสร ้างข้อมู ลลิงค ์ลิสต ์แบบ Circularly DLL
โครงสร ้างข ้อมูลลิงค ์ลิสต ์แบบ Circularly DLL
่ Link
คือ ลักษณะของ Doubly linked list ทีมี
่ ่
ทางซ ้าย (LLINK) ของโหนดซ ้ายมือสุดเก็บตาแหน่ งทีอยู
่ ท
ของโหนดทีอยู
่ างขวามือสุดและ Link ทางด ้านขวา
่ ข
(RLINK) ของโหนดขวามือสุดก็จะเก็บตาแหน่ งทีอยู
่ อง
่ ท
โหนดทีอยู
่ างซ ้ายมือสุด
45
โครงสร ้างข้อมู ลลิงค ์ลิสต ์ (Linked
List)
LLIN DATA
K
NUL
L
RLIN LLIN
K
K
DATA
RLIN LLIN
K
K
DATA
RLIN
K
Start
แสดงโครงสร ้างข้อมู ลลิงค ์ลิสต ์แบบ Circularly D