senarai-berantai
TRANSCRIPT
5/16/2018 senarai-berantai - slidepdf.com
http://slidepdf.com/reader/full/senarai-berantai-55b07c3ef2ea6 1/7
struktur data – fd – [page 1 of 7]
SENARAI BERANTAI
Dalam pemakaian sehari-hari istilah senarai berantai (list) adalah kumpulan linier sejumlahdata. Contohnya seperti daftar belanja harian, dimana setiap harinya daftar belanjaan tersebut dapatberubah-ubah. Ada yang dihapus jika barang telah dibeli atau ditambahkan barang baru yang akandibeli.
Telah kita ketahui bahwa penggunaan pointer sangat mendukung dalam pembentukan strukturdata dinamis. Salah satu struktur data dinamis yang paling sederhana adalah senarai berantia ( linked list), atau senari satu arah (one-way list). Dengan demikian senarai berantai adalah kumpulankomponen yang disusun secara berurutan dengan bantuan pointer. Masing-masing komponen dinamakandengan simpul (node). Sehingga setiap simpul dalam senarai berantai teragi menjadi dua bagian.Bagian pertama disebut medan informasi, berisi informasi yang akan disimpan dan diolah.Bagian kedua disenut penghubung (link field ), berisi alamat simpul berikutnya.
Gambar dibawah ini menunjukkan diagram skematis dari senarai berantai dengan 6 simpul.
Setiap simpul digambarkan dalam 2 bagian. Bagian kiri adalah medan informasi dan bagiankanan adalah medan penghubung, sehingga dalam diagram digambarkan sebagai anak panah. Perludiingat bahwa medan penghubung adalah sebuah pointer yang menunjukan ke simpul berikutnya,sehingga nilai dari medan ini adalah alamat sebuah lokasi tertentu dalam memori.
Pada gambar diatas, pointer Awal, yang bukan merupakan bagian dari senarai, menunjukkan ke
simpul pertama dari senarai tersebut. Medan penghubung (pointer) dari suatu simpul yang tidak
menunjukkan simpul lain disebut dengan pointer kosong, yang nilainya dinyatakan sebagai nil (nil
adalah reserved word Pascal yang berarti bahwa pointer tidak menunjukkan ke suatu simpul, dannilainya sama dengan 0 atau bilangan negatif).
Dengan memperhatikan gambar diatas, kita bisa melihat bahwa hanya dengan sebuah pointer
Awal saja maka kita bisa membaca semua informasi yang tersimpan dalam senarai. Senarai berantai
sangat berguna dalam terapan-terapan sehari-hari dimana komponen-komponen dalam jumlah sangatbesar harus dijaga supaya selalu dalam keadaan terurutkan menurut kriteria tertentu, misalnya secaraalphabetis, dan dimana komponen-komponennya sering dihapus atau ditambahkan.
Penyajian Senarai BerantaiSebelum kita mempelajari beberapa operasi dasar yang biasa dilakukan pada sebuah senarai
berantai, ada baiknya jika kita lihat bagaimana sesungguhnya suatu senarai berantai disimpan dalammemori.
Misalnya senarai berantai pada Gambar 1 diatas kita namakan Daftar. Senarai berantai
Daftar dalam memori akan disajikan dengan cara sebagai berikut :Pertama-tama Daftar memerlukan dua larik linier (vektor), kita namakan vektor Info dan
Sambungan sedemikian rupa sehingga vektor Info berisi komponen yang tersimpan dalam medan
informasi dan vektor Sambungan berisi medan pointer (alamat) ke simpul berikutnya.
Disamping itu, Daftar juga memerlukan suatu variabel, misalnya Awal, yang berisi alamat simpul
pertama dari senarai berantai, dan pointer sentinel, yang bernama Kosong, yang menunjukkan akhir
sebuah senarai berantai.
Karena subskrib untuk vektor Info dan Sambungan selalu positif dan lebih besar dari 0, maka untuk
pointer sentinel bisa kita tulis sebagai kosong = 0.
Gambar dibawah ini menunjukkan bagaimana penyajian senarai berantai Daftar disajikan
memori.
A B C D E F
Awal
Medan penghubung simpul Medan informasi
Gambar 1. Senarai berantai dengan 6 simpul
5/16/2018 senarai-berantai - slidepdf.com
http://slidepdf.com/reader/full/senarai-berantai-55b07c3ef2ea6 2/7
struktur data – fd – [page 2 of 7]
INFO SAMBUNGAN
1 C 5
Awal 2 A 6
2 3
4 D 10
5 B 1
6
7 F 0 Akhir
8
9
10 E 8
Gambar 2. Contoh penyajian senarai berantai dalam memori
Dari Gambar 2 diatas dapat kita lihat bahwa :
Awal = 2, maka Info[ 2] = “A”
Sambungan[ 2] = 6, maka Info[ 6] = “B”
Sambungan[ 6] = 1, maka Info[ 1] = “C”
Sambungan[ 1] = 5, maka Info[ 5] = “D”
Sambungan[ 5] = 10, maka Info[10] = “E”
Sambungan[10] = 8, maka Info[ 8] = “F”
Sambungan[ 8] = 0, akhir senarai berantai
sehingga kita dapat memperoleh rangkaian “ABCDEF”.
Operasi pada Senarai BerantaiUnutk menjelaskan operasi pada senarai, kita gunakan deklarasi pointer dan simpul sebagai
berikut :
type Simpul = ^Data;
Data = recordInfo : char;
Berikut : Simpul;end;
var Elemen : char;Awal, Akhir, Baru, Hapus, Bantu : Simpul;
1. Menambah SimpulOperasi menambah simpul bisa dipecah menjadi 3 bagian berdasarkan posisi simpul baru yang akandisisipkan, yaitu :-. simpul baru yang selalu ditambahkan dibelakang simpul terakhir-. simpul baru yang diletakkan sebagai simpul pertama-. simpul baru yang diletakkan diantara 2 simpul yang lain.
Menambah di belakang :
A B C F D
Akhir Baru Awal
........(1)
5/16/2018 senarai-berantai - slidepdf.com
http://slidepdf.com/reader/full/senarai-berantai-55b07c3ef2ea6 3/7
struktur data – fd – [page 3 of 7]
Gambar 3. Penambahan simpul di akhir senarai
Prosedur untuk menambah simpul di belakang :
procedure Tambah_Belakang(var Awal, Akhir : Simpul; Elemen : char);var Baru : Simpul;
beginnew(Baru); Baru^.Info := Elemen;if Awal = nil then { jika senarai masih kosong }
Awal := Baruelse
Akhir^.Berikut := Baru; { Gambar 3 – (2) }Akhir := Baru; { Ganbar 3 – (3) }Akhir^.Berikut := nil;
end;
Menambah di depan :
Gambar 4. Penambahan simpul di awal senarai
procedure Tambah_Depan(var Awal, Akhir : Simpul; Elemen : char);var Baru : Simpul;begin
new(Baru); Baru^.Info := Elemen;if Awal = nil then { jika senarai masih kosong }
Awal := Baruelse
Baru^.Berikut := Awal; { Gambar 4 – (2) }Awal := Baru; { Ganbar 4 – (3) }
end;
A B C F D
Akhir Baru Awal
........(2)
A B C F D
Akhir
Baru
Awal
........(3)
A B C F
Akhir AwalBaru
D ........(1)
A B C F D
Akhir AwalBaru
........(2)
A B C F
Awal
Baru
D
Akhir
........(3)
5/16/2018 senarai-berantai - slidepdf.com
http://slidepdf.com/reader/full/senarai-berantai-55b07c3ef2ea6 4/7
struktur data – fd – [page 4 of 7]
Menambah di tengah :
Gambar 5. Penambahan simpul di tengah senarai
procedure Tambah_Tengah(var Awal, Akhir : Simpul; Elemen : char);var Baru, Bantu : Simpul;begin
new(Baru); Baru^.Info := Elemen;if Awal = nil then { jika senarai masih kosong }
Awal := Baru;Akhir := Baru
else{ mencari lokasi yang sesuai }begin
Bantu := Awal;while Elemen > Baru^.Berikut^.Info do
Bantu := Bantu^.Berikut;
{ menyisipkan simpul baru }Baru^.Berikut := Bantu^.Berikut; { Ganbar 5 – (2) }Bantu^.Berikut := Baru; { Ganbar 5 – (3) }
end;end;
A B
C
F
AkhirBantu Awal
D
Baru
........(1)
A B
C
F
AkhirBantu Awal
D
Baru
........(2)
A B
C
F
AkhirBantu Awal
D
Baru
........(3)
5/16/2018 senarai-berantai - slidepdf.com
http://slidepdf.com/reader/full/senarai-berantai-55b07c3ef2ea6 5/7
5/16/2018 senarai-berantai - slidepdf.com
http://slidepdf.com/reader/full/senarai-berantai-55b07c3ef2ea6 6/7
struktur data – fd – [page 6 of 7]
Gambar 8. Penghapusan simpul di akhir senarai
procedure Hapus(var Awal, Akhir : Simpul; Elemen : char);var Hapus, Bantu : Simpul;begin
if Awal = nil then { jika senarai masih kosong }writeln(‘Senarai masih kosong’)
else if Awal^.Info = Elemen then{ simpul pertama yang dihapus }begin
Hapus := Awal; { Ganbar 6 – (1) }Awal := Hapus^.Berikut; { Ganbar 6 – (2) }Hapus^.Berikut := 0;dispose(Hapus);
end
else { menghapus simpul di tengah atau terakhir }begin
Bantu := Awal;
{ mencari simpul yang akan dihapus }while (Elemen <> Bantu^.Info) and (Bantu^.Berikut <> nil) do
Bantu := Bantu^.Berikut;Hapus := Bantu^.Berikut;
if Hapus <> nil then{ simpul yang akan dihapus ketemu }
beginif Hapus <> Akhir then
{ simpul di tengah dihapus }
{ Ganbar 7 – (2) }Bantu^.Berikut := Hapus^.Berikut;else
{ simpul terakhir dihapus }begin
{ Ganbar 8 – (2) }Akhir := Bantu;
{ Ganbar 8 – (3) }Akhir^.Berikut := nil;
end;Hapus^.Berikut := 0;dispose(Hapus);
endelse
{ simpul yang akah dihapus tidak ketemu }wtiteln(‘Simpul yang akan dihapus tidak ketemu !’);end;
end;
3. Membaca isi Senarai Untuk pembacaan isi senarai maka dapat dilakukan mulai dari simpul Awal menuju ke simpul
Akhir.
procedure Baca(var Awal, Akhir : Simpul; Elemen : char);var Bantu : Simpul;begin
Bantu := Awal;repeat
A B C D
Awal Akhir
........(3)
Bantu
A B C D
Akhir Awal
5/16/2018 senarai-berantai - slidepdf.com
http://slidepdf.com/reader/full/senarai-berantai-55b07c3ef2ea6 7/7
struktur data – fd – [page 7 of 7]
write(Bantu^.Info);Bantu := Bantu^.Berikut;
until Bantu = nil;writeln;
end;
4. Mencari Data Secara garis besar, proses untuk mencari data dalam senarai hampir sama dengan proses untuk
membaca senarai, hanya perlu menambahkan pengujian apakah data yang dicari ada atau tidak.
Pencarian akan dilakukan mulai dari simpul Awal sampai Akhir.
function Ada_Data(Awal : Simpul; Elemen : char):boolean;var Ketemu : boolean;begin
Ketemu := false;repeat
if Awal^.Info = Elemen thenKetemu := true;
elseAwal := Awal^.Berikut;
until Ketemu or (Awal = nil);Ada_Data := Ketemu;
end;