Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Senarai Berantai Ika Menarianti.

Presentasi serupa


Presentasi berjudul: "Senarai Berantai Ika Menarianti."— Transcript presentasi:

1 Senarai Berantai Ika Menarianti

2 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.

3 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 Pertama Danar Cahaya Bian Arsen Nil

4 Pointer 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.

5 Operasi dasar dalam senarai berantai
InserFirst menyatakan operasi untuk memasukkan data ke dalam senarai berantai pada posisi yang ditunjuk oleh pointer Pertama. Dinyatakan dengan InsertFirst(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).

6 Implementasi senarai berantai
Pilihlah menu File dan klik Save Project As.. Simpan unit dengan nama Fsenarai Simpan project dengan nama Psenarai Atur Properti: Name : FormSenarai Caption : Senarai Berantai

7 Menambahkan kode untuk mendeklarasikan tipe dan variabel
Tuliskan kode berikut dibawah type TNama = String[35]; TPtrSimpul = ^TSimpul; TSimpul = record Nama : TNama; Berikut : TPtrSimpul; end; Buatlah baris kosong antara {private declarations} dan public pada baris kosong ketikkan: Pertama: TPtrSimpul;

8 TNama = String[35];  digunakan untuk membuat tipe Tnama
TPtrSimpul = ^TSimpul; digunakan untuk membentuk tipe TPtrSimpul yang merupakan pointer yang menunjuk ke TSimpul . TSimpul = record Nama : TNama; Berikut : TPtrSimpul; 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.

9 Menambahkan komponen string grid, edit dan button

10 Komponen Properti Nilai String Grid Name StringGridSenarai ColCount 1 (lebarkan sesuai grid) ScrollBars ssVertical (hanya scrollbar vertikal yang ditampilkan) Edit EditSenarai Text Kosongkan Button 1 ButtonSisip Caption &Sisipkan Button 2 ButtonCari &Cari Button 3 ButtonRemove &Remove Button 4 ButtonKeluar &Keluar

11 Menambahkan prosedur untuk menampilkan data
Tambahkan baris berikut di atas kata private procedure TampilkanData; Tuliskan kode berikut di atas end. yang paling bawah. procedure TFormSenarai.TampilkanData; var Penunjuk : TPtrSimpul; JumSimpul: Integer; Nomor : Integer; begin //Hitung jumlah simpul Penunjuk:= Pertama; JumSimpul := 0;

12 while Penunjuk <> Nil do begin JumSimpul := JumSimpul + 1; Penunjuk := Penunjuk^.Berikut; end; //proses penampilan data StringGridSenarai.RowCount:=JumSimpul + 1; StringGridSenarai.Cells[0,0] := 'Isi Senarai'; Penunjuk:= Pertama; Nomor:=0; while penunjuk <> Nil do Nomor:= Nomor +1; StringGridSenarai.Cells[0,Nomor]:= Penunjuk^.Nama;

13 Penjelasan... Mula-mula diperlukan sebuah pointer dengan nama Penunjuk yang bertipeTPtrSimpul. Pointer ini digunakan untuk menunjuk ke record bertipe Tsimpul. Pointer diberi nilai yang sama dengan nilai pada pertama. Penunjuk := Pertama dijalankan akan terbentuk semacam keadaan berikut: Penunjuk Pertama Danar Cahaya Bian Arsen Nil

14 while Penunjuk <> Nil do begin JumSimpul := JumSimpul = 1;
Pointer penunjuk itulah yang dipakai untuk melakukan pembacaan terhadap seluruh simpul. Pada tahap pertama dalam prosedur TampilkanData dilakukan proses untuk mendapatkan jumlah simpul, yang akan dipakai untuk menentukan jumlah baris dalam String Grid. Itulah sebabnya ada pernyataan: JumSimpul := 0; Yang memberikan nilai awal untuk JumSimpul sebesar 0 Perhitungan jumlah simpul dilakukan melalui: while Penunjuk <> Nil do begin JumSimpul := JumSimpul = 1; Penunjuk := Penunjuk^.Berikut; end;

15 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. JumSimpul 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.

16 Penunjuk Pertama Danar Cahaya Bian Arsen Nil Penunjuk menunjuk ke simpul berisi “Cahaya”. Berarti penunjuk tidak berisi Nil. Program begin..end dijalankan dan JumSimpul menjadi bernilai 2. Selanjutnya menjadi...

17 Penunjuk Pertama Danar Cahaya Bian Arsen Nil Penunjuk menunjuk ke simpul berisi “Bian”. Berarti penunjuk tidak berisi Nil. Program begin..end dijalankan dan JumSimpul menjadi bernilai 3. Selanjutnya menjadi...

18 Penunjuk Pertama Danar Cahaya Bian Arsen Nil Penunjuk menunjuk ke simpul berisi “Arsen”. Berarti penunjuk tidak berisi Nil. Program begin..end dijalankan dan JumSimpul menjadi bernilai 4. Selanjutnya penunjuk mengarah ke berikutnya yaitu Nil. Mengingat penunjuk sama dengan Nil maka nilai while menjadi False, nilai pada JumSimpul menyatakan jumlah simpul dalam senarai.

19 StringGridSenarai.RowCount:=JumSimpul + 1; untuk menunjukkan jumlah baris dalam String Grid. Penambahan angka 1 ditujukan untuk menyediakan ruang bagi judul grid. Penentuan judul grid dilakukan StringGridSenarai.Cells[0,0] := 'Isi Senarai'; Penggunaan variabel Nomor pada kode didepan dipakai untuk menentukan letak dalam baris grid.

20 Menambahkan kode pada OnCreate
Klik Event pada Object Inspector, pilih OnCreate dan klik ganda, kemudian ketikkan kode dibawah ini: procedure TFormSenarai.FormCreate(Sender: TObject); begin pertama := nil; TampilkanData; end; Tambahkan kode yang berwarna merah pada baris program OnCreate Tekan tombol F9

21 Hasil eksekusi program

22 Menambahkan kejadian pada OnDestroy
Klik pada Form (klik di tempat kosong)  Klik tab Events Klik OnDestroy dan tuliskan kode berikut: procedure TFormSenarai.FormDestroy(Sender: TObject); var PtrData:TPtrSimpul; begin while Pertama <> Nil do PtrData:= Pertama; Pertama:= Pertama^.Berikut; Dispose(PtrData); end;

23 Pertama:= Pertama^.Berikut;
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 PtrData, yang pada setiap iterasi diberi nilai berupa nilai Pertama (sebelum digeser). Pertama:= Pertama^.Berikut;

24 Penghapusan simpul akan dilakukan oleh Dispose(PtrData);
Pertama PtrData Danar Cahaya Akan dihapus Bian Arsen Nil Penghapusan simpul akan dilakukan oleh Dispose(PtrData);

25 Menambahkan Prosedur InsertFirst
InsertFirst adalah prosedur yang berguna untuk memasukkan data ke dalam senarai berantai. Diatas kata private sisipkan kode berikut: procedure InsertFirst(X:TNama); Di ata baris end. Ketikkan: procedure TFormSenarai.InsertFirst(X:TNama); var PtrBaru:TPtrSimpul; begin new(PtrBaru); PtrBaru^.Nama:=X; PtrBaru^.Berikut:=Pertama; Pertama:=PtrBaru; end; Tekan Tombol F9

26 Penjelasan.. Untuk membentuk simpul baru, mula-mula dibentuk sebuah pointer PtrBaru yang ditujukan untuk menunjuk simpul tersebut. new(PtrBaru); Simpul baru diciptakan dan setelah pernyataan diatas dijalankan, senarai berantai masih kosong. Pertama Nil Gambar setelah new(PtrBaru); dijalankan PtrBaru Nama Berikut

27 Pertama PtrBaru Nama Berikut Pertama PtrBaru Nama Berikut
Keadaan setelah Field Nama dan Berikut diisi Pertama Nil Diisi dengan nilai pada argumen X (misal Arsen) Diisi dengan nilai pertama, yaitu Nil PtrBaru Arsen Nil Nama Berikut Selanjutnya, pernyataan: Pertama:=PtrBaru; Membuat senarai berantai menjadi Pertama PtrBaru Arsen Nil Nama Berikut

28 Keadaan jika simpul kedua dibentuk
Keadaan awal setelah nama diisi Pertama Arsen Nil Nama Berikut PtrBaru Bian Nama Berikut Setelah pernyataan PtrBaru^.Berikut:=Pertama; dieksekusi diperoleh hasil: Pertama Arsen Nil Nama Berikut Bian PtrBaru Nama Berikut

29 Senarai yang berisi dua simpul
Apabila pernyataan Pertama:=PtrBaru; telah dijalankan diperoleh hasil Pertama Bian Arsen Nil PtrBaru Senarai yang berisi dua simpul

30 Kode untuk menambahkan data ke dalam senarai berantai
Klik ganda pada tombol sisipkan dan tuliskan kode berikut: procedure TFormSenarai.ButtonSisipClick(Sender: TObject); begin if Trim(EditSenarai.Text)='' then ShowMessage('Nama harap diisi'); Exit; end; InsertFirst(EditSenarai.Text); TampilkanData;

31 Tekan tombol F9 dan isikan datanya

32 Menambahkan fungsi Find
Tambahkan kode berikut di atas kata private function Find(var Pendahulu: TPtrSimpul; X:TNama):Boolean; Tuliskan kode berikut diatas end. function TFormSenarai.Find(var Pendahulu:TPtrSimpul; X:TNama):Boolean; var Penunjuk:TPtrSimpul; Ketemu:Boolean; begin Pendahulu := Nil; Penunjuk:= Pertama; Ketemu:=False;

33 Lanjutan... while Penunjuk <> Nil do begin
if Penunjuk^.Nama= X then Ketemu:= True; Break; end; Pendahulu:= Penunjuk; Penunjuk:=Penunjuk^.Berikut; Find := Ketemu;

34 Penjelasan.. Fungsi Find memberi nilai balik berupa True jika:
Misalnya yang dicari adalah ‘Danar’ 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 Pertama Danar Cahaya Bian Arsen Nil Nil Pendahulu

35 Simpul yang mendahului simpul yang berisi data yang dicari
Misalnya yang dicari adalah ‘Bian’ Simpul yang mendahului simpul yang berisi data yang dicari Pertama Danar Cahaya Bian Arsen Nil Pendahulu Simpul yang dicari

36 Kode OnClick tombol Cari
Klik ganda pada tombol Cari dan ketikkan program berikut: procedure TFormSenarai.ButtonCariClick(Sender: TObject); var Pendahulu:TPtrSimpul; Keterangan:String; begin if Trim(EditSenarai.Text)='' then ShowMessage('Yang dicari tidak boleh kosong'); Exit; end;

37 Lanjutan.. if Find(Pendahulu, EditSenarai.Text) then begin Keterangan:= 'Data ditemukan. Pendahulunya: '; if Pendahulu <> Nil then Keterangan := Keterangan + Pendahulu^.Nama else Keterangan := Keterangan + 'nil'; end Keterangan:='Tidak ditemukan!'; //tampilkan keterangan ShowMessage(Keterangan); end;

38 Tambahkan Fungsi Remove
Tambahkan kode berikut diatas kata private Procedure Remove(X:TNama); Tuliskan kode berikut dibawah end. Procedure TFormSenarai.Remove (X:TNama); var Pendahulu:TPtrSimpul; PosisiData:TPtrSimpul; Ketemu:Boolean; begin Ketemu:= Find(Pendahulu, X); if Not Ketemu then ShowMessage('Data tidak ada'); Exit; end;

39 if Pendahulu = Nil then begin //Data yang dihapus ditunjuk oleh pertama PosisiData:=Pertama; Pertama:= Pertama^.Berikut; Dispose(PosisiData); end else //yang dihapus tidak ditunjuk Pertama PosisiData:= Pendahulu^.Berikut; Pendahulu^.Berikut:=PosisiData^.Berikut; end;

40 Berikut mekanisme penghapusan simpul yang tidak mempunyai pendahulu
Keadaan setelah pencarian ‘Danar’ dan PosisiData:=Pertama Pertama Danar Cahaya Bian Arsen Nil PosisiData Keadaan setelah Pertama:=Pertama^.Berikut Pertama Danar Cahaya Bian Arsen Nil PosisiData

41 Dibebaskan dari memori
Keadaan setelah Dispose(PosisiData) Pertama Danar Cahaya Bian Arsen Nil Dibebaskan dari memori PosisiData

42 Berikut mekanisme penghapusan simpul yang mempunyai pendahulu
Keadaan setelah pencarian ‘Cahaya’ dan PosisiData:=Pendahulu^.Berikut Pertama Danar Cahaya Bian Arsen Nil Pendahulu PosisiData Keadaan setelah Pendahulu^.Berikut:=PosisiData^.Berikut Pertama Danar Cahaya Bian Arsen Nil PosisiData PosisiData

43 Dibebaskan dari memori
Keadaan setelah Dispose(PosisiData) Pertama Danar Cahaya Bian Arsen Nil Dibebaskan dari memori Pendahulu PosisiData

44 Kode pada OnClick Tombol Hapus
Klik ganda tombol Hapus dan ketikkan kode berikut: procedure TFormSenarai.ButtonHapusClick(Sender: TObject); begin if Trim(EditSenarai.Text)='' then ShowMessage('yang dihapus tidak boleh kosong'); Exit; end; Remove(EditSenarai.Text); TampilkanData;

45 Evaluasi.. 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?

46 5. Berapa jumlah simpul pada a). b).
Pertama Pertama

47 6. Perhatikan senarai berikut: Bagaimana perintahnya agar menjadi seperti berikut:
Nama Berikut Head Nara Wisnu Nil PtrData Nama Berikut Head Nara Wisnu Nil


Download ppt "Senarai Berantai Ika Menarianti."

Presentasi serupa


Iklan oleh Google