singly-linked list and doubly-linked list (thai)

65
Link list (One way list)

description

แนวความคิดเกี่ยวกับ linklist

Transcript of singly-linked list and doubly-linked list (thai)

Page 1: singly-linked list and doubly-linked list (thai)

Link list

(One way list)

Page 2: singly-linked list and doubly-linked list (thai)

Link List

- Singly Linked Lists - Doubly Linked Lists

Page 3: singly-linked list and doubly-linked list (thai)

ความรู้��พื้นฐานเกี่��ยวกี่�บ Link

Singly Link List ปรู้ะกี่อบด้�วย

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

โหนด้ A

Page 4: singly-linked list and doubly-linked list (thai)

ความรู้��พื้นฐานเกี่��ยวกี่�บ Link

Singly Link List ปรู้ะกี่อบด้�วย

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

โหนด้ A

INFO LINK

Node A

Page 5: singly-linked list and doubly-linked list (thai)

INFO 1EF3

INFO NULL

1EF2

1EF3

Node A

Node B

Page 6: singly-linked list and doubly-linked list (thai)

INFO 1EF3

INFO NULL

1EF2

1EF3

Node A

Node B

INFO INFO NULL1EF2

Node A Node B

Page 7: singly-linked list and doubly-linked list (thai)

น'ยามที่��เกี่��ยวกี่�บ Node

Node(P) - ถ้�า P เป็�นพอยเตอร์�ชี้��ไป็ย�งโหนด มี�ความีหมีายว�าโหนดที่��ถ้�กชี้��ด�วย พอยเตอร์� P

INFO(P) – ข้�อมี�ลที่��อย��ในโหนดที่�� P ชี้��อย��LINK(P) – ที่��อย�� (Address) ถ้�ดไป็ข้องโหนดที่��ชี้��

ด�วย P

หมายเหตุ P จะถ้�กเร์�ยกว�า External Pointer

Page 8: singly-linked list and doubly-linked list (thai)

Singly Link Lists

NODE(P) : เป็�นโหนดที่��ถ้�กชี้��โดย PINFO(P) = ?

10 NULLP

Node A

Page 9: singly-linked list and doubly-linked list (thai)

Singly Link Lists

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

10 NULLP

Node A

Page 10: singly-linked list and doubly-linked list (thai)

Singly Link Lists

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

10 NULLP

Node A

Page 11: singly-linked list and doubly-linked list (thai)

Singly Link Lists

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

ถ้�ดจาก NODE(P)

10 NULLP

Node A

Page 12: singly-linked list and doubly-linked list (thai)

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

Singly Link Lists

Page 13: singly-linked list and doubly-linked list (thai)

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

Singly Link Lists

5

Node 1

10

Node 2

9 ̂

Node 3

Page 14: singly-linked list and doubly-linked list (thai)

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

Singly Link Lists

5

Node 1

10

Node 2

9 ̂

Node 3

ถ้�าร์� �ที่��อย��ข้องโหนดแร์ก ใน Lists จะสามีาร์ถ้เข้�าถ้&งข้�อมี�ลที่��งหมีดใน Lists ได�ด�งน��นจ'าเป็�นต�องมี� External Pointer ที่��ชี้��โหนดแร์กใน Lists ให�ชี้��อว�า “Head”

Page 15: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = ?

Head

Page 16: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5

Head

Page 17: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5LINK(Head) = ?

Head

Page 18: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

NODE(Head) = โหนดที่��ชี้��ด�วย HeadINFO(Head) = 5LINK(Head) = ที่��อย��ข้องโหนด 2

Head

Page 19: singly-linked list and doubly-linked list (thai)

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

Page 20: singly-linked list and doubly-linked list (thai)

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

Page 21: singly-linked list and doubly-linked list (thai)

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

Page 22: singly-linked list and doubly-linked list (thai)

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

Page 23: singly-linked list and doubly-linked list (thai)

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

Page 24: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

INFO(LINK(LINK(Head))) = 9

Head

Page 25: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

INFO(LINK(LINK(Head))) = 9LINK(LINK(LINK(Head))) = ?

Head

Page 26: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

INFO(LINK(LINK(Head))) = 9LINK(LINK(LINK(Head))) = ^

Head

Page 27: singly-linked list and doubly-linked list (thai)

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

Page 28: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

เล�อน Head ให�ชี้�โหนด้ถั�ด้ไปให� Head := LINK(Head); ด�งน��น INFO(Head) = 9 LINK(Head) = NULL หร์%อ ^

Head

Page 29: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

กี่ล�บไปที่��โหนด้แรู้กี่ข้อง Lists ที่-าอย%างไรู้ ?

Head

Page 30: singly-linked list and doubly-linked list (thai)

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

Page 31: singly-linked list and doubly-linked list (thai)

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

Page 32: singly-linked list and doubly-linked list (thai)

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

Page 33: singly-linked list and doubly-linked list (thai)

Singly Link Lists 5

Node 1

10

Node 2

9 ̂

Node 3

กี่ารู้เพื้'�ม ลบ ข้�อม�ลใน– Link Listsกี่ารู้เพื้'�มข้�อม�ลที่��ตุ�น Lists 1. LINK(newNode) := Head;

Head

6 newNode

Page 34: singly-linked list and doubly-linked list (thai)

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

Page 35: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9 ̂

Node 3

กี่ารู้เพื้'�มข้�อม�ลหล�งโหนด้ P

Head

6 ̂newNode

P

Page 36: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9 ̂

Node 3

กี่ารู้เพื้'�มข้�อม�ลหล�งโหนด้ P 1. LINK(newNode) := LINK(P);

Head

6 newNode

P

Page 37: singly-linked list and doubly-linked list (thai)

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

Page 38: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9 ̂

Node 3

กี่ารู้เพื้'�มข้�อม�ลโหนด้ส ด้ที่�าย

Head

P

Page 39: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9 ̂

Node 3

กี่ารู้เพื้'�มข้�อม�ลโหนด้ส ด้ที่�าย 1. LINK(newNode) := NULL;

Head

6 ̂newNode

P

Page 40: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9

Node 3

กี่ารู้เพื้'�มข้�อม�ลโหนด้ส ด้ที่�าย 1. LINK(newNode) := NULL; 2. LINK(P) := newNode;

Head

6 ̂newNode

P

Page 41: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9

Node 3

กี่ารู้ลบข้�อม�ลที่��ตุ�น Lists

Head

Page 42: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9

Node 3

กี่ารู้ลบข้�อม�ลที่��ตุ�น Lists 1. Temp := Head;

Head

Temp

Page 43: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9

Node 3

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

Head

Temp

Page 44: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9

Node 3

กี่ารู้ลบข้�อม�ลที่��หล�งโหนด้ P

Head

P

Page 45: singly-linked list and doubly-linked list (thai)

Singly Link Lists

5

Node 1

10

Node 2

9

Node 3

กี่ารู้ลบข้�อม�ลที่��หล�งโหนด้ P 1. Temp := LINK(P);

Head

P

Temp

Page 46: singly-linked list and doubly-linked list (thai)

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

Page 47: singly-linked list and doubly-linked list (thai)

Doubly Linked Lists

Page 48: singly-linked list and doubly-linked list (thai)

Doubly Link List ปรู้ะกี่อบด้�วย

LLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างซ้�าย

RLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างข้วา

Info เป�นที่��เกี่2บข้�อม�ล

LLink

Page 49: singly-linked list and doubly-linked list (thai)

Doubly Link List ปรู้ะกี่อบด้�วย

LLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างซ้�าย

RLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างข้วา

Info เป�นที่��เกี่2บข้�อม�ล

LLink Info

Page 50: singly-linked list and doubly-linked list (thai)

Doubly Link List ปรู้ะกี่อบด้�วย

LLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างซ้�าย

RLink เป�นพื้อยน�เตุอรู้�ชี้�ไปย�งโหนด้ที่��อย�%ที่างข้วา

Info เป�นที่��เกี่2บข้�อม�ล

LLink RLinkInfo

Page 51: singly-linked list and doubly-linked list (thai)

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

P

Q

Page 52: singly-linked list and doubly-linked list (thai)

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

P

Q

Page 53: singly-linked list and doubly-linked list (thai)

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

P

Q

Page 54: singly-linked list and doubly-linked list (thai)

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

P

Q

Page 55: singly-linked list and doubly-linked list (thai)

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

P

Q

Page 56: singly-linked list and doubly-linked list (thai)

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

P

Q

Page 57: singly-linked list and doubly-linked list (thai)

P

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

หล�งโหนด้ P 1. Rlink(Q) = Rlink(P)

Page 58: singly-linked list and doubly-linked list (thai)

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

1. Rlink(Q) = Rlink(P) 2. Llink(Rlink(P)) = Q

P

Q

Page 59: singly-linked list and doubly-linked list (thai)

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

1. Rlink(Q) = Rlink(P) 2. Llink(Rlink(P)) = Q 3. Rlink(P) = Q

P

Q

Page 60: singly-linked list and doubly-linked list (thai)

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

1. Rlink(Q) = Rlink(P) 2. Llink(Rlink(P)) = Q 3. Rlink(P) = Q 4. Llink(Q) = P

P

Q

Page 61: singly-linked list and doubly-linked list (thai)

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

P

Page 62: singly-linked list and doubly-linked list (thai)

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

P

Page 63: singly-linked list and doubly-linked list (thai)

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

P

Page 64: singly-linked list and doubly-linked list (thai)

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

P

Page 65: singly-linked list and doubly-linked list (thai)

การ์ค�นหาด�วยเซนที่+เนล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;