บทที่ 5 Link List Link List
Link List Link List โครงสร้างข้อมูลแบบ Link List เป็นโครง สร้างข้อมูลแบบ Linear ซึ่งอาจเป็น Single link list หรือ Double link list จุดประสงค์เพื่อสร้าง Array แบบ Dynamic กล่าวคือ ไม่ต้องจองเนื้อที่ในหน่วยความจำล่วงหน้า แบบต่อเนื่อง แต่ละ element เรียกว่า โหนด ( node) ซึ่งประกอบด้วยข้อ มูล (information) และที่อยู่ (Address) ของโหนดถัดไปซึ่ง อาจเป็น Pointer หรือ Index ขึ้นอยู่กับการ Implement โหนดโดยทั่วไป จะอยู่ในรูปแบบ record หรือ Structure
Link List Link List *** สิ่งที่ควรระวังคือ Pointer จะหายหรือชี้ผิดที่ ยากต่อการค้นหาและตรวจสอบโปรแกรม
Link List การ Implement ด้วย Pointer ** สิ่งที่ควรระวัง : - ยุ่งยากและเข้าใจยาก - Hang ง่ายเพราะหา Pointer ไม่เจอ - Trace ยาก - ตัวแปรต้องประกาศเป็น Record ซึ่งประกอบด้วย * information * pointer
Link List ประเภทของ Link list - Single Link List - Double Link List ตัวอย่างการประกาศตัวแปรแบบภาษา-C typedef struct Reclink { char infor; struct Reclink *next; } typeNode; o o o typeNode *dummy, *node, *head, *tail;
Link List node.infor (เอา Address) *node.infor หรือ node->infor (เอาค่า) Algorithm Create_Linklist(Head, Item) { new(node); node->infor = item; node->next = Null; head = node; // tail = head; }
Link List Insert_Linklist (Head, Tail, item) { new(node); node->infor = item; node->next = Null; //- - - - - ต่อที่หัว - - - - -// node->next = head; head = node; //- - - - - ต่อที่ท้าย - - - - -// tail->next = node; tail = node; }
Link List ** ให้นิสิตทำ Display_Linklist (Head) แบบ Recursive { if(!head) Display (“ Empty Link list”); else { dummy = Head; while (dummy!= Null) { Display(dummy->infor); dummy = dummy->next; } ** ให้นิสิตทำ Display_Linklist (Head) แบบ Recursive
Link List Search_Linklist (Head, value) { if (!head) Display (“ Empty Link list”); else { Count = 0; dummy = Head; while (dummy) { if (dummy->infor = value) { Display(“ Found “); Count ++; } dummy = dummy->next;
Link List *** ให้นิสิตหาโหนด ที่อยู่หน้าโหนด ที่ต้องการหา if (Count = 0) Display(“ Not found”); else Display(“Delete = ” + Count + ”Value”); } //end else } *** ให้นิสิตหาโหนด ที่อยู่หน้าโหนด ที่ต้องการหา
Link List dummy->next = dummy->next->next ? . . . . . . . . . . . . dummy dummy->next prenode node prenode->next = node->next ? prenode->next = prenode->next->next ?
Link List Delete_Linklist (Head, item) { if (!head) Display (“ Empty Link list”); else { temp=dummy = head; if (dummy->infor = item) { head = head->next; free(temp); } { prenode = search_Linklist (Head, item);
Link List if (prenode != Null) { temp = prenode->next; /* ? */ prenode->next = prenode->next->next; free(temp); } else Display("Not found"); *** ถ้าต่อโหนด ที่หัวเรียกว่า Poly Front แต่ถ้าต่อเข้าที่ท้ายเรียกว่า Poly End