Linked List ใช้การจัดสรรหน่วยความจำแบบไดนามิก (ขยาย/หดได้) เป็นชุดของโหนด (Node)
Node มี 2 ส่วน: ข้อมูล (data) และ ลิงก์ (link) (รูปภาพไม่ได้รวม)
การดำเนินการกับ Linked List
- Insertion (เพิ่ม)
- Deletion (ลบ)
- Traversing (เดินทาง)
Deletion (การลบ)
- ระบุโหนดที่จะลบ
- ปรับลิงก์ให้ไม่ทำให้ลิสต์ขาดหาย
- คืนค่า/แสดงองค์ประกอบที่ลบ
- ปล่อยหน่วยความจำ (free)
ลบหัว (Head)
void del_head() {
int x;
Node *temp;
if(Head == NULL) {
printf("List is empty");
return;
}
x = Head->ele;
temp = Head;
if(Head == Tail)
Head = Tail = NULL;
else
Head = Head->next;
printf("Deleted element %d", x);
free(temp);
}คำอธิบายขั้นตอน:
- ขั้นตอน 4: ตรวจสอบว่าลิสต์ว่างหรือไม่
- ขั้นตอน 9: อ่านค่าที่จะลบ
- ขั้นตอน 10: Head ชี้โดย temp
- ขั้นตอน 11: ตรวจสอบการลบตัวสุดท้าย
- ขั้นตอน 14: ย้าย Head ไปชี้โหนดถัดไป
- ขั้นตอน 15: แสดงค่าที่ลบ
- ขั้นตอน 16: ปล่อยหน่วยความจำ
ลบท้าย (Tail)
void del_tail() {
int x;
Node *temp;
if(Head == NULL) {
printf("List is empty");
return;
}
temp = Head;
while(temp->next != Tail)
temp = temp->next;
x = Tail->ele;
Tail = temp;
temp = temp->next;
Tail->next = NULL;
printf("Deleted element %d", x);
free(temp);
}คำอธิบายขั้นตอน:
- ขั้นตอน 4: ตรวจสอบลิสต์ว่าง
- ขั้นตอน 10-12: เลื่อน temp ไปโหนดก่อนท้าย
- ขั้นตอน 13: อ่านค่า Tail ที่จะลบ
- ขั้นตอน 14: ย้าย Tail ไปโหนดก่อนท้าย
- ขั้นตอน 15: เลื่อน temp ไปโหนดท้าย
- ขั้นตอน 16: ตัดลิงก์ Tail ไป temp
- ขั้นตอน 17: แสดงค่าที่ลบ
- ขั้นตอน 18: ปล่อยหน่วยความจำ