TUGAS TEORI struktur data Pascal

D. TUGAS

Buatlah program perpustakaan dengan masukan: Nama buku Pengarang nomor indeks Tampilan berupa Menu pilihan T : menambah buku H : menghapus buku S : Selesai Pilih menu? MODUL III SENARAI 1

A. MAKSUD DAN TUJUAN 1.

MAKSUD Pengenalan senerai linked list dengan opeasi tambah simpul dan opeasi baca isi simpul.

2. TUJUAN

Agar praktikan bisa membangun suatu senerai linked list dengan melakukan operasi penambahan simpul dan bisa mengakses isi simpul yang membentuk senerai berantai.

B. TEORI

Disebut senerai berantai karena satu elemen dengan elemen yang lain bisa dihubungkan satu sama lain dengan bantuan pointer. Dengan demikian, setiap simpul dalam suatu senerai berantai terbagi menjadi dua bagian. Bagian pertama, disebut medan informasi, berisi informasi yang akan disimpan dan diolah. Bagian kedua, disebut medan penyambung link field, berisi alamat simpul berikutnya. Gambar di bawah ini menunjukkan skematis dari senerai berantai dengan 4 buah simpul. Setiap simpul digambarkan dalam 2 bagian. Bagian kiri adalah medan informasi. Bagian kanan berupa medan penyambung, sehingga dalam diagram digambarkan sebagai anak panah. Perlu diingat bahwa medan penyambung sebenarnya adalah suatu pointer yang menunjuk ke simpul berikutnya, sehingga nilai dari medan ini adalah alamat suatu lokasi tertentu dalam pengingat. Awal Medan penyampung dari simpul Medan informasi dari simpul A B C D Pada gambar di atas, pointer awal menunjuk ke simpul pertama dari senerai tersebut. Medan penyambung pointer dari suatu simpul yang tidak menunjuk simpul lain disebut pointer kosong, yang nilainya dinyatakan sebagai nil nil adalah kata baku Pascal yang berarti bahwa pointer 0 atau bilangan negatif. Jadi kita bisa melihat bahwa dengan hanya sebuah pointer Awal saja maka kita bisa membaca semua informasi yang tersimpan dalam senerai. Menambah simpul Sekarang kita akan mempelajari bagaimana menambah simpul baru ke dalam senerai berantai. Kita anggap bahwa simpul baru yang akan ditambah selalu menempati posisi setelah posisi yang terakhir dari senerai berantai yang diketahui. Untuk menjelaskan operasi ini baiklah kita gunakan deklarasi pointer dan simpul seperti di bawah ini: Type simpul = data; Data = reecord Info : char; Berikut:simpul; End; Var elemen : char; Awal, akhir, baru : simpul; Ilustrasi penambahan simpul bru di akhir senerai berantai disajikan pada gambar di bawah ini. Pointer Awal adalah pointer yang menunjuk ke simpul pertama, pointer Akhir menunjnuk ke simpul terakhir dan yang ditunjuk oleh pointer baru adalah simpul yang akan ditambah. Dianggap bahwa simpul awal dan simpul akhir telah terbentuk. Awal Akhir Baru A B C D F Awal Akhir Baru Awal Akhir Baru Untuk menyambung simpul yg ditunjuk oleh akhir dan Baru, pointer pada simpul yg ditunjuk oleh simpul akhir dibuat sama dengan baru kemudian pointer akhir dibuat sama dengan pointer baru. Dengan memperhatikan gambar di atas, maka kita bisa menyusun prosedur untuk menambah simpul baru dibelakang senarai berantai. Dalam hal ini perlu pula ditest apakah senarai berantai masih kosong atau tidak. Senarai berantai yang masih kosong ditandai dengan nilai pointer Awal yang nilainya sama dengan nil. Berdasarkan deklarasi simpul dan pointer di atas, maka prosedur untuk menambah simpul di belakang senarai berantai bisa disusun seperti berikut: Procedure TAMBAH_BELAKANG var Awal, Akhir : Simpul; Elemen : char; Var baru : simpul; Begin New baru; baru.info := elemen; If awal = nil then{senarai masih kosong} Awal := baru Else Akhir.berikut := baru Akhir := baru Akhir.beriku:=nil End; Menambah Simpul di tengah A B C D F A B C D F Untuk menambah simpul baru ditengah, pertama kali ditenukan di mana simpul baru akan ditambahkan pada poisi urutan simpul yang keberapa. Hal ini dapat dilakukan dengan menempatkan simpul pointer bantu pada posisi tertentu. Kemudian pointer yang ditunjuk oleh pointer simpul baru dibuat sama dengan pada simpul yang ditunjuk oleh simpul bantu, selanjutnya pointer pada simpul yang ditunjnuk oleh simpul bantu, selalnjutnya pointer pada simpul yang ditunjuk pada simpul yang ditunjuk oleh simpul bantu dibuat sama dengan baru. Perhatikan bahwa urutan ini tidak boleh dibalik. Menghapus simpul Operasi kedua yang akan dijelaskan adalah operasi menghapus simpul. Dalam menghapus simpul simpul satu hal yang perlu diperhatikan, yaitu bahwa simpul yang bisa dihapus adalah simpul yang berada sesuai simpul yang ditunjuk oleh suatu pointer dalam gambar adalah simpul yang berada di sebelah kanan simpul yang ditunjuk oleh suatu pointer, kecuali untuk simpul pertama. Dengan demikian, kita tidak bisa menghapus simpul yang ditunjuk oleh suatu pointer atau simpul sebelumnya. Untuk jelasnya perhatikan ilustrasi pada gambar berikut. Awal Bantu Akhir Jika senarai berntai adalah seperti diatas, maka kita hanya bisa menghapus simpul yang berisi ‘A’ dan simpul yang beisi ‘D’ supaya senarai tetap bisa dipertahankan. Memang kita bisa menghapus simpul yang berisi ‘C’, tetapi senarai yang kita miliki akan menjadi terputus, karena akan lebih sulit untuk menyambung lagi simpul ‘B’ dengan simpul ‘D’. Untuk menghapus simpul pertama, maka pointer Bantu kita buat sama dengan pointer Awal. Kemudian pointer Awal kita pindah ke simpul yang ditunjjuk oleh pointer pada simpul yang ditunjuk oleh pointer Bantu kita dispose. Adapun prosedur menghapus simpul pertama adalah sebagai berikut: Procedure Hapus_pertama var awal : simpul; A B C D Var baru : simpul; Begin If awal = nil then {senerai masih kosong} Writeln‘Senarai masih kosong, tidak mungkin dihapus’ Else if awal.berikut = nil then {senarai berisi sebuah simpul } Awal := nil Else Beginbantu := awal; Awal :=bantu.berikut; Disposebantu; End; End; Untuk menghapus simpul terakhir, tidak bisa dilakukan hanya dengan mendispose simpul akhir. Karena dengan disposenya simpul akhir, maka hanya simpul akhir saja yang dihapus, tetapi simpulnya masih tetap bisa dimasup, karena masih ditunjuk oleh pointer dari simpul di sebeah kirinya. Sehingga untuk bisa menghapus simpul terakhir, selain simpul akhir kita hapus, maka pointer dari sebelah kirinya juga harus dijadikan nil. Membaca Isi Senarai Berantai Jika kita mempunyai senarai berantai seperti yang kita pelajari, maka dengan cara biasa kita hanya bisa membaca isi simpul dimulai dari simpul paling kiri sampai simpul paling kanan membaca maju. Untuk membaca dari simpul paling kanan ke simpul paling kiri, harus dilakukan dengan proses rekursif. Pembacaan senarai berantai secara maju bisa dijelaskan sebagai berikut. Pertama kali kita atur supaya pointer bantu menunjuk ke simpul yang ditunjuk oleh pointer awal. Setelah isi simpul tsb dibaca, maka pointer bantu kita gerakkan ke kanan untuk membaca simpul berikutnya. Proses ini kita ulang sampai pointer bantu sama dengan pointer akhir. Ilustrasi embaca senarai berantai dari kiri ke kanan dapat dilihat pada gambar di bawah ini. Awal Bantu Akhir

C. PRAKTIK