1 / 18

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure). โครงสร้างข้อมูลแบบลิงค์ลิสต์ ( Linked List). โครงสร้างข้อมูลแบบลิงค์ลิสต์ ( Linked List).

kimama
Download Presentation

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. วิชา COSC2202โครงสร้างข้อมูล (Data Structure) โครงสร้างข้อมูลแบบลิงค์ลิสต์ (Linked List)

  2. โครงสร้างข้อมูลแบบลิงค์ลิสต์ (Linked List) • ลิงค์ลิสต์เป็นการจัดเก็บชุดข้อมูลเชื่อมโยงต่อเนื่องกันไปตามลำดับ ซึ่งอาจอยู่ในลักษณะแบบเชิงเส้นตรง (linear) หรือ ไม่เป็นเส้นตรง (nonlinear) ก็ได้ ซึ่งในลิสต์จะประกอบไปด้วยข้อมูลที่เรียกว่าโหนด (node) ในหนึ่งโหนดจะประกอบด้วยส่วนของข้อมูลที่ต้องการจัดเก็บ เรียกว่าส่วน Info และส่วนที่เป็นพอยน์เตอร์ที่ชี้ไปยังโหนดถัดไป (Link) หรือชี้ไปยังโหนดอื่นๆที่อยู่ในลิสต์ หากไม่มีโหนดที่อยู่ถัดไป ส่วนที่เป็นพอยน์เตอร์หรือ Link จะเก็บค่า NULL หรือ NILL ใช้สัญลักษณ์ ^

  3. โครงสร้างข้อมูลแบบลิงค์ลิสต์ (Linked List) • Linked list คล้ายๆ กับขบวนรถไฟ ตรงที่ว่าการที่จะเกิดเป็นขบวนรถไฟได้จะต้องมีการนำโบกี้รถไฟหลายๆ โบกี้มาต่อกัน ขบวนจะสั้นหรือยาวก็ขึ้นอยู่กับโบกี้เหล่านี้ หากผู้โดยสารโบกี้แรกๆ ต้องการที่จะไปยังโบกี้สุดท้ายก็ต้องเดินผ่านโบกี้อื่นๆ ระหว่างทางด้วย

  4. โครงสร้างข้อมูลแบบลิงค์ลิสต์ (Linked List) • โหนด (Node) • โครงสร้างแบบ Linked list แบ่งได้หลายแบบตามวิธีการชี้ไปยังโหนดต่างๆ เช่น Singly Linked list , Doubly Linked list , Multi-Linked list • Singly Linked listSingly Linked list จะประกอบด้วยโหนดที่มีพอยน์เตอร์ชี้ไปในทิศทางเดียว คือชี้ไปยังโหนดถัดไป

  5. โครงสร้างข้อมูลแบบลิงค์ลิสต์ (Linked List) • Doubly Linked list Doubly linked list ประกอบด้วยส่วนของ Info และ พอยน์เตอร์ที่ชี้ไป 2 ทิศทาง คือ ชี้ไปยังโหนดถัดไป และชี้ไปยังโหนดก่อนหน้า ดังนั้นเราจึงสามารถทำการอ่านข้อมูลได้ 2 วิธี คือ การอ่านไปข้างหน้า และอ่านไปทางข้างหลัง

  6. การทำงานของลิสต์ • การสร้างลิสต์ว่าง • การทดสอบว่าลิสต์ว่างหรือไม่ • การเพิ่มสมาชิกใหม่ลงในลิสต์ • การลบสมาชิกออกจากลิสต์ • การท่องไปในลิสต์หรือส่วนของลิสต์ โดยการเข้าถึงสมาชิก และประมวลผลสมาชิกแบบลำดับ

  7. การสร้างรายการว่าง typedef struct listnode{// create list node type int value; struct listnode *next; } LISTNODE; LISTNODE *numlist=NULL; numlist =(LISTNODE *)malloc(sizeof(LISTNODE)); numlist

  8. ทดสอบว่ารายการว่างหรือไม่ทดสอบว่ารายการว่างหรือไม่ // return 1 if list is empty, else return 0. int islempty(LISTNODE *head) { return (head == NULL); } numlist = NULL

  9. การเพิ่มสมาชิกใหม่ลงในรายการการเพิ่มสมาชิกใหม่ลงในรายการ • Insert first element • Insert element on head of list • Insert element between list • Insert element on end of list

  10. Insert first element numlist = getnode(); // head of list numlist->value = 23; numlist->next = NULL; 23 NULL numlist

  11. Insert element on head of list NEW = getnode(); // head of list NEW->value = 20; NEW->next = numlist; numlist = NEW; NEW 20 numlist 23 NULL

  12. Insert element between list NEW = getnode(); NEW->value = 24; NEW->next = numlist->next ; numlist->next = NEW; numlist 23 25 NEW 24 NULL

  13. Insert element on end of list NEW = getnode(); NEW->value = 25; NEW->next = NULL; numlist->next = NEW; numlist 23 NULL 25 NULL NEW

  14. การลบสมาชิกออกจากรายการการลบสมาชิกออกจากรายการ • delete element on head of list • delete element between list • delete element on end of list

  15. delete element on head of list 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 } 23 24 25 backup NULL

  16. delete element 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 } 24 23 25 backup NULL

  17. delete element on end of list 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 24 23 25 NULL

  18. การเข้าถึงสมาชิกของรายการการเข้าถึงสมาชิกของรายการ void printlst(LISTNODE *numlist) { LISTNODE *ptr=numlist; while(ptr!=NULL){ printf("%3d",ptr->value); ptr = ptr->next; // next node } } ptr 24 numlist 23 25 NULL

More Related