Senarai Berantai Ika Menarianti Senarai Berantai Senarai Berantai
Senarai Berantai Ika Menarianti
Senarai Berantai � Senarai Berantai (Linked List) adalah jenis struktur data yang berisi kumpulan data yang disusun secara linier dengan masing-masing data disimpan dalam sebuah simpul dan antara satu simpul dengan simpul lain dihubungkan melalui pointer. � Bentuk dasarnya membuat data disisipkan ke dalam senarai melalui salah satu ujungnya.
� Perhatikan gambar yang menunjukkan keadaan senarai berantai apabila secara berturut nama Arsen, Bian, Cahaya dan Danar. � Arsen sebagai data yang pertama kali dimasukkan akan berada pada salah satu ujung (ujung kanan) sedangkan data yang terakhir masuk yaitu Danar, berada di ujung kiri yang ditunjuk oleh Pointer Pertama Danar Bian Cahaya Arsen Nil
Pertama selalu menunjuk ke data yang terakhir kali dimasukkan. � Sifat ini mirip dengan tumpukan tetapi berbeda pada penghapusan data. Penghapusan data pada senarai bisa dilakukan dimana saja. � Setiap data di letakkan dalam sebuah simpul (node). � Setiap simpul terdiri atas dua bagian, yaitu bagian data dan penunjuk simpul berikutnya. � Pointer
Operasi dasar dalam senarai berantai � Inser. First menyatakan operasi untuk memasukkan data ke dalam senarai berantai pada posisi yang ditunjuk oleh pointer Pertama. Dinyatakan dengan Insert. First(d), d menyatakan item yang dimasukkan ke dalam senarai � Find menyatakan operasi untuk mencari suatu data dalam senarai berantai. Dinyatakan dengan fungsi Find(pendahulu, x). Nilai baliknya berupa true kalau data yang dicari (yaitu x) ada atau False jika data tidak ada. � Remove menyatakan operasi untuk menghilangkan sebuah simpul dari senarai berantai. Dinyatakan dengan Remove(x).
Implementasi senarai berantai � Pilihlah menu File dan klik Save Project As. . � Simpan unit dengan nama Fsenarai � Simpan project dengan nama Psenarai � Atur Properti: � Name : Form. Senarai � Caption : Senarai Berantai
Menambahkan kode untuk mendeklarasikan tipe dan variabel � Tuliskan kode berikut dibawah type TNama = String[35]; TPtr. Simpul = ^TSimpul; TSimpul = record Nama : TNama; Berikut : TPtr. Simpul; end; � Buatlah baris kosong antara {private declarations} dan public � pada baris kosong ketikkan: Pertama: TPtr. Simpul;
� TNama = String[35]; digunakan untuk membuat tipe Tnama � TPtr. Simpul = ^TSimpul; digunakan untuk membentuk tipe TPtr. Simpul yang merupakan pointer yang menunjuk ke TSimpul = record Nama : TNama; Berikut : TPtr. Simpul; end; Dibuat dua buah field bernama Nama dan Berikut. Nama digunakan untuk menyimpan data nama orang. Berikut merupakan pointer yang menunjuk ke simpul berikutnya atau berisi nil kalau tidak ada yang ditunjuk.
Menambahkan komponen string grid, edit dan button
Komponen Properti Nilai String Grid Name String. Grid. Senarai Col. Count 1 (lebarkan sesuai grid) Scroll. Bars ss. Vertical (hanya scrollbar vertikal yang ditampilkan) Name Edit. Senarai Text Kosongkan Name Button. Sisip Caption &Sisipkan Name Button. Cari Caption &Cari Name Button. Remove Caption &Remove Name Button. Keluar Caption &Keluar Edit Button 1 Button 2 Button 3 Button 4
Menambahkan prosedur untuk menampilkan data � Tambahkan baris berikut di atas kata private procedure Tampilkan. Data; � Tuliskan kode berikut di atas end. yang paling bawah. procedure TForm. Senarai. Tampilkan. Data; var Penunjuk : TPtr. Simpul; Jum. Simpul: Integer; Nomor : Integer; begin //Hitung jumlah simpul Penunjuk: = Pertama; Jum. Simpul : = 0;
while Penunjuk <> Nil do begin Jum. Simpul : = Jum. Simpul + 1; Penunjuk : = Penunjuk^. Berikut; end; //proses penampilan data String. Grid. Senarai. Row. Count: =Jum. Simpul + 1; String. Grid. Senarai. Cells[0, 0] : = 'Isi Senarai'; Penunjuk: = Pertama; Nomor: =0; while penunjuk <> Nil do begin Nomor: = Nomor +1; String. Grid. Senarai. Cells[0, Nomor]: = Penunjuk^. Nama; Penunjuk : = Penunjuk^. Berikut; end;
Penjelasan. . . � Mula-mula diperlukan sebuah pointer dengan nama Penunjuk yang bertipe. TPtr. Simpul. Pointer ini digunakan untuk menunjuk ke record bertipe Tsimpul. � Pointer diberi nilai yang sama dengan nilai pada pertama. � Penunjuk : = Pertama dijalankan akan terbentuk semacam Penunjukkeadaan berikut: Pertama Danar Bian Cahaya Arsen Nil
� Pointer penunjuk itulah yang dipakai untuk melakukan pembacaan terhadap seluruh simpul. � Pada tahap pertama dalam prosedur Tampilkan. Data dilakukan proses untuk mendapatkan jumlah simpul, yang akan dipakai untuk menentukan jumlah baris dalam String Grid. Itulah sebabnya ada pernyataan: Jum. Simpul : = 0; � Yang memberikan nilai awal untuk Jum. Simpul sebesar 0 � Perhitungan jumlah simpul dilakukan melalui: while Penunjuk <> Nil do begin Jum. Simpul : = Jum. Simpul = 1; Penunjuk : = Penunjuk^. Berikut; end;
� Kondisi pengulangan berupa Penunjuk <> Nil , berarti Penunjuk tidak sama dengan Nil. � Nil menyatakan bahwa tidak ada data yang ditunjuk. � Gambar diatas menjelaskan bahwa penunjuk sedang menunjuk ke simpul yang berisi “Danar”. Jelas bahwa penunjuk tidak berisi Nil. � Program yang terdapat dalam begin. . end dijalankan. Jum. Simpul menjadi bernilai 1. � Penunjuk : = Penunjuk^. Berikut; digunakan untuk mengisikan nilai Berikut yang ditunjuk oleh Penunjuk. Nilai penunjuk setelah pernyataan dieksekusi akan sama dengan nilai Berikut yang ditunjuk oleh penunjuk semula.
Penunjuk Pertama Danar Bian � Penunjuk Cahaya Arsen Nil menunjuk ke simpul berisi “Cahaya”. Berarti penunjuk tidak berisi Nil. � Program begin. . end dijalankan dan Jum. Simpul menjadi bernilai 2. Selanjutnya menjadi. . .
Penunjuk Pertama Danar Bian � Penunjuk Cahaya Arsen Nil menunjuk ke simpul berisi “Bian”. Berarti penunjuk tidak berisi Nil. � Program begin. . end dijalankan dan Jum. Simpul menjadi bernilai 3. Selanjutnya menjadi. . .
Penunjuk Pertama Danar Bian � Penunjuk Cahaya Arsen Nil menunjuk ke simpul berisi “Arsen”. Berarti penunjuk tidak berisi Nil. � Program begin. . end dijalankan dan Jum. Simpul menjadi bernilai 4. Selanjutnya penunjuk mengarah ke berikutnya yaitu Nil. � Mengingat penunjuk sama dengan Nil maka nilai while menjadi False, nilai pada Jum. Simpul menyatakan jumlah simpul dalam senarai.
�String. Grid. Senarai. Row. Count: =Jum. Simpul + 1; untuk menunjukkan jumlah baris dalam String Grid. Penambahan angka 1 ditujukan untuk menyediakan ruang bagi judul grid. �Penentuan judul grid dilakukan String. Grid. Senarai. Cells[0, 0] : = 'Isi Senarai'; �Penggunaan variabel Nomor pada kode didepan dipakai untuk menentukan letak dalam baris grid.
Menambahkan kode pada On. Create � Klik Event pada Object Inspector, pilih On. Create dan klik ganda, kemudian ketikkan kode dibawah ini: procedure TForm. Senarai. Form. Create(Sender: TObject); begin Tambahkan kode yang berwarna merah pada baris pertama : = nil; program On. Create Tampilkan. Data; end; Tekan tombol F 9
Hasil eksekusi program
Menambahkan kejadian pada On. Destroy � Klik pada Form (klik di tempat kosong) Klik tab Events � Klik On. Destroy dan tuliskan kode berikut: procedure TForm. Senarai. Form. Destroy(Sender: TObject); var Ptr. Data: TPtr. Simpul; begin while Pertama <> Nil do begin Ptr. Data: = Pertama; Pertama: = Pertama^. Berikut; Dispose(Ptr. Data); end;
Penjelasan. . � Proses penghapusan seluruh simpul dalam senarai berantai menggunakan cara yang serupa ketika membaca data dalam senarai berantai. � Perbedaannya, variabel Pertama justru digeser untuk menelusuri semua simpul. � Pengahapusan simpul ditangani oleh pointer Ptr. Data, yang pada setiap iterasi diberi nilai berupa nilai Pertama (sebelum digeser). Pertama: = Pertama^. Berikut;
Pertama Ptr. Data Danar Cahaya Akan dihapus Bian � Penghapusan Arsen Nil simpul akan dilakukan oleh Dispose(Ptr. Data); �
Menambahkan Prosedur Insert. First � Insert. First adalah prosedur yang berguna untuk memasukkan data ke dalam senarai berantai. � Diatas kata private sisipkan kode berikut: procedure Insert. First(X: TNama); � Di ata baris end. Ketikkan: procedure TForm. Senarai. Insert. First(X: TNama); var Ptr. Baru: TPtr. Simpul; Tekan Tombol F 9 begin new(Ptr. Baru); Ptr. Baru^. Nama: =X; Ptr. Baru^. Berikut: =Pertama; Pertama: =Ptr. Baru; end;
Penjelasan. . � Untuk membentuk simpul baru, mula-mula dibentuk sebuah pointer Ptr. Baru yang ditujukan untuk menunjuk simpul tersebut. new(Ptr. Baru); � Simpul baru diciptakan dan setelah pernyataan diatas dijalankan, senarai berantai masih kosong. Pertama Nil Gambar setelah new(Ptr. Baru); dijalankan Ptr. Baru Nama Berikut
Pertama Nil Ptr. Baru Keadaan setelah Field Nama dan Berikut diisi Diisi dengan nilai pada argumen X Diisi dengan (misal Arsen) nilai pertama, yaitu Nil Arsen Nama Nil Berikut Selanjutnya, pernyataan: Pertama: =Ptr. Baru; Membuat senarai berantai menjadi Pertama Ptr. Baru Arsen Nama Nil Berikut
Keadaan jika simpul kedua dibentuk Keadaan awal setelah nama diisi Pertama Arsen Ptr. Baru Nil Nama Bian Nama Berikut Setelah pernyataan Ptr. Baru^. Berikut: =Pertama; dieksekusi diperoleh hasil: Pertama Arsen Nama Nil Berikut Bian Ptr. Baru Nama Berikut
Apabila pernyataan Pertama: =Ptr. Baru; telah dijalankan diperoleh hasil Pertama Bian Arsen Ptr. Baru Senarai yang berisi dua simpul Nil
Kode untuk menambahkan data ke dalam senarai berantai � Klik ganda pada tombol sisipkan dan tuliskan kode berikut: procedure TForm. Senarai. Button. Sisip. Click(Sender: TObject); begin if Trim(Edit. Senarai. Text)='' then begin Show. Message('Nama harap diisi'); Exit; end; Insert. First(Edit. Senarai. Text); Tampilkan. Data; end;
Tekan tombol F 9 dan isikan datanya
Menambahkan fungsi Find � Tambahkan kode berikut di atas kata private function Find(var Pendahulu: TPtr. Simpul; X: TNama): Boolean; � Tuliskan kode berikut diatas end. function TForm. Senarai. Find(var Pendahulu: TPtr. Simpul; X: TNama): Boolean; var Penunjuk: TPtr. Simpul; Ketemu: Boolean; begin Pendahulu : = Nil; Penunjuk: = Pertama; Ketemu: =False;
Lanjutan. . . while Penunjuk <> Nil do begin if Penunjuk^. Nama= X then begin Ketemu: = True; Break; end; Pendahulu: = Penunjuk; Penunjuk: =Penunjuk^. Berikut; end; Find : = Ketemu; end;
Misalnya yang adalah ‘Danar’ Penjelasan. . dicari Fungsi Find memberi nilai balik berupa True jika: � Pendahulu berupa nilai Nil maka data yang dicari terdapat pada simpul yang ditunjuk oleh pertama. � Jika nilai tidak Nil maka pendahulu tidak berada pada simpul yang ditunjuk Simpul yang dicari ditunjuk oleh Pertama Danar Bian Nil Pendahulu Cahaya Arsen Nil
Misalnya yang dicari adalah ‘Bian’ Simpul yang mendahului simpul yang berisi data yang dicari Pertama Danar Bian Pendahulu Simpul yang dicari Cahaya Arsen Nil
Kode On. Click tombol Cari � Klik ganda pada tombol Cari dan ketikkan program berikut: procedure TForm. Senarai. Button. Cari. Click(Sender: TObject); var Pendahulu: TPtr. Simpul; Keterangan: String; begin if Trim(Edit. Senarai. Text)='' then begin Show. Message('Yang dicari tidak boleh kosong'); Exit; end;
Lanjutan. . if Find(Pendahulu, Edit. Senarai. Text) then begin Keterangan: = 'Data ditemukan. Pendahulunya: '; if Pendahulu <> Nil then Keterangan : = Keterangan + Pendahulu^. Nama else Keterangan : = Keterangan + 'nil'; end else Keterangan: ='Tidak ditemukan!'; //tampilkan keterangan Show. Message(Keterangan); end;
Tambahkan Fungsi Remove • Tambahkan kode berikut diatas kata private Procedure Remove(X: TNama); • Tuliskan kode berikut dibawah end. Procedure TForm. Senarai. Remove (X: TNama); var Pendahulu: TPtr. Simpul; Posisi. Data: TPtr. Simpul; Ketemu: Boolean; begin Ketemu: = Find(Pendahulu, X); if Not Ketemu then begin Show. Message('Data tidak ada'); Exit; end;
if Pendahulu = Nil then begin //Data yang dihapus ditunjuk oleh pertama Posisi. Data: =Pertama; Pertama: = Pertama^. Berikut; Dispose(Posisi. Data); end else begin //yang dihapus tidak ditunjuk Pertama Posisi. Data: = Pendahulu^. Berikut; Pendahulu^. Berikut: =Posisi. Data^. Berikut; Dispose(Posisi. Data); end;
Berikut mekanisme penghapusan simpul yang tidak mempunyai pendahulu Keadaan setelah pencarian ‘Danar’ dan Posisi. Data: =Pertama Danar Cahay a Bian Arsen Nil Posisi. Data Keadaan setelah Pertama: =Pertama^. Berikut Pertama Danar Posisi. Data Cahay a
Keadaan setelah Dispose(Posisi. Data) Pertama Danar Posisi. Data Cahay a Dibebaskan dari memori Bian Arsen Nil
Berikut mekanisme penghapusan simpul yang mempunyai pendahulu Keadaan setelah pencarian ‘Cahaya’ dan Posisi. Data: =Pendahulu^. Berikut Pertama Danar Cahay a Bian Arsen Nil Pendahulu Posisi. Data Keadaan setelah Pendahulu^. Berikut: =Posisi. Data^. Berikut Pertama Danar Posisi. Data Cahay a Bian
Keadaan setelah Dispose(Posisi. Data) Pertama Danar Pendahulu Posisi. Data Cahay a Bian Dibebaskan dari memori Arsen Nil
Kode pada On. Click Tombol Hapus � Klik ganda tombol Hapus dan ketikkan kode berikut: procedure TForm. Senarai. Button. Hapus. Click(Sender: TObject); begin if Trim(Edit. Senarai. Text)='' then begin Show. Message('yang dihapus tidak boleh kosong'); Exit; end; Remove(Edit. Senarai. Text); Tampilkan. Data; end;
Evaluasi. . 1. 2. 3. 4. Jelaskan apa yang dimaksud senarai berantai? Terangkan mekanisme penyisipan data pada senarai berantai! Bagaimana bentuk deklarasi simpul pada senarai berantai apabila data pada simpul bertipe integer? Bagaimana bentuk deklarasi simpul pada senarai berantai apabila data pada simpul NIM berupa integer dan Nama berupa string?
5. Berapa jumlah simpul pada a). Pertama b).
6. Perhatikan senarai berikut: Head Nama Berikut Nara Wisnu Nil Bagaimana perintahnya agar menjadi seperti berikut: Ptr. Data Head Nama Berikut Nara Wisnu Nil
- Slides: 47