singly-linked list and doubly-linked list (thai)
Embed Size (px)
DESCRIPTION
แนวความคิดเกี่ยวกับ linklistTRANSCRIPT

Link list
(One way list)

Link List
- Singly Linked Lists - Doubly Linked Lists

ความรู้��พื้นฐานเกี่��ยวกี่�บ Link
Singly Link List ปรู้ะกี่อบด้�วย
Info เป�นฟิ�ลด้�ที่��บรู้รู้จุ ข้�อม�ลข้องโหนด้ A Link เป�นฟิ�ลด้�ที่��บรู้รู้จุ ที่��อย�%ข้องโหนด้ถั�ด้จุากี่
โหนด้ A

ความรู้��พื้นฐานเกี่��ยวกี่�บ Link
Singly Link List ปรู้ะกี่อบด้�วย
Info เป�นฟิ�ลด้�ที่��บรู้รู้จุ ข้�อม�ลข้องโหนด้ A Link เป�นฟิ�ลด้�ที่��บรู้รู้จุ ที่��อย�%ข้องโหนด้ถั�ด้จุากี่
โหนด้ A
INFO LINK
Node A

INFO 1EF3
INFO NULL
1EF2
1EF3
Node A
Node B

INFO 1EF3
INFO NULL
1EF2
1EF3
Node A
Node B
INFO INFO NULL1EF2
Node A Node B

น'ยามที่��เกี่��ยวกี่�บ Node
Node(P) - ถ้�า P เป็�นพอยเตอร์�ชี้��ไป็ย�งโหนด มี�ความีหมีายว�าโหนดที่��ถ้�กชี้��ด�วย พอยเตอร์� P
INFO(P) – ข้�อมี�ลที่��อย��ในโหนดที่�� P ชี้��อย��LINK(P) – ที่��อย�� (Address) ถ้�ดไป็ข้องโหนดที่��ชี้��
ด�วย P
หมายเหตุ P จะถ้�กเร์�ยกว�า External Pointer

Singly Link Lists
NODE(P) : เป็�นโหนดที่��ถ้�กชี้��โดย PINFO(P) = ?
10 NULLP
Node A

Singly Link Lists
NODE(P) : เป็�นโหนดที่��ถ้�กชี้��โดย PINFO(P) = 10
10 NULLP
Node A

Singly Link Lists
NODE(P) : เป็�นโหนดที่��ถ้�กชี้��โดย PINFO(P) = 10LINK(P) = ?
10 NULLP
Node A

Singly Link Lists
NODE(P) : เป็�นโหนดที่��ถ้�กชี้��โดย PINFO(P) = 10LINK(P) = NULL หร์%อ ^ หมีายถ้&ง ไมี�มี�โหนด
ถ้�ดจาก NODE(P)
10 NULLP
Node A

เมี%�อน'าข้�อมี�ลเข้�า Lists L = (5,10,9)
Singly Link Lists

เมี%�อน'าข้�อมี�ลเข้�า Lists L = (5,10,9)
Singly Link Lists
5
Node 1
10
Node 2
9 ̂
Node 3

เมี%�อน'าข้�อมี�ลเข้�า Lists L = (5,10,9)
Singly Link Lists
5
Node 1
10
Node 2
9 ̂
Node 3
ถ้�าร์� �ที่��อย��ข้องโหนดแร์ก ใน Lists จะสามีาร์ถ้เข้�าถ้&งข้�อมี�ลที่��งหมีดใน Lists ได�ด�งน��นจ'าเป็�นต�องมี� External Pointer ที่��ชี้��โหนดแร์กใน Lists ให�ชี้��อว�า “Head”

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = ?
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5LINK(Head) = ?
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5LINK(Head) = ที่��อย��ข้องโหนด 2
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย Head INFO(Head) = 5 LINK(Head) = ที่��อย��ข้องโหนด 2 INFO(LINK(Head)) = ?
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย Head INFO(Head) = 5 LINK(Head) = ที่��อย��ข้องโหนด 2 INFO(LINK(Head)) = 10
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5LINK(Head) = ที่��อย��ข้องโหนด 2INFO(LINK(Head)) = 10LINK(LINK(Head)) = ?
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5LINK(Head) = ที่��อย��ข้องโหนด 2INFO(LINK(Head)) = 10LINK(LINK(Head)) = ที่��อย��ข้องโหนด 3
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5LINK(Head) = ที่��อย��ข้องโหนด 2INFO(LINK(Head)) = 10LINK(LINK(Head)) = ที่��อย��ข้องโหนด 3INFO(LINK(LINK(Head))) = ?
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
INFO(LINK(LINK(Head))) = 9
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
INFO(LINK(LINK(Head))) = 9LINK(LINK(LINK(Head))) = ?
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
INFO(LINK(LINK(Head))) = 9LINK(LINK(LINK(Head))) = ^
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้ที่%องไปใน Link Lists Head := LINK(Head); ด�งน��น INFO(Head) = 10 LINK(Head) = Node 3
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
เล�อน Head ให�ชี้�โหนด้ถั�ด้ไปให� Head := LINK(Head); ด�งน��น INFO(Head) = 9 LINK(Head) = NULL หร์%อ ^
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
กี่ล�บไปที่��โหนด้แรู้กี่ข้อง Lists ที่-าอย%างไรู้ ?
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้แกี่�ป.ญหาเม�อตุ�องกี่ารู้กี่ล�บไปย�งโหนด้แรู้กี่ข้อง Lists
สรู้�าง External Pointer ที่��ชี้�อ Travel ชี้�ที่��ตุ-าแหน%งข้อง Head
Travel := Head;เม�อม�กี่ารู้ที่%องเข้�าไปใน Lists ให�ใชี้� Travel ที่%อง
เข้�าไปแที่น กี่ารู้เล�อน Head Travel := LINK(Travel);
Head

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้แกี่�ป.ญหาเม�อตุ�องกี่ารู้กี่ล�บไปย�งโหนด้แรู้กี่ข้อง Lists
สรู้�าง External Pointer ที่��ชี้�อ Travel ชี้�ที่��ตุ-าแหน%งข้อง Head
Travel := Head;เม�อม�กี่ารู้ที่%องเข้�าไปใน Lists ให�ใชี้� Travel ที่%อง
เข้�าไปแที่น กี่ารู้เล�อน Head Travel := LINK(Travel);
Head
Travel

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
Travel : = Head;While Travel <> NULL DO begin PRINT INFO(Travel); Travel := LINK(Travel);end;
Head
Travel

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้เพื้'�ม ลบ ข้�อม�ลใน– Link Listsกี่ารู้เพื้'�มข้�อม�ลที่��ตุ�น Lists 1. LINK(newNode) := Head;
Head
6 newNode

Singly Link Lists 5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้เพื้'�ม ลบ ข้�อม�ลใน– Link Listsกี่ารู้เพื้'�มข้�อม�ลที่��ตุ�น Lists 1. LINK(newNode) := Head; 2. Head := newNode;
Head
6 newNode

Singly Link Lists
5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้เพื้'�มข้�อม�ลหล�งโหนด้ P
Head
6 ̂newNode
P

Singly Link Lists
5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้เพื้'�มข้�อม�ลหล�งโหนด้ P 1. LINK(newNode) := LINK(P);
Head
6 newNode
P

Singly Link Lists
5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้เพื้'�มข้�อม�ลหล�งโหนด้ P 1. LINK(newNode) := LINK(P); 2. LINK(P) := newNode;
Head
6 newNode
P

Singly Link Lists
5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้เพื้'�มข้�อม�ลโหนด้ส ด้ที่�าย
Head
P

Singly Link Lists
5
Node 1
10
Node 2
9 ̂
Node 3
กี่ารู้เพื้'�มข้�อม�ลโหนด้ส ด้ที่�าย 1. LINK(newNode) := NULL;
Head
6 ̂newNode
P

Singly Link Lists
5
Node 1
10
Node 2
9
Node 3
กี่ารู้เพื้'�มข้�อม�ลโหนด้ส ด้ที่�าย 1. LINK(newNode) := NULL; 2. LINK(P) := newNode;
Head
6 ̂newNode
P

Singly Link Lists
5
Node 1
10
Node 2
9
Node 3
กี่ารู้ลบข้�อม�ลที่��ตุ�น Lists
Head

Singly Link Lists
5
Node 1
10
Node 2
9
Node 3
กี่ารู้ลบข้�อม�ลที่��ตุ�น Lists 1. Temp := Head;
Head
Temp

Singly Link Lists
5
Node 1
10
Node 2
9
Node 3
กี่ารู้ลบข้�อม�ลที่��ตุ�น Lists 1. Temp := Head; 2. Head := LINK(Temp);
Head
Temp

Singly Link Lists
5
Node 1
10
Node 2
9
Node 3
กี่ารู้ลบข้�อม�ลที่��หล�งโหนด้ P
Head
P

Singly Link Lists
5
Node 1
10
Node 2
9
Node 3
กี่ารู้ลบข้�อม�ลที่��หล�งโหนด้ P 1. Temp := LINK(P);
Head
P
Temp

Singly Link Lists
5
Node 1
10
Node 2
9
Node 3
กี่ารู้ลบข้�อม�ลที่��หล�งโหนด้ P 1. Temp := LINK(P); 2. LINK(P) := LINK(Temp);
Head
Temp
P
Back

Doubly Linked Lists

Doubly Link List ปรู้ะกี่อบด้�วย
LLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างซ้�าย
RLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างข้วา
Info เป�นที่��เกี่2บข้�อม�ล
LLink

Doubly Link List ปรู้ะกี่อบด้�วย
LLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างซ้�าย
RLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างข้วา
Info เป�นที่��เกี่2บข้�อม�ล
LLink Info

Doubly Link List ปรู้ะกี่อบด้�วย
LLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างซ้�าย
RLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างข้วา
Info เป�นที่��เกี่2บข้�อม�ล
LLink RLinkInfo

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List
P
Q

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List 1. Llink(Q) = Llink(P)
P
Q

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List 1. Llink(Q) = Llink(P) 2. Rlink(Llink(P)) = Q
P
Q

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List 1. Llink(Q) = Llink(P) 2. Rlink(Llink(P)) = Q 3. Llink(P) = Q
P
Q

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List 1. Llink(Q) = Llink(P) 2. Rlink(Llink(P)) = Q 3. Llink(P) = Q 4. Rlink(Q) = P
P
Q

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List โด้ยให�อย�% หล�งโหนด้ P
P
Q

P
Q กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List โด้ยให�อย�%
หล�งโหนด้ P 1. Rlink(Q) = Rlink(P)

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List โด้ยให�อย�% หล�งโหนด้ P
1. Rlink(Q) = Rlink(P) 2. Llink(Rlink(P)) = Q
P
Q

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List โด้ยให�อย�% หล�งโหนด้ P
1. Rlink(Q) = Rlink(P) 2. Llink(Rlink(P)) = Q 3. Rlink(P) = Q
P
Q

กี่ารู้น-าข้�อม�ลเข้�าส�% Doubly Link List โด้ยให�อย�% หล�งโหนด้ P
1. Rlink(Q) = Rlink(P) 2. Llink(Rlink(P)) = Q 3. Rlink(P) = Q 4. Llink(Q) = P
P
Q

กี่ารู้น-าข้�อม�ลออกี่จุากี่ Doubly Link List
P

กี่ารู้น-าข้�อม�ลออกี่จุากี่ Doubly Link List 1. Rlink(Llink(P)) = Rlink(P)
P

กี่ารู้น-าข้�อม�ลออกี่จุากี่ Doubly Link List 1. Rlink(Llink(P)) = Rlink(P) 2. Llink(Rlink(P)) = Llink(P)
P

กี่ารู้น-าข้�อม�ลออกี่จุากี่ Doubly Link List 1. Rlink(Llink(P)) = Rlink(P) 2. Llink(Rlink(P)) = Llink(P) 3. คนโหนด้ที่��ชี้�โด้ย P ให�แกี่% Storage Pool
P

การ์ค�นหาด�วยเซนที่+เนลFUNCTION locate(L : pointer : x: integer) : pointer;VAR trav.sentinel: pointer;BEGIN NEW(sentinel); sentinel^.info := x; sentinel^.link := NULL; last^.link := sentinel; trav := L; WHILE trav^.info <> x DO trav := trav^.link; locate := trav;END;