Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ตรรกะการลบหัวและท้ายของ Linked List ใน C

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: ปล่อยหน่วยความจำ