ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
โครงสร้างข้อมูลแบบลิงก์ลิสต์
อาจารย์ พิศิษฐ์ นาคใจ มหาวิทยาลัยราชภัฏอุตรดิตถ์
2
ลิงก์ลิสต์ Linked List เป็นโครงสร้างที่จัดเก็บด้วยโหนด (node) ต่อเนื่องกันไป ภายในโหนดจะประกอบด้วย 2 ส่วนคือ ส่วนที่จัดเก็บข้อมูล(Data) และส่วนที่ยังจัดเก็บพอยเตอร์(Pointer) ไปยังโหนดถัดไป ยกเว้นตัวสุดท้ายจะเก็บเป็น Null Pointer A 30 77 Z 12 30 W 66 12 E null 66
3
เริ่มต้นโหนดแรกของ Linklist เริ่มที่ Address 77 ภายในเก็บข้อมูลตัวอักษร A ไว้ภายใน และยังเก็บ Address 30 ซึ่งเป็นโหนดถัดไปอีกด้วย A 30 77 Z 12 30 W 88 12 E null 66
4
Dummy Node โดยทั่วไปแล้วจะมี Dummy Node เพื่อเป็นตัวชี้ตำแหน่งเริ่มต้นไว้เพื่อบอกให้ทราบว่า Linklist นี้มีตำแหน่งเริ่มที่ตำแหน่งใด แต่ภายใน Dummy node จะมีข้อมูล Address เริ่มต้นของ Linklist เพียงตัวเดียว null Head Dummy Node ชนิดที่มีหนึ่ง Pointer
5
Dummy Node Dummy Node ชนิดที่ 2 เป็นชนิดที่มี 2 พอยเตอร์ โดยที่เก็บ Address ทั้งหัวและหางของ LinkList โดยที่ Head จะชี้ไป Address เริ่มต้นของ Linklist และ Tail จะชี้ไปยัง Address สุดท้ายของ Linklist ข้อดีคือ กรณีที่จะทำการแทรกข้อมูลท้ายสุด ไม่จำเป็นต้องวิ่งไปใน List เพื่อหา Address สุดท้าย สามารถใช้ข้อมูลจาก Dummy Node ได้เลย A 30 77 Z 12 30 W 88 12 E null 66 head tail
6
พอยน์เตอร์และหน่วยความจำในภาษาซี
ตัวแปลพอยน์เตอร์คือ ตัวแปรที่เก็บที่อยู่ของข้อมูลเอาไว้ เช่นถ้าต้องการสร้างตัวแปรพอยน์เตอร์ที่ชี้ไปยังบล๊อคของหน่วยความจำที่เก็บค่าจำนวนเต็มเอาไว้ ในภาษาซีเขียนได้ดังนี้ int *p
7
คำสั่งพื้นฐานในภาษาซี
malloc เป็นฟังก์ชั่นในการสร้างเนื้อที่ใหม่ในหน่วยความจำ malloc จะทำการหาเนื้อที่ในหน่วยความจำ sizeof เป็นฟังก์ชั่นที่ค้นหาจำนวนขนาดกลุ่มข้อมูลนั้นๆ (Struct) type case ใช้กำหนดชนิดข้อมูลนอกเหนือจากที่มีอยู่แล้ว free เป็นฟังก์ชั่นที่ทำการคืนหน่วยความจำให้กับ Memory
8
ตัวอย่างการใช้งานพอยเตอร์
int *A,*B; A = (int *)malloc(sizeof(int)); B = (int *)malloc(sizeof(int)); *A = 5; *B = 17; free(A); A = B; A ?? B ?? A 5 B 17 A B 17 A B 17
9
การประกาศโครงสร้างของ List
typedef struct node_ptr{ int data; struct node_ptr *next; };
10
การท่องไปใน Linked List
การท่องไปในลิตส์ คือการเข้าถึงสมาชิกข้อมูลจากตัวแรกถึงตัวสุดท้ายโดยใช้ Pointer อาจจะเป็นการสืบค้นข้อมูลภายใน List เราไม่สามารถไปยังสมาชิกอื่นๆ ได้โดยที่ไม่ผ่านตัวที่ 1 ถึงตัวที่ n ได้ H A 30 77 Z 12 30 W 88 12 E null 66
11
การท่องไปใน Linked List
เมื่อเราต้องการเลื่อน Dummy Node ไปหา Address ถัดไป จะทำให้ไม่สามารถย้อนกลับมายัง ต้น ของ list ได้ดังนั้นต้องมี dummy Node อีกตัวเพื่อเก็บ Address เริ่มต้นของ List ไว้ เมื่อเริ่มท่องไปใน List เราต้องให้ tmp มีค่า Address เดียวกับ H เสียก่อนเพื่อจะเริ่มค้นหาข้อมูลจากตัวแรกไปเรื่อยๆ tmp H A 30 77 Z 12 30 W 88 12 E null 66
12
การท่องไปใน Linked List ต่อ
1. จากรูปเราให้ H เก็บตำแหน่งต้น List ไว้และให้ Tmp เป็นคนเลื่อนตำแหน่ง (tmp = H) 2. วิธีการเลื่อน คือให้ tmp เก็บค่า Address ของตำแหน่งถัดไป (tmp = tmp->next) 3. จากนั้นให้ Tmp เลื่อนไปยังตัวแหน่งถัดไปเรื่อยๆ จนหว่าจะเจอค่า null เป็นอันสิ้นสุด tmp H A 30 77 Z 12 30 W 88 12 E null 66
13
ตัวอย่างภาษาซี tmp = H; while(tmp != null){ printf(“%d”,tmp->data); tmp = tmp->next; }
14
โอเปอร์เรชันที่ใช้ใน Linklist
สำหรับโอเปอร์เรชั่นมี 2 ชนิดคือ การเพิ่มข้อมูล การลบข้อมูล การเพิ่มข้อมูล เป็นการเพิ่ม Node ใหม่ที่บรรจุข้อมูลเข้ามาใน List การเพิ่มข้อมูลจะแบ่งออกเป็น 1. การเพิ่มด้านหน้า 2. การเพิ่มด้านหลัง 3. การเพิ่มตรงกลาง
15
การเพิ่มข้อมูล ขั้นตอนการเพิ่มข้อมูล
ประกาศตัวแปลพอยเตอร์ node_ptr new; ทำการจัดหาหน่วยความจำ new = (node_ptr *)(malloc(sizeof(node_ptr))) นำข้อมูลใส่เข้าไปใน List new->element = 10; 4. นำโหนดเข้าสู่ List
16
การแทรก List ที่ตำแหน่งต่างๆ
แทรกด้านหน้า แทรกด้านหลัง แทรกระหว่างตำแหน่ง
17
การลบข้อมูลของ List การลบข้อมูล เป็นการลบข้อมูลที่อยู่ในสายของ List โดยจะทำการ ค้นหาข้อมูลภายใน List เมื่อเจอก็จะทำการลบข้อมูล แต่เมื่อลบข้อมูลแล้วเราจำเป็นต้องทำการ ปรับแต่ง List เพื่อให้ List เป็นข้อมูลที่ถูกต้องและยังสามารถใช้งานได้ต่อไป
18
การลบ List ที่ตำแหน่งต่างๆ
19
Quiz จงบอกข้อดีของการใช้ Linklist มา 2 ข้อ จงบอกข้อเสียของการใช้ Linklist มา 3 ข้อ
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.