Linked List DELETE 6.3 & 7.3 NESTED LOOP
DELETE : DELETE KIRI DELETE KANAN DELETE TENGAH
Menghapus simpul yang berada pada ujung paling kiri DELETE KIRI Menghapus simpul yang berada pada ujung paling kiri Disebut juga DELETE AWAL
Mana yang mengikuti prinsip STACK, dan FIRST LAST Ilustrasi-1 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 Urutan insert (1) (2) (3) (4) Urutan delete (1) (2) (3) (4) LAST FIRST INFO LINK INFO LINK INFO LINK INFO LINK Ilustrasi-2 10 17 12 25 Urutan insert (4) (3) (2) (1) Urutan delete (1) (2) (3) (4) Pertanyaan : Mana yang mengikuti prinsip STACK, dan mana yang mengikuti prinsip QUEUE, Linked List ilustrasi-1 atau Linked List ilustrasi-2
QUEUE STACK FIRST LAST 3.08 25 12 17 10 (1) (2) (3) (4) INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 QUEUE (1) (2) (3) (4) DELETE KIRI akan menghapus simpul no (1) yang ditunjuk oleh pointer FIRST LAST FIRST INFO LINK INFO LINK INFO LINK INFO LINK 10 17 12 25 STACK (4) (3) (2) (1) DELETE KIRI akan menghapus simpul no (4) yang ditunjuk oleh pointer LAST
Setelah DELETE KIRI menjadi : FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Setelah DELETE KIRI menjadi : FIRST LAST INFO LINK INFO LINK INFO LINK 12 17 10 (2) (3) (4) (1) (2) (3)
free( ………. ) free( Q ); free( FIRST ); Instruksi untuk menDELETE sebuah simpul : 3.05 free( ………. ) Nama pointer yang menunjuk simpul tersebut free( Q ); Contoh : Menghapus simpul yang ditunjuk oleh Pointer Q free( FIRST ); Menghapus simpul yang ditunjuk oleh Pointer FIRST
menghapus simpul yang ditunjuk oleh pointer FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Kita coba dengan : free(FIRST); menghapus simpul yang ditunjuk oleh pointer FIRST
Simpul beserta dengan isinya dihapus FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 12 17 10 25 (1) (2) (3) (4) dengan : free(FIRST); Simpul beserta dengan isinya dihapus Field INFO berisi : 25 Field LINK berisi : &(2)
Simpul beserta dengan isinya dihapus FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) (4) dengan : free(FIRST); Simpul beserta dengan isinya dihapus Field INFO berisi : 25 Field LINK berisi : &(2)
? FIRST = . . . . . . . . Instruksinya adalah : FIRST LAST 3.08 12 17 INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) (4) (1) (2) (3) Untuk memindahkan pointer FIRST Sehingga menunjuk simpul paling kiri ( sekarang simpul (1) ) Sebagai berikut : FIRST LAST INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) ? Instruksinya adalah : FIRST = . . . . . . . .
Tidak Bisa , Karena simpul (1) tidak ada yang menunjuk FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) (4) (1) (2) (3) Niat memindahkan pointer FIRST Sehingga menunjuk simpul paling kiri ( sekarang simpul (1) ) Sebagai berikut : FIRST LAST INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) Tidak Bisa , Karena simpul (1) tidak ada yang menunjuk
FIRST tidak dapat menunjuk simpul (2) LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Langsung dengan : free(FIRST); Gagal, Karena FIRST tidak dapat menunjuk simpul (2) Jadai :
Bagaimana kalau pointer FIRST Ditempatkan lebih dulu di simpul (2), LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Bagaimana kalau pointer FIRST Ditempatkan lebih dulu di simpul (2), Baru simpul (1) dihapus FIRST LAST INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4)
? Instruksi memindahkan pointer FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Instruksi memindahkan pointer FIRST Sehingga menunjuk simpul (2), instruksinya adalah : FIRST = . . . . . . . ; ? FIRST LAST INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4)
Instruksi memindahkan pointer FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Instruksi memindahkan pointer FIRST Sehingga menunjuk simpul (2), instruksinya adalah : FIRST = FIRST->LINK; FIRST LAST INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4)
? free( . . . . . ) Setelah pointer FIRST menunjuk simpul (2), LAST INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Setelah pointer FIRST menunjuk simpul (2), Kemudian barulah simpul (1) dihapus dengan instruksi : ? free( . . . . . )
? Tidak bisa karena simpul (1) tidak ada yang menunjuk FIRST LAST INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Setelah pointer FIRST menunjuk simpul (2), Kemudian barulah simpul (1) dihapus dengan instruksi : ? free( . . . . . ) Tidak bisa karena simpul (1) tidak ada yang menunjuk (tidak ada pointer yang menunjuk simpul (1) )
Bagaimana caranya menghapus simpul (1) FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Jadi : Bagaimana caranya menghapus simpul (1) Kemudian FIRST menunjuk simpul (2) ? FIRST LAST INFO LINK INFO LINK INFO LINK 12 17 10 (2) (3) (4) (1) (2) (3)
Gunakan pointer pembantu, misal pointer Q FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Gunakan pointer pembantu, misal pointer Q CARA - I : Misal ditempatkan menunjuk simpul (2) FIRST Q LAST INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4)
? Q = .......; Instruksi menempatkan pointer Q FIRST Q LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Instruksi menempatkan pointer Q agar menunjuk simpul (2) adalah : ? Q = .......;
Q = FIRST->LINK; Instruksi menempatkan pointer Q LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Instruksi menempatkan pointer Q agar menunjuk simpul (2) adalah : Q = FIRST->LINK;
? free(. . . . . . ); Kemudian hapus simpul (1) Dengan instruksi : FIRST Q LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Kemudian hapus simpul (1) Dengan instruksi : ? free(. . . . . . ); Sehingga hasilnya menjadi : FIRST Q LAST INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3)
free(FIRST); Kemudian hapus simpul (1) Dengan instruksi : Q LAST 3.08 INFO LINK INFO LINK INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) Kemudian hapus simpul (1) Dengan instruksi : free(FIRST); Sehingga hasilnya menjadi : FIRST Q LAST INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3)
? FIRST = . . . . . ; Kemudian pindahkan pointer FIRST Q LAST 3.08 INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) Kemudian pindahkan pointer FIRST Sehingga menunjuk simpul awal Dengan instruksi : ? FIRST = . . . . . ; Sehingga hasilnya menjadi : FIRST Q LAST INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3)
FIRST = Q; Kemudian pindahkan pointer FIRST LAST 3.08 INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) Kemudian pindahkan pointer FIRST Sehingga menunjuk simpul awal Dengan instruksi : FIRST = Q; Sehingga hasilnya menjadi : FIRST Q LAST INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3)
Keadaan akhir setelah DELETE KIRI 3.08 FIRST Q LAST INFO LINK INFO LINK INFO LINK 12 17 10 (1) (2) (3) Keadaan akhir setelah DELETE KIRI Biarkan pointer Q tetap menunjuk simpul awal. Pointer Q tidak menggangu. Nanti akan digunakan untuk keperluan berikutnya
Q = FIRST->LINK; free(FIRST); FIRST = Q; FIRST LAST 3.08 25 12 17 INFO LINK INFO INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) FIRST LAST LINK INFO INFO LINK INFO LINK 12 17 10 (1) (2) (3) Kesimpulan : Untuk menghapus simpul (1) atau DELETE KIRI Diperlukan algoritma : Q = FIRST->LINK; free(FIRST); FIRST = Q;
X = FIRST->INFO; printf(“%i”, X); Q = FIRST->LINK; free(FIRST); LAST 3.08 LINK INFO LINK INFO INFO LINK INFO LINK 25 12 17 10 (1) (2) (3) (4) FIRST LAST LINK INFO INFO LINK INFO LINK 12 17 10 (1) (2) (3) Apabila sebelum dihapus nilai INFO (25) Harus dicetak, maka perlu ditambah instruksi menjadi : X = FIRST->INFO; printf(“%i”, X); Q = FIRST->LINK; free(FIRST); FIRST = Q;
HASIL LANGKAH SATU PER SATU 3.08 PERHATIKAN HASIL LANGKAH SATU PER SATU
Keadaan awal : Q = FIRST->LINK; free(FIRST); FIRST = Q; 25 12 17 10 LAST INFO LINK INFO LINK INFO LINK INFO LINK Keadaan awal : 25 12 17 10 Hasilnya bila Dikenai instruksi : Q FIRST LAST INFO LINK INFO LINK INFO LINK INFO LINK Q = FIRST->LINK; 25 12 17 10 Q FIRST LAST INFO LINK INFO LINK INFO LINK free(FIRST); 12 17 10 FIRST Q LAST INFO LINK INFO LINK INFO LINK FIRST = Q; 12 17 10