Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT
การจัดเก็บข้อมูลในหน่วยความจำหลัก Static memory allocation เช่น การประกาศตัวแปร int a, b; char s[10], c; static float f; Dynamic memory allocation เช่น การใช้ pointer และมีการจองเนื้อที่ในหน่วยความจำด้วยคำสั่ง malloc(); int *p ; p = (int *)malloc(sizeof(int)*2) ; LOGO
Lists เป็นโครงสร้างข้อมูลแบบ Linear สามารถ implement ได้ 2 แบบ 1. แบบ Static implement ด้วย array 2. แบบ Dynamic implement ด้วย linked list Basic Operations - Insertion - Initial - Deletion - isEmpty - Find - isLast LOGO LAUKHWAN NGAMPRASIT
Lists : แบบ Static Array -5 9 6 3 LOGO LAUKHWAN NGAMPRASIT
Lists : แบบ Dynamic Linked list Linked List เป็นการนำเอาโครงสร้างที่เรียกว่าโหนด มาต่อเชื่อมกันเป็นลูกโซ่ ช่วยให้การจัดเก็บมีความยืดหยุ่นมากขึ้น เราสามารถทำการเพิ่มโหนดได้โดยไม่ต้องคำนึงถึงขีดจำกัดเหมือนกันการเก็บข้อมูลแบบ array Linked list คล้ายๆ กับขบวนรถไฟ ตรงที่ว่าการที่จะเกิดเป็นขบวนรถไฟได้จะต้องมีการนำโบกี้รถไฟหลายๆ โบกี้มาต่อกัน ขบวนจะสั้นหรือยาวก็ขึ้นอยู่กับโบกี้เหล่านี้ หากผู้โดยสารโบกี้แรกๆ ต้องการที่จะไปยังโบกี้สุดท้ายก็ต้องเดินผ่านโบกี้อื่นๆ ระหว่างทางด้วย LOGO LAUKHWAN NGAMPRASIT
การทำงาน การสร้างลิสต์ว่าง การทดสอบว่าลิสต์ว่างหรือไม่ การท่องไปในลิสต์หรือส่วนของลิสต์ โดยการเข้าถึงสมาชิก และประมวลผลสมาชิกแบบลำดับ การเพิ่มสมาชิกใหม่ลงในลิสต์ การลบสมาชิกออกจากลิสต์ LOGO
แสดงโครงสร้างข้อมูล Linked-List ลักษณะของลิงค์ลิสต์ 12 59 7 24 node Data Link แสดงโครงสร้างข้อมูล Linked-List LOGO
คุณสมบัติของลิสต์ ภายในแต่ละโหนดจะแบ่งออกเป็นอย่างน้อย 2 ฟิลด์ คือข้อมูลและแอดเดรสหรือที่อยู่ของโหนดถัดไป ลิงค์ลิสต์เป็นการนำข้อมูลแต่ละโหนดมาจัดเรียงต่อกันเป็นลิสต์ โดยสิ่งที่เป็นตัวกำหนดลำดับก็คือ ฟิลด์แอดเดรสของแต่ละโหนด การเข้าถึงลิงค์ลิสต์จะต้องชี้ pointer ไปโหนดแรกเสมอ ฟิลด์แอดเดรสของโหนดสุดท้ายจะต้องกำหนดให้เป็น null ซึ่งเป็นการกำหนดให้จบลิงค์ลิสต์ ลิงค์ลิสต์ที่ไม่มีโหนดอยู่ภายในเรียกว่า ลิสต์ว่าง (Empty List หรือ null List) 12 59 7 24 LOGO
สัญลักษณ์ที่แสดงว่าเป็นโหนดสุดท้าย Null (a) (d) (e) /// (b) (c) LOGO
การประกาศโครงสร้างโหนดของลิงค์ลิสต์ struct node { int info; struct node *next; }; typedef struct node *ptrnode; typedef ptrnode position,list; LOGO
การสร้างลิงค์ลิสต์ ตัวชี้ของโหนดสุดท้ายของรายการมีค่าเป็น null ดังนั้นจึงเป็นการง่ายที่จะสร้างรายการว่างขึ้นมาใหม่ โดยการกำหนดค่าเริ่มต้นให้เป็น null LOGO
5 20 12 TMP L L P TMP->info = 5; header list L; position TMP; position P; L = (struct node *)malloc(sizeof(struct node)); L->next = NULL; P = L; position TMP; TMP =(struct node *)malloc(sizeof(struct node)); TMP->next = P->next; TMP->info = 5; P->next = TMP; TMP->info = 20; position TMP; TMP =(struct node *)malloc(sizeof(struct node)); TMP->next = P->next; P->next = TMP; LOGO LAUKHWAN NGAMPRASIT
การเข้าถึง (Access) ข้อมูลในโหนด การเข้าถึงโหนดใดๆ จะต้องเริ่มต้นเข้าทางพอยเตอร์ที่ชี้อยู่โหนดแรกเสมอ แล้วไล่ไปตามลิ้งค์ที่ชี้บอกว่าโหนดถัดไปอยู่ ณ ที่ใด การเข้าถึงโหนดใดๆ มีจุดประสงค์เพื่อนำข้อมูลที่มันเก็บไว้ไปประมวลผล ไม่ว่าจะเป็น บวก ลบ คูณ หาร หรือนำออกไปพิมพ์หรือแสดงทางหน้าจอ รวมทั้งเพื่อทำการ เพิ่ม ลบ แทรกโหนดด้วย 7 14 24 59 LOGO
การแทรกโหนด tmp 5 โหนดใหม่ที่จะแทรก p . . . . 3 8 . . . . LOGO
การแทรกโหนด (ต่อ) LOGO . . . . . . . . tmpnext = pnext; คือขั้นตอนการต่อส่วนนี้ tmp 5 p . . . . 3 8 . . . . LOGO
การแทรกโหนด (ต่อ) LOGO . . . . . . . . tmp ขั้นต่อมาทำดังนี้ pnext= tmp จะเกิดการเชื่อมโยงดังนี้ 5 p การเชื่อมโยงตรงนี้หายไป . . . . 3 8 . . . . LOGO
การแทรกโหนด (ต่อ) p tmp . . . . 3 5 8 . . . . การแทรกโหนดสำเร็จ LOGO
ทำการค้นหาโหนดที่ต้องการลบ การลบโหนด p temp seek c d h m k b p temp seek c d h m k b p temp seek c d h m k b ทำการค้นหาโหนดที่ต้องการลบ LOGO
การลบโหนด (ต่อ) tmp->next = seek->next; free(seek); LOGO k m b m temp seek m k b tmp->next = seek->next; temp seek m b free(seek); LOGO
ลิสต์เชื่อมโยงแบบวงกลม (Circular list) เป็นการนำเอา Singly linked list มาทำให้เป็นวงกลม โดยการให้ Pointer ของโหนดสุดท้ายชี้กลับไปยังโหนดแรก การเข้าถึงข้อมูลจะไม่มีจุดจบ แต่จะวนซ้ำผ่านมายังโหนดเดิมได้ P โหนดล่าสุด = โหนดสุดท้าย LOGO
ลิสต์เชื่อมโยงสองทาง (Doubly linked list) มีคุณสมบัติคล้ายลิสต์เชื่อมโยงทางเดียว เพียงแต่การเข้าถึงข้อมูลสามารถทำได้ 2 ทิศทาง คือ จากซ้ายไปขวาหรือจากขวาไปซ้าย LLINK data RLINK LOGO
Do Don’ t LOGO LAUKHWAN NGAMPRASIT