งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

บทที่ 4 โครงสร้างข้อมูลแบบรายการโยง (Link List). โครงสร้างข้อมูลแบบรายการโยง เป็นการจัดเก็บข้อมูลที่เรียงต่อกันไปเหมือนอาร์เรย์ แต่ไม่ได้กำหนดขนาดไว้แน่นอน.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "บทที่ 4 โครงสร้างข้อมูลแบบรายการโยง (Link List). โครงสร้างข้อมูลแบบรายการโยง เป็นการจัดเก็บข้อมูลที่เรียงต่อกันไปเหมือนอาร์เรย์ แต่ไม่ได้กำหนดขนาดไว้แน่นอน."— ใบสำเนางานนำเสนอ:

1 บทที่ 4 โครงสร้างข้อมูลแบบรายการโยง (Link List)

2 โครงสร้างข้อมูลแบบรายการโยง เป็นการจัดเก็บข้อมูลที่เรียงต่อกันไปเหมือนอาร์เรย์ แต่ไม่ได้กำหนดขนาดไว้แน่นอน สามารถที่จะรับข้อมูลเพิ่ม ได้เรื่อย ๆ มีความยืดหยุ่นสูง อาจจะยุ่งยากและซับซ้อนกว่าอาร์เรย์ แต่เป็นที่นิยมใช้กันมาก ข้อมูลที่มีการจัดเก็บในลิงค์ลิสต์ไม่จำเป็นต้องเก็บอยู่ใน ตำแหน่งที่ติดกัน สามารถจะเก็บตำแหน่งใดก็ได้เพราะมี ตัวเชื่อมโยง หรือ ลิงค์ฟิลด์ สำหรับเก็บ Address ต่อไป

3 ลักษณะโครงสร้างข้อมูลแบบรายการโยง จะประกอบด้วยหน่วยเก็บข้อมูลหรือโหนด (Node) โดยหนึ่งโหนดมีส่วนประกอบสำคัญ 2 ส่วนคือ ส่วนที่เก็บข้อมูล (Info) ส่วนที่เก็บ Address ของโหนดถัดไป (Link) Info Link 1 โหนด

4 ลักษณะโครงสร้างข้อมูลแบบรายการโยง ABC ^

5 ประเภทรายการโยง รายการโยงแบบเดี่ยว (Singly Linked Lists) รายการโยงแบบคู่ (Doubly Linked Lists)

6 รายการโยงแบบเดี่ยว โหนดหนึ่ง ๆ จะประกอบไปด้วย 2 ส่วน คือ ส่วนที่เก็บข้อมูล และส่วนที่เป็นลิงค์ฟิลด์ การทำงานกับรายการโยงแบบเดี่ยวมี 5 ขั้นตอน ดังนี้ การสร้าง การเพิ่ม การลบโหนด การแทรกโหนด การแสดงข้อมูลในรายการโยง

7 การสร้างรายการโยง เป็นการจองเนื้อที่ในหน่วยความจำสำหรับจัดเก็บข้อมูลใหม่ และจะต้องมีการสร้างตัวชี้ไปยังโหนดแรก ในที่นี้ชื่อ Head ถ้าไม่กำหนดตัวชี้นี้ การอ่านข้อมูลจะไม่ทราบว่าจะเริ่มอ่าน ณ ตำแหน่งใด สัญลักษณ์ต่าง ๆ มีดังนี้ Node(P) หมายถึง โหนดที่ถูกชี้ด้วย P New(P) หมายถึง การสร้างโหนดใหม่ INFO(P) หมายถึง ข้อมูลที่เก็บอยู่ในโหนดที่ถูกชี้ด้วย P LINK(P) หมายถึง ตำแหน่งที่อยู่ของโหนดถัดจากโหนด P

8 การสร้างรายการโยง INFO(Head)  60 LINK(Head)  โหนดที่ 2 INFO(LINK(Head))  90 LINK(LINK(Head))  โหนดที่ 3 INFO(LINK(LINK(Head)))  120 LINK(LINK(LINK(Head)))  Null ^ Head INFO LINK

9 การสร้างรายการโยง เพิ่มตัวชี้อีก 1 ตัวคือ Tail ทำให้ทราบว่าตำแหน่งสุดท้ายอยู่ที่ใด สามารถเพิ่มข้อมูลเข้าไปต่อท้ายได้ง่าย ^ Head Tail

10 คำสั่งสร้างรายการโยงด้วยภาษาซี typedef struct node { int info; struct node *link; } node; node *Head, *Tail; int info; INFO Link node

11 การเพิ่มโหนด ก่อนที่จะมีการเพิ่มข้อมูลเข้าไปในโหนดจะต้องสร้างโหนดก่อน ซึ่งการเพิ่มโหนดมี 2 วิธีคือ การเพิ่มโหนดไว้ต่อจากโหนดสุดท้าย การเพิ่มโหนดไว้ก่อนโหนดแรก กำหนดตัวชี้ 2 ตัวคือ Head, Tail

12 การเพิ่มโหนดไว้ต่อจากโหนดสุดท้าย ถ้ามีข้อมูลมาเป็นตัวแรกใน รายการโยง คือ 10 จะมีขั้นตอนวิธีดังนี้ 10^ Head Tail 1. Head = Tail = Null 2. New(P) 3. INFO(p) = Link(p) = Null 5. Head = p 6. Tail = p P

13 การเพิ่มโหนดไว้ต่อจากโหนดสุดท้าย เพิ่มข้อมูล 40 เข้าไปในรายการโยง 10^ Head Tail 1. New(P) 2. INFO(P) = Link(p) = Null 4. Link(Tail) = p 5. Tail = p P 40^ Tail

14 การเพิ่มโหนดไว้ต่อจากโหนดสุดท้าย เพิ่มข้อมูล 90 เข้าไปในรายการโยง 10 Head Tail 1. New(P) 2. INFO(P) = Link(p) = Null 4. Link(Tail) = p 5. Tail = p P 90^ Tail 40^

15 เปรียบเทียบคำสั่งในภาษาซี  New(P)  INFO(P) = info  Link(P) = Null  Link(Tail) = P  Tail = P  P = new node  P->info= info  P->link = null  Tail->Link= P  Tail = P

16 โปรแกรมเพิ่มโหนดในภาษาซี #include typedef struct node { int data; struct node *next; } node; main() { node *head,*tail,*p; int info; head = NULL; printf( “ Enter number = “ );scanf( “ %d ”,&info); p = new node; p->data = info; p->next = NULL; if (head==NULL) { head=p; tail=p; } else { tail->next = p; tail = p; } }

17 การเพิ่มโหนดไว้ก่อนโหนดแรก เพิ่มข้อมูล 40 เข้าไปในรายการโยง 10^ HeadTail 1. New(P) 2. info(P) = link(P) = Head 4. Head = p P 40 Head

18 การเพิ่มโหนดไว้ก่อนโหนดแรก เพิ่มข้อมูล 90 เข้าไปในรายการโยง 10^ HeadTail 1. New(P) 2. info(P) = link(P) = Head 4. Head = p P 90 Head 40

19 การลบโหนด จะต้องค้นหาตั้งแต่โหนดแรกคือ Head ชี้อยู่ ถ้าค่าที่ต้องการลบตรงกับโหนดใด ก็จะลบออกได้ 1010 Head ^ Tail โหนดที่ต้องการ ลบ

20 การลบโหนดโดยเลื่อนตัวชี้ Head Head ^ TailHead ^ TailHead

21 การลบโหนด เป็นการดึงโหนดออกจากรายการโยง ทำได้ 3 วิธี ลบโหนดแรก ลบโหนดตรงกลาง ลบโหนดสุดท้าย

22 ลบโหนดแรก 1010 Head ^ Tail P Head ^ Tail Head = Link(Head) หรือ Head = Link(P)

23 ลบโหนดภายใน Head ^ Tail P 1010 Head ^ Tail P 1010 Head ^ Tail P

24 ลบโหนดภายใน 1010 Head ^ Tail P Link(Link(Head)) = Link(P)

25 ลบโหนดภายใน Head ^ Tail P 1010 Head ^ Tail P BeforeP 1010 Head ^ Tail PBeforeP

26 การแก้ปัญหาโดยเพิ่มตัวชี้ BeforeP Link(BeforeP) = Link(P) 1010 Head ^ Tail PBeforeP

27 การลบโหนดสุดท้าย 1010 Head ^ TailBeforeP P Tail = BeforeP Link(Tail) = Null 1010 Head TailBeforeP ^

28 การแทรกโหนด เป็นการแทรกโหนดใหม่เข้าไปในรายการโยง ก่อนจะแทรกจะต้องค้นหาตำแหน่งที่จะแทรก มีการกำหนดตัวชี้ P สำหรับค้นหาตำแหน่งที่จะแทรก โดย P จะเริ่มต้นชี้ที่ตำแหน่ง Head ก่อนเสมอ

29 การแทรกโหนดใหม่ Head P Newnode 3030 Head P 1 2

30 การแทรกโหนดใหม่ Head Newnode P Link(P) = Newnode 2. Link(Newnode) = Link(P)

31 การแทรกโหนดใหม่ Newnode 3030 Head Tail P Link(Newnode) = Link(P) 1.Link(P) = Newnode

32 การแสดงข้อมูล เป็นการดึงเอาข้อมูลที่มีอยู่มาแสดง กำหนดให้ตัวชี้ P เริ่มชี้ที่โหนด Head แล้วเลื่อนตัวชี้ P ไปเรื่อย ๆ จนถึงโหนดสุดท้าย หรือ Tail

33 Head ^ 4040 Tail P P P

34 สร้างฟังก์ชันเมนู Showmenu() { printf( “ M E N U \n ” ); printf( “ 1. Add Link List\n ” ); printf( “ 2. Delete Link List\n ” ); printf( “ 3. Insert After \n ” ); printf( “ 4. Display Data\n ” ); printf( “ 5. Exit \n ” ); printf( “ Please Select [1-5] “ ); }

35 คำสั่งสร้างรายการโยงด้วยภาษาซี typedef struct node { int code; char name[15]; float gpa; struct node *next; } node; node *Head, *Tail; int info; next name gpa code next data

36 รายการโยงแบบคู่ (Doubly Linked List) รายการโยงแบบคู่ยังคง 1 โหนดยังคงประกอบด้วย 2 ส่วนก็คือ ส่วนของข้อมูล (Info) ส่วนลิงค์ฟิลด์ (Link) สำหรับลิงค์ฟิลด์จะมี 2 ตัวคือ ลิงค์ฟิลด์แรกจะเก็บตำแหน่งที่อยู่โหนดก่อนหน้า หรือด้านซ้าย (Prev) ลิงค์ฟิลด์ที่สองเก็บตำแหน่งที่อยู่โหนดถัดไป หรือด้านขวา (Next)

37 รายการโยงแบบคู่ Data คือ ข้อมูลที่เก็บในโหนด Next คือ เก็บตำแหน่งที่อยู่โหนดถัดไป Prev คือ เก็บตำแหน่งที่อยู่โหนดก่อนหน้า prev datanext 1 node

38 ^ ^ P Data(P) คือ ค่า 20 Next(P) คือ โหนดถัดจากโหนด P หรือ โหนดที่ 3 Prev(P) คือ โหนดก่อนโหนด P หรือ โหนดที่ 1 Data(Next(P)) คือ ค่า 30 Data(Prev(P)) คือ ค่า 10 Prev(Next(P)) คือ โหนดที่ 2 Next(Prev(P)) คือ โหนดที่ 2

39 รายการโยงแบบคู่ การทำงานกับรายการโยงแบบคู่มี 5 ขั้นตอน ดังนี้ การสร้าง การเพิ่ม การลบโหนด การแทรกโหนด การแสดงข้อมูลในรายการโยง

40 การสร้างรายการโยงแบบคู่ เหมือนกับรายการโยงแบบเดี่ยว แต่มีตัวชี้ 2 ตัวคือ Next และ Prev กำหนดตัวชี้โหนดแรกชื่อ Head ตัวชี้โหนดสุดท้ายชื่อ Tail

41 คำสั่งสร้างรายการโยงด้วยภาษาซี typedef struct node { int data; struct node *next,*prev; } node; node *Head, *Tail; int info; node prev datanext

42 การเพิ่มโหนดในรายการโยง สามารถเพิ่มได้ 2 วิธี คือ การเพิ่มโหนดใหม่ต่อจากโหนดสุดท้าย การเพิ่มโหนดใหม่ก่อนหน้าโหนดแรก

43 การเพิ่มโหนดต่อจากโหนดสุดท้าย ^ P HeadTail A 1. Head=Tail=NULL 2. New(P) 3. Data(P) = A 4. Prev(P) = NULL 5. Next(P) = NULL 6. Head = P 7. Tail = P ^

44 การเพิ่มโหนดต่อจากโหนดสุดท้าย ^ A ^ P HeadTail 1. New(P) 2. Data(P) = B 3. Next(P) = NULL 4. Prev(P) = Tail 5. Next(Tail) = P 6. Tail = P B^

45 การเพิ่มโหนดต่อจากโหนดสุดท้าย Head ^ AB^ Tail P 1. New(P) 2. Data(P) = C 3. Next(P) = NULL 4. Prev(P) = Tail 5. Next(Tail) = P 6. Tail = P C^

46 การเพิ่มโหนดก่อนโหนดแรก ในแบบฝึกหัดข้อที่ 9 เขียนขั้นตอนการเพิ่มโหนดใหม่ต่อจาก โหนดแรก เช่นเพิ่มโหนด B เข้าไป มีขั้นตอนอย่างไร ^ A^ HeadTail B P

47 การลบโหนดในรายการโยง HeadTail ^ ABC D^P PP Prev(P) Next(P)

48 การลบโหนดในรายการโยง Prev(P) Next(P) Next(Prev(P)) = Next(P) 2.Prev(Next(P)) = Prev(P) P Tail ^ ABC D^ Head

49 การลบโหนดในรายการโยง ^ AB D^ Head

50 การแทรกโหนดใหม่ แทรกเป็นโหนดแรก แทรกตรงกลาง ( ก่อนโหนด P หรือหลังโหนด P) แทรกเป็นโหนดสุดท้าย

51 การแทรกก่อนโหนด P E ^ ABD^ Tai l P Newnode

52 การแทรกก่อนโหนด P ^ ABD^ Tai l P 1 E Newnode

53 ^ AB P E 1. Prev(p) = newnode 3. Prev(newnode) =Prev(p) 4. Next(prev(newnode)) = newnode 2. Next(newnode) = p

54 การแทรกหลังโหนด P E ^ ABD^ HeadP Newnode

55 E 4. Next(P) = newnode 1. Prev(next(p)) = newnode 2. Next(newnode) = next(P) 3. Prev(newnode) = P BD P

56 การแสดงข้อมูลในรายการโยง เป็นการดึงข้อมูลในรายการโยงออกมาแสดงเหมือนกับ รายการโยงแบบเดี่ยว โดยดึงข้อมูลตั้งแต่โหนดแรก (Head) มาเรื่อย ๆ จนถึงโหนด สุดท้าย (Tail)

57 ^ ABD^ Head Tail PPP ABD แสดงข้อมูลในลิงค์ลิสต์

58 รายการโยงแบบวงกลม (Circular Linked List) ปกติแล้วไม่ว่าจะเป็นรายการโยงแบบเดี่ยวหรือแบบคู่ link ของ โหนดสุดท้ายจะเป็น Null แต่ถ้าเป็นรายการโยงแบบวงกลม กรณีที่เป็นรายการโยงแบบเดี่ยว link โหนดสุดท้ายจะชี้มา ที่โหนดแรก กรณีที่เป็นรายการโยงแบบคู่ link ของโหนดแรกจะชี้ไป ยังโหนดสุดท้าย และ link ของโหนดสุดท้ายจะชี้มาที่ โหนดแรก

59 ตัวอย่างรายการโยงแบบวงกลม Head Tail ^

60 ตัวอย่างรายการโยงแบบวงกลม ABD Tai l Head


ดาวน์โหลด ppt บทที่ 4 โครงสร้างข้อมูลแบบรายการโยง (Link List). โครงสร้างข้อมูลแบบรายการโยง เป็นการจัดเก็บข้อมูลที่เรียงต่อกันไปเหมือนอาร์เรย์ แต่ไม่ได้กำหนดขนาดไว้แน่นอน.

งานนำเสนอที่คล้ายกัน


Ads by Google