Linked List DELETE TENGAH 6.3 & 7.3 NESTED LOOP
Menghapus simpul yang berada diantara dua buah simpul DELETE TENGAH Menghapus simpul yang berada diantara dua buah simpul
Q INFO LINK INFO LINK INFO LINK 22 14 20 . . . . . . . . (7) (8) (9) Sudah ada Linear Singly Linked List. Jumlah simpul lebih dari 10. Simpul pertama ada diujung paling kiri, ditunjuk oleh pointer FIRST, dan simpul terakhir ada diujung paling kanan dan ditunjuk oleh pointer LAST. Link ssimpul terakhir nilainya NULL. Bila simpul (7) sudah ditunjuk oleh pointer Q, maka susun algoritma untuk menghapus simpul no (8) sedemikian rupa sehingga simpul no (7) terhubung dengan simpul no (9), sebagai ilustrasi berikut : Q INFO LINK INFO LINK 22 20 . . . . . . . . (7) (9) (8)
Q INFO LINK INFO LINK INFO LINK 22 14 20 . . . . . . . . (7) (8) (9) Dalam keadaan seperti ini simpul no (8) dapat dihapus atau diDELETE dengan instruksi : ? free( . . . . . . . . ) Sehingga hasilnya menjadi : Q INFO LINK INFO LINK 22 20 . . . . . . . . (7) (9) (8)
free( Q->LINK ); Q 22 14 20 . . . . . . . . (7) (8) (9) INFO LINK INFO LINK INFO LINK 22 14 20 . . . . . . . . (7) (8) (9) Dalam keadaan seperti ini simpul no (8) dapat dihapus atau diDELETE dengan instruksi : free( Q->LINK ); Sehingga hasilnya menjadi : Q INFO LINK INFO LINK 22 20 . . . . . . . . (7) (9) (8)
Q INFO LINK INFO LINK 22 20 . . . . . . . . (7) (8) Dalam keadaan seperti ini untuk menghubungkan simpul (7) dengen simpul (8) atau dengan perkataan lain , agar Q->LINK menunjuk simpul (8) dapat dilakukan dengan instruksi : Q->LINK = . . . . . . . ; Sehingga hasilnya menjadi : Q INFO LINK INFO LINK 22 20 . . . . . . . . (7) (9) (8)
Q INFO LINK INFO LINK 22 20 . . . . . . . . (7) (8) Dalam keadaan seperti ini untuk menghubungkan simpul (7) dengen simpul (8) atau dengan perkataan lain , agar Q->LINK menunjuk simpul (8) dapat dilakukan dengan instruksi : Q->LINK = . . . . . . . ; Q->LINK Tidak dapat menunjuk simpul (8) karena tidak ada pointer yang sedang menunjuk simpul (8) Sehingga menghapus simpul TENGAH gagal
Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Bagaimana kalau simpul (7) dihubungkan lebih dulu dengan simpul (9) , kemudian mengapus simpul (8) sebagai ilustrasi berikut ? Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Q LINK LINK INFO INFO 22 20 . . . . . . . . (7) (9) (8)
Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Dalam keadaan seperti ini, untuk menghubungkan simpul (7) dengan simpul (9), dengan perkataan lain agar Q->LINK menunjuk simpul (9), tidak lagi menunjuk simpul (8) sehingga ilustrasinya menjadi sebagai berikut: Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Dapat dilakukan dengan instruksi : ? Q->LINK = . . . . . . . . ;
Q->LINK = Q->LINK->LINK ; INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Dalam keadaan seperti ini, untuk menghubungkan simpul (7) dengan simpul (9), dengan perkataan lain agar Q->LINK menunjuk simpul (9), tidak lagi menunjuk simpul (8) sehingga ilustrasinya menjadi sebagai berikut: Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Dapat dilakukan dengan instruksi : Q->LINK = Q->LINK->LINK ;
Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Dalam keadaan seperti ini, untuk menghapus atau menDELETE simpul no(8), sehingga ilustrasinya menjadi sebagai berikut: Q LINK LINK INFO INFO 22 20 . . . . . . . . (7) (9) (8) Dapat dilakukan dengan instruksi : ? free( . . . . . . .) ;
Sehingga DELETE TENGAH tidak dapat dilakukan dengan cara seperti ini Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Dalam keadaan seperti ini, simpul (8) tidak dapat dihapus atau diDELETE karena tidak ada pointer yang menunjuk simpul (8) Sehingga DELETE TENGAH tidak dapat dilakukan dengan cara seperti ini Sehingga diperlukan cara lain
Bisa menghapus simpul (8), Q KESIMPULAN-1: INFO LINK INFO LINK INFO LINK 22 14 20 . . . . . . . . (7) (8) (9) Q INFO LINK INFO LINK 22 20 . . . . . . . . (7) (9) (8) Dengan Cara-1. Bisa menghapus simpul (8), Tapi tidak bisa menghubungkan simpul (7) dan simpul (9)
Bisa menghubungkan simpul (7) dan simpul (9), Q KESIMPULAN-2: INFO LINK INFO LINK INFO LINK 22 14 20 . . . . . . . . (7) (8) (9) Q LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) Dengan Cara-2. Bisa menghubungkan simpul (7) dan simpul (9), Tapi tidak bisa menghapus simpul (8)
DIPERLUKAN CARA LAIN
Cara-1. R = . . . . . ; free(. . . . . . ); Q->LINK = . . . . . ; Pertama, menempatkan pointer baru misal pointer R di simpul (9) Dengan instruksi : Q R LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) R = . . . . . ; Q R Kedua, Menghapus simpul (8) dengan instruksi : LINK LINK INFO INFO 22 20 . . . . . . . . (7) (8) free(. . . . . . ); (9) Ketiga, Menghubungkan simpul (7) dengan simpul (9) dengan instruksi : Q R LINK LINK INFO INFO 22 20 . . . . . . . . (7) (9) Q->LINK = . . . . . ;
R = Q->LINK->LINK; Cara-1. Pertama, menempatkan pointer baru misal pointer R di simpul (9) Dengan instruksi : Q R LINK LINK LINK INFO INFO INFO 22 14 20 . . . . . . . . (7) (8) (9) R = Q->LINK->LINK; Q R Kedua, Menghapus simpul (8) dengan instruksi : LINK LINK INFO INFO 22 20 . . . . . . . . (7) (8) free(Q->LINK); (9) Ketiga, Menghubungkan simpul (7) dengan simpul (9) dengan instruksi : Q R LINK LINK INFO INFO 22 20 . . . . . . . . (7) (9) Q->LINK = R;
Cara-2. R = . . . . . ; Q->LINK = . . . . ; free ( . . . . . ); Pertama, menempatkan pointer baru misal pointer R di simpul (8) Dengan instruksi : Q R LINK LINK LINK INFO INFO INFO 22 14 20 . . . . (7) (8) (9) R = . . . . . ; Q R Kedua, Menghubungkan simpul(7) dengan simpul (9) dengan instruksi : LINK LINK LINK INFO INFO INFO 22 14 20 . . . . Q->LINK = . . . . ; (7) (8) (9) Ketiga, Menghapus simpul (8) dengan instruksi : Q R LINK LINK INFO INFO 22 20 . . . . (7) (9) free ( . . . . . );
Q->LINK = R->LINK; Cara-2. Pertama, menempatkan pointer baru misal pointer R di simpul (8) Dengan instruksi : Q R LINK LINK LINK INFO INFO INFO 22 14 20 . . . . (7) (8) (9) R = Q->LINK; Q R Kedua, Menghubungkan simpul(7) dengan simpul (9) dengan instruksi : LINK LINK LINK INFO INFO INFO 22 14 20 . . . . Q->LINK = R->LINK; (7) (8) (9) Ketiga, Menghapus simpul (8) dengan instruksi : Q R LINK LINK INFO INFO 22 20 . . . . (7) (9) free ( R );