Kadwi Suharsono 67
ITEM
x
BARU START
Gambar 3.18. Penyisipan di awal List.
Contoh 3.14.
Perhatikan lagi list test pada gambar 3.10. Jika nilai test 75 ditambahkan di awal list Geometri. Simulasi dari algoritma 3.4, ITEM = 75, INFO = TEST, START= GEOM.
INSFIRST(TEST, LINK, GEOM, AVAIL, ITEM)
1. Karena AVAIL ≠ NULL, maka control ditransfer ke langkah 2. 2. BARU := 9, AVAIL := LINK[AVAIL] = 10.
3. TEST[9] := 75. 4. LINK[9] := 5. 5. GEOM := 9. 6. Selesai.
Gambar 3.19 menunjukkan struktur data setelah penyisipan 75 ke dalam list Geometri. Perhatikan, hanya ada 3 pointer yang berubah, yaitu: AVAIL, GEOM, dan LINK[9]. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. TEST LINK 11 9 ALG GEOM 74 82 84 78 74 100 88 62 74 93 14 0 12 0 8 13 2 7 6 4 10 AVAIL 75 16 1 5 3 0 15
Kadwi Suharsono 68
Penyisipan Setelah Simpul Tertentu.
Misalkan diberikan nilai LOC, baik itu merupakan alamat dari simpul A da-lam LIST maupun LOC = NULL. Berikut ini adalah sebuah algoritma yang menyisipkan ITEM ke dalam LIST agar ITEM diletakkan setelah simpul A, atau pada saat LOC = NULL, maka ITEM menjadi simpul yang pertama. Jika N merupakan simpul baru, yang alamatnya disimpan dalam BARU, LOC = NULL, maka N akan disisipkan sebagai simpul pertama dalam LIST, seperti yang terdapat dalam algoritma 3.4. Sebaliknya, seperti yang terdapat pada gambar 3.15, simpul N akan menunjuk ke simpul B, yang sebelumnya ditunjuk oleh simpul A, dengan perintah:
LINK[BARU] := LINK[LOC]
dan, simpul A sekarang menunjuk ke simpul N, dengan perintah: LINK[LOC] := BARU
Pernyataan formal dari algoritma tersebut adalah:
Algoritma 3.5:INSLOC(INFO, LINK, START, AVAIL, LOC, ITEM)
Algoritma ini menyisipkan ITEM agar ITEM diletakkan setelah simpul yang ditunjuk LOC atau menyisipkan ITEM sebagai simpul pertama, jika LOC = NULL
1. [OVERFLOW?] Jika AVAIL = NULL, maka: Cetak: OVERFLOW, dan Selesai. 2. [Hapus simpul pertama dari list AVAIL]
BARU := AVAIL, dan AVAIL := LINK[AVAIL]
3. INFO[BARU] := ITEM. [Salin data baru simpjlo baru.]
4. Jika LOC = NULL, maka: [Sisipkan sebagai simpul pertama dalam LIST] LINK[BARU] := START, dan START := BARU.
Lainnya: [Sisipkan setelah simpul pada lokasi LOC.] LINK[BARU] := LINK[LOC], dan LINK[LOC] := BARU [Akhir dari Struktur Jika]
5. Selesai.
Penyisipan pada List Terurut.
Misalkan ITEM akan disisipkan ke dalam list berkait yang terurut, maka ITEM harus disisipkan di antara simpul A dan simpul B, agar
INFO[A] < ITEM < INFO[B]
Berikut ini adalah procedure untuk mencari lokasi LOC dari simpul A, yang akan menemukan lokasi LOC adalah simpul terakhir dari list, jika mempu-nyai nilai lebih kecil dari ITEM.
Mengunjungi list dengan menggunakan variabel pointer PTR, dan mem-bandingkan ITEM dengan INFO[PTR] untuk setiap simpul. Selama operasi
traversing (mengunjungi) ini tetap menyimpan simpul sebelum PTR dengan variabel pointer SAVE, seperti yang terlihat pada gambar 3.20. ja-di variabel pointer SAVE dan PTR dimutakhirkan dengan perintah:
Kadwi Suharsono 69 Traversing akan berlanjut selama INFO[PTR] > ITEM, atau traversing
akan berhenti pada saat ITEM ≤ INFO[PTR]. Berikutnya PTR akan me-nunjuk ke simpul B, dan SAVE akan meme-nunjuk simpul A.
Procedure formalnya adalah sebagai berikut. Dalam hal list kosong atau kondisi ITEM < INFO[START], maka LOC = NULL, akan diperlakukan se-cara khusus, karena tidak mempengaruhi variabel SAVE.
Procedure 3.6: FINDA(INFO, LINK, START, ITEM, LOC)
Procedure ini mencari lokasi LOC dari simpul terakhir dalam list terurut agar INFO[LOC] < ITEM atau LOC = NULL
1. [List kosong?] Jika START = NULL, maka: LOC := NULL dan Selesai.
2. [Kasus khusus?] Jika Item < INFO[START], maka: LOC := NULL dan Selesai. 3. SAVE := START dan PTR := LINK[START] [Inisialisasi pointer.]
4. Ulangi langkah 5 dan 6 selama PTR ≠ NULL 5. Jika ITEM < INFO[PTR], maka:
LOC := SAVE, dan selesai. [Akhir dari struktur Jika]
6. SAVE := PTR, dan PTR := LINK[PTR] [Mutakhirkan pointer] 7. LOC := SAVE.
8. Selesai.
START
x
SAVE PTR
Gambar 3.20. Variabel Pointer Save dan PTR
Sekarang sudah tersedia semua komponen untuk melengkapi algoritma penyisipan ITEM ke dalam list yang terurut. Kesederhanaan algoritma ini adalah karena adanya 2 procedure sebelumnya.
Algoritma 3.7: INSSRT(INFO, LINK, START, AVAIL, ITEM)
Algoritma ini menyisipkan ITEM ke dalam sebuah list berkait yang terurut. 1. [Gunakan procedure 3.6 untuk mencari lokasi simpul sebelum ITEM]
Panggil FINDA(INFO, LINK, START, ITEM, LOC)
2. [Gunakan procedure 3.5 untuk menyisipkan ITEM setelah simpul LOC] Panggil INSTLOC(INFO, LINK, START, AVAIL, LOC, ITEM)
Kadwi Suharsono 70 Contoh 3.15
Perhatikan list pasien yang terurut secara alfabetis pada gambar 3.9. Misalkan Janoko akan disisipkan ke dalam list pasien. ITEM = Janoko, dan INFO = Nobed. a. FINDA(Nobed, LINK, START, ITEM, LOC)
1. Karena START ≠ NULL, kendali dilanjutkan ke baris 2
2. Karena Nobed[5] = Arjuno < Janoko, maka kendali dilanjutkan ke baris 3 3. SAVE := 5, dan PTR = LINK[PTR] =3
4. Langkah 5 dan 6 diulang-uloang sebagai berikut:
a. Nobed[3] = Durno < Janoko, maka SAVE = 3 dan PTR = LINK[3] = 11 b. Nobed[11]= Fetruk < Janoko, maka SAVE = 11 dan PTR = LINK[11]=8 c. Nobed[8] = Gareng < Janoko, maka SAVE = 8 dan PTR = LINK[8] = 1 d. Karena Nobed[1] = Kresno > Janoko, maka
LOC = SAVE = 8 dan Selesai
b. INSLOC(Nobed, LINK, START, AVAIL, LOC, ITEM) [di sini LOC=8] 1. Karena AVAIL ≠ NULL, kendali dilanjutkan ke langkah 2 2. BARU = 10, dan AVAIL = LINK[10] = 2
3. Nobed[10] = Janoko
4. Karena LOC ≠ NULL, maka:
LINK[10] = LINK[8] = 1 dan LINK[8] = BARU = 10 5. Selesai.
Gambar 3.21 menunjukkan struktur data setelah Janoko ditambahkan ke dalam list pasien. Hanya 3 pointer yang mengalami perubahan, yaitu: AVAIL, LINK[10] dan LINK[8]. 5 Nobed Pasien 1 2 3 4 5 6 7 8 9 10 11 12 Kresno Durno Mbilung Arjuno Limbuk Gareng Semar Fetruk Narodo 7 11 12 3 4 10 0 8 9 Next START 2 AVAIL 1 6 0 Janoko
Kadwi Suharsono 71
Penghapusan sebuah elemen dari list berkait.
LIST adalah list berkait yang mempunyai simpul N, terletak di antara sim-pul A dan simsim-pul B, seperti yang tertera pada gambar 3.22(a). Jika simsim-pul N akan dihapus dari list berkait, maka diagram skematiknya seperti yang tertera pada gambar 3.22(b). Penghapusan terjadi pada saat pointer A diubah menunjuk ke simpul B. Oleh karena itu, pada saat penghapusan, perlu dicatat alamat simpul yang menunjuk simpul yang akan dihapus tersebut atau simpul sebelum simpul yang akan dihapus.
Misalkan list berkait tersebut disimpan di memori dengan bentuk: LIST(INFO, LINK, START, AVAIL)
START
x
Simpul A Simpul N Simpul B
(a) Sebelum penghapusan
START
x
Simpul A Simpul N Simpul B
(b) Sesudah penghapusan
Gambar 3.22. Penghapusan Elemen dari List Berkait
Gambar 3.22 tersebut belum menunjukkan fakta bahwa pada saat simpul N dihapus dari list berkait, maka simpul N tersebut segera dikembalikan ke list AVAIL. Khususnya, untuk proses yang lebih mudah, akan diletakkan di simpul awal list AVAIL. Jadi diagram skematik yang lengkap dari pengha-pusan tersebut tertera pada gambar 3.23. Perhatikan bahwa 3 pointer telah berubah, yaitu:
1. Pointer simpul A menunjuk ke simpul B, yang sebelumnya menun-juk ke simpul N.
2. Point N menunjuk ke simpul awal list memori bebas, yang ditunjuk oleh AVAIL.
3. AVAIL sekarang menunjuk ke simpul yang dihapus, N
Juga terdapat 2 hal khusus. Jika simpul N yang akan dihapus merupakan simpul awal, maka awal akan menunjuk ke B; dan jika simpul N yang akan dihapus adalah simpul terakhir dari list, maka simpul A akan berisi NULL.
START
x
Simpul A Simpul N Simpul B
AVAIL
x
Gambar 3.23. Penghapusan List dan AVAIL
Kadwi Suharsono 72 a. Perhatikan gambar 3.21, yang berisi list pasien. Jika Gareng dihapus, maka Nobed[8] sekarang kosong. Untuk menjaga list berkaitnya, maka terjadi peru-bahan pada 3 pointer:
LINK[11] = 10 LINK[8] = 2 AVAIL = 8
Dengan perubahan pertama, Fetruk yang sebelumnya menunjuk Gareng, se-karang menunjuk ke Janoko, yang sebelumnya ditunjuk oleh Gareng. Peru-bahan kedua dan ketiga menambahkan Nobed kosong ke dalam list AVAIL. Terlihat bahwa sebelum melakukan penghapusan, ditemukan dulu Nobed[11], yang menunjuk ke simpul yang akan dihapus, Nobed[8].
b. Perhatikan gambar 3.12, yang berisi list Broker dan Pelangganya. Misalkan Togog, pelanggan pertama dari Narodo, akan dihapus dari list Pelanggan. Untuk menjaga list berkaitnya, maka terjadi perubahan pada 3 pointernya:
POINT[4] = 10 LINK[9] = 11 AVAIL = 9
Perubahan yang pertama, Narodo sekarang menunjuk ke Janoko. Perubahan kedua dan ketiga, menambahkan simpul kosong ke dalam list AVAIL.
c. Misalkan elemen E, B, dan C akan dihapus secara berurutan dari list yang ter-tera pada gambar 3.16. Bentuk struktur datanya seperti yang terter-tera pada gambar 3.24. perhatikan bahwa sekarang terdapat 3 simpul yang tersedia:
INFO[3], yang sebelumnya berisi C INFO[2], yang sebelumnya berisi B INFO[5], yang sebelumnya berisi E
Perhatikan bahwa urutan dari simpul tersebut dalam list AVAIL kebalikan dari urut-an penghapusurut-an simpulnya. INFO LINK 2 1 4 8 10 0 6 START 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 3 AVAIL 0 5 7 9 A D F
Gambar 3.24. Penghapusan beberapa elemen dari List. Algoritma Penghapusan.
Algoritma penghapusan elemen dari suatu list berkait dapat terjadi pada beberapa kondisi. Akan dibahas 2 kondisi saja, yaitu: penghapusan simpul berdasarkan simpul tertentu, dan penghapusan simpul, berdasarkan ITEM yang sesuai dengan info dari simpulnya. Semua algoritma diasumsikan list
berkait tersebut disimpan di memori dengan bentuk LIST(INFO, LINK, START, AVAIL)
Kadwi Suharsono 73
Semua algoritma penghapusan akan menghasilkan memori bebas akibat penghapusan simpul N, yang diletakkan di awal list AVAIL. Oleh karena itu, semua algoritma penghapusan akan mempunyai pasangan perintah ber-ikut ini, di mana LOC berisi alamat dari simpul N yang akan dihapus:
LINK[LOC] = AVAIL dan kemudian AVAIL = LOC Kedua operasi ini diilustrasikan dalam gambar 3.25.
x
LOC
AVAIL
Simpul N
List memori kosong
Gambar 3.25. Penambahan simpul pada list AVAIL
Beberapa algoritma penghapusan akan memperhatikan penghapusan di awal list dan di akhir list. Algoritma juga memeriksa apakah terdapat sim-pul dalam list. Jika tidak ada simpulnya, misalnya START = NULL, maka algoritma akan mencetak pesan UNDERFLOW.
Menghapus simpul tertentu dari list berkait
Misalkan LIST adalah list berkait di memori dan LOC adalah lokasi dari simpul N dalam list. LOCP adalah lokasi dari simpul sebelum simpul N, atau jika N adalah simpul pertama, maka LOCP = NULL. Algoritma berikut menghapus simpul N dari list.
Algoritma 3.8: DEL(INFO, LINK, START, AVAIL, LOC, LOCP)
Algoritma ini menghapus simpul N pada lokasi LOC. LOCP adalah lokasi simpul sebelum simpul N, atau jika N adalah simpul pertama, maka LOCP = NULL. 1. Jika LOCP = NULL, maka:
START := LINK[START] [Hapus simpul pertama] Lainnya:
LINK[LOCP] := LINK[LOC]. [Hapus simpul N] [Akhir dari Struktur Jika]
2. [Kembalikan simpul yang dihapus ke list AVAIL] LINK[LOC] := AVAIL dan AVAIL := LOC. 3. Selesai.
Gambar 3.26 merupakan diagram skematik untuk perintah: START := LINK[START]
yang langsung menghapus simpul pertama dari list. Ini untuk mengatasi jika N merupakan simpul pertama.
Kadwi Suharsono 74
Simpul 1 Simpul 2 Simpul 3 START
Gambar 3.26. START := LINK[START] Gambar 3.27 merupakan diagram skematik untuk perintah:
LINK[LOCP] := LINK[LOC]
yang akan menghapus simpul N, yang bukan merupakan simpul pertama. Kesederhanaan dari algoritma tersebut disebabkan karena telah diperoleh LOCP, yang berisi alamat dari simpul sebelum sempul N. Dalam beberapa aplikasi, LOCP harus dicari terlebih dahulu.
START
x
LOCP LOC
Simpul N
Gambar 3.27. LINK[LOCP] := LINK[LOC] Menghapus simpul berdasarkan ITEM tertentu
Misalkan LIST adalah list berkait yang tersimpan di memori. Sekarang di-berikan informasi ITEM dan akan dihapus dari LIST simpul N pertama yang mempunyai informasi sama dengan ITEM. (Jika ITEM adalah field
kunci/keyfield, hanya ada 1 ITEM dalam LIST). Perlu diingat bahwa untuk dapat menghapus simpul N dari list, perlu diketahui terlebih dulu alamat simpul sebelum simpul yang akan dihapus. Oleh karena itu, perlu dibuat procedure untuk mencari lokasi LOC, yang berisi informasi sama dengan ITEM dan LOCP, lokasi simpul sebelum N. Jika ternyata N adalah simpul awal, maka LOCP = NULL, dan jika ITEM tidak terdapat dalam list, maka LOC = NULL. Ini mirip dengan procedure 3.6.
Mengunjungi list dengan menggunakan variabel pointer PTR dan mem-bandingkan ITEM dengan INFO[PTR] untuk setiap simpul. Selama meng-unjungi, tetap disimpan lokasi dari simpul sebelumnya dengan variabel
pointer SAVE, seperti yang tertera pada gambar 3.20. Jadi PTR dan SAVE dimutakhirkan dengan perintah:
SAVE := PTR dan PTR := LINK[PTR]
Operasi mengunjungi ini akan berlanjut selama INFO[PTR] ≠ ITEM, dan berhenti jika ITEM = INFO[PTR]. Maka PTR akan berisi alamat lokasi LOC dari simpul N dan SAVE berisi alamat lokasi LOCP simpul sebelum N. Procedure formalnya sebagai berikut. Dalam hal list sedang kosong atau INFO[START] = ITEM, maka akan diperlakukan secara terpisah, karena tidak menyertakan variabel SAVE.
Kadwi Suharsono 75 Procedure 3.9:FINDB(INFO, LINK, START, ITEM, LOC, LOCP)
Procedure ini mencari lokasi LOC simpul N pertama yang berisi informasi ITEM dan lokasi LOCP dari simpul sebelum N. Jika ITEM tidak terdapat dalam list maka LOC = NULL; jika ITEM muncul di simpul pertama, maka LOCP = NULL.
1. [List kosong?] Jika START = NULL maka:
LOC := NULL dan LOCP = NULL, dan Selesai. [Akhir dari Struktur Jika]
2. [ITEM berada di simpu pertama?] Jika INFO[START] = ITEM, maka: LOC := START dan LOCP :=NULL, dan Selesai.
[Akhir dari Struktur Jika]
3. SAVE := START dan PTR = LINK[START]. [Inisialisasi Pointer] 4. Ulangi langkah 5 dan 6 selama PTR ≠ NULL
5. Jika INFO[PTR] = ITEM, maka:
LOC := PTR dan LOCP := SAVE, dan Selesai. [Akhir dari Struktur Jika]
6. SAVE := PTR dan PTR := LINK[PTR] [Mutakhirkan pointer] [Akhir dari Perulangan langkah 4]
7. LOC := NULL. [Pencarian gagal.] 8. Selesai.
Sekarang dapat dengan mudah disusun algoritma untuk menghapus sim-pul N yang berisi informasi ITEM, dari list berkait. Kesederhanaan algo-ritma berasal dari fakta bahwa tugas untuk mencari lokasi simpul N dan lokasi simpul sebelumnya telah tersedia pada algoritma 3.9.
Algoritma 3.10: DELETE(INFO, LINK, START, AVAIL, ITEM)
Algoritma ini menghapus simpul N yang berisi informasi ITEM dari list berkait. 1. [Gunakan procedure 3.9 untuk mencari lokasi N dan simpul sebelumnya.]
Panggil FINDB(INFO, LINK, START, ITEM, LOC, LOCP)
2. Jika LOC = NULL, maka: Cetak: ITEM tidak terdapat dalam list, Selesai. 3. [Menghapus simpul]
Jika LOCP = NULL, maka:
START := LINK[START]. [Menghapus simpul pertama.] Lainnya:
LINK[LOCP] := LINK[LOC]. [Akhir dari Struktur Jika]
4. [Mengembalikan simpul terhapus ke dalam list AVAIL] LINK[LOC] := AVAIL dan AVAIL := LOC.
5. Selesai.
Catatan: Jika diperhatikan, langkah 3 dan 4 algoritma di atas telah muncul dalam algoritma 3.8, sehingga dapat diganti dengan memanggil berikut:
Panggil DEL(INFO, LINK, START, AVAIL, LOC, LOCP) Ini adalah salah satu bentuk gaya pemrograman modular.
Kadwi Suharsono 76 Contoh 3.17
Perhatikan list pasien pada gambar 3.21. Jika pasien Gareng akan dihapus, akan disimulasikan procedure 5.9 untuk mencari lokasi LOC dari Gareng dan lokasi LOCP, alamat dari sebelum Gareng. Kemudian disimulasikan algoritma 3.10 untuk menghapus Gareng dari list. Di sini ITEM = Gareng, INFO = Nobed, START = 5 dan AVAIL = 2.
a. FINDB(NOBED, LINK, START, ITEM, LOC, LOCP)
1. Karena START ≠ NULL, kendali dialihkan ke langkah 2
2. Karena Nobed[5] = Arjuno ≠ Gareng, kendali dialihkan ke langkah 3 3. SAVE = 5 dan PTR =LINK[5] = 3
4. Langkah 5 dan 6 diulang sebagai berikut:
a. Nobed[3] = Durno ≠ Gareng, maka SAVE = 3 dan PTR = LINK[3] = 11 b. Nobed[11] = Fetruk ≠ Gareng,maka SAVE = 11 dan PTR = LINK[11]=8 c. Nobed[8] = Gareng, sehingga:
LOC = PTR = 8 dan LOCP = SAVE = 11, dan Selesai.
b. DELETE(NOBED, LINK, START, AVAIL, ITEM)
1. Panggil FINDB(NOBED, LINK, START, AVAIL, ITEM) 2. Karena LOC ≠ NULL, kendali dialihkan ke langkah 3. 3. Karena LOCP ≠ NULL, maka: LINK[11] = LINK[8] = 10. 4. LINK[8] = 2 dan AVAIL = 8.
5. Selesai.
Gambar 3.28 menunjukkan struktur data setelah Gareng dihapus dari list
pasien. Terdapat 3 pointer yang mengalami perubahan, yaitu: LINK[11], LINK[8] dan AVAIL.
5 Nobed Pasien 1 2 3 4 5 6 7 8 9 10 11 12 Kresno Durno Mbilung Arjuno Limbuk Semar Fetruk Narodo 7 11 12 3 4 2 0 10 9 Next START 8 AVAIL 1 6 0 Janoko
Kadwi Suharsono 77
1. Gambar 3.29 berikut adalah daftar 5 pasien rumah sakit dan no kamar-nya.
a. Isilah nilai StartN dan LinkN agar membentuk daftar pasien urut berdasarkan nama pasien.
b. Isilah nilai StartK dan LinkK agar membentuk daftar pasien urut ber-dasarkan nomer kamarnya.
Nama Kamar Bismo Sugriwo Arjuno Janoko Burisrowo 650 704 462 632 LinkN StartN StartK LinkK 422 1 2 3 4 5
Gambar 3.29. Daftar Pasien Rumah Sakit 2. Gambar 3.30 berikut adalah list berkait dalam memori.
a. Temukan urutan karakter tersebut da-lam list
b. Jika F dan C dihapus dari list, kemudi-an G disisipkkemudi-an di awal list. Bagaimkemudi-ana struktur datanya?
c. Jika C dan F dihapus dari list, kemudi-an G disisipkkemudi-an di awal list. Bagaimkemudi-ana struktur datanya?
d. Jika G disisipkan di awal list, kemudian F dan C dihapus dari list. Bagaimana struktur datanya?
3. Jika LIST adalah list berkait di memori yang berisi nilai numerik. Buat procedure untuk permasalahan berikut:
a. Mencari MAX, sebagai angkat terbesar dalam list. b. Mencari MEAN, sebagai angka rata-rata dalam list
c. Mencari PROD, sebagai hasil perkalian semua elemen dalam list. 4. Tulislah procedure dengan menginputkan bilangan bulat K, akan
menghapus elemen ke K dalam list berkait.
5. Tulis procedure yang akan menambahkan informasi ITEM yang diletakkan di akhir list.
Soal no 6 s/d 11 mengacu pada gambar 3.31.
6. Tulis sebuah program yang membaca sebuah bilangan bulat K dan mencetak semua nama Klien dari Pengacara K. Uji program dengan setiap Pengacara.
7. Tulis sebuah program yang mencetak nama Klien dan Pengacaranya dengan kriteria umurnya sama atau lebih besar dari L. Uji program dengan menggunakan: a. L = 41 dan b. L = 48.
INFO LINK 6 7 0 1 START 1. 2. 3. 4. 5. 6. 7. 8. AVAIL 2 8 0 5 A B C D E F
Kadwi Suharsono 78
8. Tulis sebuah program yang membaca nama Pengacara LLL dan men-cetak daftar Klien dari Pengacara tersebut. Uji program dengan: a. Rahwono, b. Baladewa, c. Limbuk.
9. Tulis sebuah program yang membaca NAMA dari Klien dan mencetak Nama Klien, Umur dan Pengacaranya. Uji program dengan: a. Nakula, b. Fetruk, c. Duryudono, d. Hanoman
10. Tulis sebuah program yang membaca NAMA dari Klien dan mengha-pus record Klien tersebut dari struktur. Uji program dengan mengguna-kan: a. Laksamana, b. Kokosrono, c. Parikesit
11. Tulis sebuah program yang membaca record baru Klien, yang terdiri dari nama Klien, Umur dan nama Pengacara, dan sisipkan record ter-sebut ke dalam struktur. Uji program dengan: a. Jayajatra, 36, Limbuk b. Niwatakawaca, 44, Narodo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Usia Klien 1. 2. 3. 4. Pengacara Point Durno Limbuk Narodo Rahwono 4 12 21 8 Hanoman Fetruk Bisma Prahasta Burisrowo Widura Togog Drupadi Hanggada Jaladara Rama Ekalaya 35 47 54 42 38 45 32 42 15 Avail 28 38 25 46 52 40 32 LINK 16 25 22 29 3 0 28 24 30 7 23 0 13 14 26 0 6 27 0 1 Madri Gatotkaca Nakula 21 22 23 24 25 26 27 28 29 30 Abimanyu Cakil Gandamana Laksamana Parikesit Sinta 36 33 42 50 45 48 28 20 18 11 9 0 5 19 10 17 2 Gandawati