ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Linked-List (รายการโยง)
อ.ธรรมศักดิ์ เธียรนิเวศน์
2
204311 File Management & Data Structure
Agenda Static List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) Dynamic List (Linked-List) File Management & Data Structure
3
204311 File Management & Data Structure
Objective นักศึกษาสามารถ อธิบายโครงสร้างข้อมูลแบบ Linked List ได้ถูกต้อง เขียนอัลกอริธึม และโปรแกรมด้วยภาษา C ในการดำเนินการต่าง ๆ ตามโครงสร้างข้อมูลแบบ Linked List ได้ถูกต้องอย่างมีประสิทธิภาพ File Management & Data Structure
4
Static List
5
204311 File Management & Data Structure
Static List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
6
204311 File Management & Data Structure
CreateList (static) typedef struct listType{ int size; int value[5]; } LIST; LIST numlist; numlist Size = 0 numlist[0] numlist[1] numlist[2] numlist[3] numlist[4] File Management & Data Structure
7
204311 File Management & Data Structure
Static List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
8
204311 File Management & Data Structure
isEmpty (static) // return 1 if list is empty, else return 0. int islempty(LIST dummy) { return (dummy.size == 0); } File Management & Data Structure
9
204311 File Management & Data Structure
Static List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
10
204311 File Management & Data Structure
insertList (static) numlist[0] numlist[1] numlist[2] numlist[3] numlist[4] 23 25 34 48 Size = 4 numlist 23 24 25 34 48 Size = 5 pos for(i=lst.size;i>pos;i--) // re order from last element to pos lst.value[i] = lst.value[i-1]; numlist.value[pos] = 24; // insert dummy numlist.size++; // increase list size File Management & Data Structure
11
204311 File Management & Data Structure
Static List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
12
204311 File Management & Data Structure
deleteList (static) numlist[0] numlist[1] numlist[2] numlist[3] numlist[4] 23 24 25 34 48 Size = 5 pos numlist 23 25 34 48 Size = 4 for(i=pos;i< numlist.size-1;i++) // re order from pos to last // element. numlist.value[i] = numlist.value[i+1]; numlist.size--; // decrease list size File Management & Data Structure
13
204311 File Management & Data Structure
Static List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
14
204311 File Management & Data Structure
Traverse (static) numlist 23 25 34 48 Size = 4 i void printlst(LIST dummy) { int i; for(i=0;i<dummy.size;i++) printf("%3d",dummy.value[i]); } File Management & Data Structure
15
Dynamic List (Linked-List)
value มูลค่า ตัวชี้บอกที่อยู่ของโหนดถัดไป
16
Advantages of Linked-List
Size is unlimited (depends on memory space) More efficient when insert or delete element of the list. File Management & Data Structure
17
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
18
204311 File Management & Data Structure
CreateList (dynamic) typedef struct listnode{ // create list node type int value; struct listnode *next; } LISTNODE; LISTNODE *numlist=NULL; numlist =(LISTNODE *)malloc(sizeof(LISTNODE)); numlist File Management & Data Structure
19
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
20
204311 File Management & Data Structure
isEmpty (dynamic) // return 1 if list is empty, else return 0. int islempty(LISTNODE *head) { return (head == NULL); } numlist = NULL File Management & Data Structure
21
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) Insert first element Insert element on head of list Insert element between list Insert element on end of list deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
22
insertList (first element)
numlist = getnode(); // head of list numlist->value = 23; numlist->next = NULL; numlist 23 NULL File Management & Data Structure
23
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) Insert first element Insert element on head of list Insert element between list Insert element on end of list deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
24
204311 File Management & Data Structure
insertList (on head) NEW = getnode(); // head of list NEW->value = 20; NEW->next = numlist; numlist = NEW; NEW 20 numlist 23 NULL File Management & Data Structure
25
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) Insert first element Insert element on head of list Insert element between list Insert element on end of list deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
26
insertList (between list)
NEW = getnode(); NEW->value = 24; NEW->next = numlist->next ; numlist->next = NEW; numlist 23 25 NULL NEW 24 File Management & Data Structure
27
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) Insert first element Insert element on head of list Insert element between list Insert element on end of list deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
28
204311 File Management & Data Structure
insertList (on last) NEW = getnode(); NEW->value = 25; NEW->next = NULL; numlist->next = NEW; numlist 23 NULL 25 NULL NEW File Management & Data Structure
29
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) delete element on head of list delete element between list delete element on end of list Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
30
204311 File Management & Data Structure
deleteList (on head) if( numlist->value == 23 ){ // test value of head node backup = numlist; // backup head node numlist = numlist->next; // move head to next node free(backup); // free backup node } numlist 23 backup 24 25 NULL File Management & Data Structure
31
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) delete element on head of list delete element between list delete element on end of list Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
32
deleteList (between list)
ptr = ptr->next; // move ptr to next node if( (ptr->next)->value == 24 ){ // test value of next node backup = ptr->next; // backup next node ptr->next = (ptr->next)->next; // point next node to skip 1 node free(backup); // free backup node } ptr 23 24 25 backup NULL File Management & Data Structure
33
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) delete element on head of list delete element between list delete element on end of list Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
34
204311 File Management & Data Structure
deleteList (on last) while(ptr->next!=NULL){ ptr = ptr->next; // move ptr to next node if( (ptr->next)->value == 25 ){ // test value of next node backup = ptr->next; // backup next node ptr->next = (ptr->next)->next; // point next node to skip 1 node free(backup); // free backup node break; } ptr backup 23 24 25 NULL File Management & Data Structure
35
204311 File Management & Data Structure
Dynamic List CreateList(การสร้างรายการว่าง) isEmpty(ทดสอบว่ารายการว่างหรือไม่) insertList(การเพิ่มสมาชิกใหม่ลงในรายการ) deleteList(การลบสมชิกออกจากรายการ) Traverse(การเข้าถึงสมาชิกของรายการ) File Management & Data Structure
36
204311 File Management & Data Structure
Traverse (dynamic) void printlst(LISTNODE *numlist) { LISTNODE *ptr=numlist; while(ptr!=NULL){ printf("%3d",ptr->value); ptr = ptr->next; // next node } ptr numlist 23 24 25 NULL File Management & Data Structure
37
204311 File Management & Data Structure
Dynamic List Advantages Size is unlimited (depends on memory space) More efficient when insert or delete element of the list. O(1) Disadvantages Cannot retrieve previous element. Function to counting size of list needs to traversing all over the list. O(N) File Management & Data Structure
38
204311 File Management & Data Structure
Other Linked List Circular Linked List Doubly Linked List Linked List Stack Linked List Queue Linked List Priority Queue File Management & Data Structure
39
Question???
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.