Memberikan pemahaman tentang tipe data antrian beserta operasinya. 2. TUJUAN
Agar mahasiswa menggunakan tipe data antrian dengan melakukan operasi menambah dan menghapus elemen.
B. TEORI
Antrian (queue) sering digunakan untuk mensimulasikan keadaan pada dunia nyata. Antrian adalah suatu kumpulan data yang penambahan elemen hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan penghapusan (pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front).
Prinsip pada antrtian adalah FIFO (First In First Out) atau’masuk pertama keluar pertama”. Dengan kata lain, urutan keluar elemen akan sama dengan urutan masuknya.
Dalam antrian dikenal 2 operasi dasar yaitu menambah elemen baru yang akan ditempatkan di belakang antrian dan menghapus elemen yang terletak di depan antrian. Disamping itu juga sering dilihat apakah antrian mempunyai isi atau dalam keadaan kosong.
Implementasi Antrian dengan Larik
Untuk menyajikan antrian menggunakan larik, maka deklarasi antrian adalah:
Const max_elemen = 100;
Type antri = array [1..max_elemen] of integer; Var
Antrian : antri;
Di bawah ini disajikan gambar antrian dengan menggunakan larik. Antrian mempunyai 6 elemen, yaitu A, B, C, D, E, dan F. Elemen A terletak dibagian depan antrian dan elemen F terletak di belakang antrrian. Dengan demikian, jika ada elemen baru yang akan masuk ia akan diletakkan disebelah kanan F. Jika ada elemen yang akan dihapus maka A akan dihapus lebih dulu.
Implementasi Antrian dengan Senarai Berantai
Jika dilihat pada penambahan dan penghapusan elemen pada antrian, maka antrian sebenarnya juga merupakan bentuk khusus dari suatu senarai berantai. Dengan demikian apa yang telah dipelajari pada senarai berantai bisa digunakan pada antrian.
Untuk memanipulasi sebuah antrian akan digunakan 2 perubah yang menyimpan posisi elemen paling depan dan elemen yang paling belakang. Dengan cara yang sama, apabila ingin diimplementasikan antrtaian menggunakan senarai berantai maka digunakan 2 pointer yang diletakkan pada elemen paling depan (kepala) dan elemen paling belakang (ekor). Dalam hal ini bisa digunakan senarai bernatai tunggal atau senarai berantai ganda baik yang bisa memutar atau tidak. Disisni akan digunakan senarai berantai tunggal berkepala dan memutar, sehingga deklarasi simpul sebagai berikut:
Type antri = ^simpul; Simpul = record
Info : char;
Berikut : antrti; End;
Var kepala, ekor : antri;
Kepala
Ekor
Dengan memperhatikan gambar diatas maka prosedur inisialisasi adalah
Procedure init_antrian (var kepala, ekor : antri); Begin New(kepala); Kepala^.info:=chr(0); Kepala^.berikut:=kepala; Ekor := kepala; End; C. PRAKTIK
1. Cobalah program dibawah ini, amati untuk beberapa masukan yang berbeda.
Program queue_contoh; Uses crt;
Const max = 10;
Type antri = array [1..max] of char; Var antrian:antri;
Depan, belakang, pilih, i : integer; Elemen :char;
Function kosong (q:antri) :boolean; Begin
Kosong:=(depan=belakang); End;
Procedure tambah(var antrian:antri; x:char); Begin
{menambah elemen baru}
else
belakang := belakang-1;
if not (kosong(antrian)) then begin antrian[belakang] := x; write(‘hasil antrian = ‘,x) end; else {antrian penuh} begin write(‘antrian penuh’); repeat until keypressed; write(‘ ‘:30); belakang:=belakang-1;
if belakang=0 then belakang:= max;
end; End;
Begin {program utama} Clrscr; Depan:=0; Belakang:=0; Writeln(;menambah elemen’); I:=1; Write(‘isikan elemen =’); Readln(elemen); Tambah(antrian,elemen); readln End.
2. Modifikasi program diatas sehingga bisa menerima masukkan dalam bentuk string.
Contoh input : stmik el rahma Hasil akhir : stmik el rahma
3. Diberikan suatu fungsi untuk menghapus elemen dari antrian sebagai berikut :
Function hapus(var antrian:antri):char; Begin
If depan = max then depan:=1 Else Begin Depan:=depan+1; Hapus:=antrian[depan] End; End; D. TUGAS
Implementasikan program queue_contoh diatas dengan menggunakan senarai berantai.
MODUL VI POHON (TREE)
A. MAKSUD DAN TUJUAN 1. MAKSUD
Memberikan pemahaman tentang tipe data pohon (khususnya pohon biner) serta sifat-sifat dari pohon biner.
2. TUJUAN
Agar mahasiswa mampu membuat pohon biner, mencari data dan membaca data dengan cara inorder, preorder,dan postorder.
B. TEORI
Pohon (tree) merupakan struktur data tak linier yang mempunyai sifat-sifat dan ciri-ciri khusus. Struktur ini biasanya digunakan untuk menggambarkan huubungan yang bersifat hirarkis antara lemen-elemen yang ada.
Pohon biner (binary tree) bisa didefinisikan sebagai suatu kumpulan simpul yang mungkin kosong atau mempunyai akar dan dua sub pohon yang saling terpisah yang disebut dengan subpohon kiri (left subtree) dan sub pohon kanan (right subtree). Sub pohohn juga disebut dengan cabang. Karakteristik yang dimiliki oleh pohon biner adalah bahwa setiap simpul paling banyak hanya mempunyai dua bauh anak. Dengan kata lain, derajat tertinggi dari setiap simpul dalam pohon adalah dua. Karakteristik yang lain adalah pohon biner dimungkinkan tidak mempunyai simpul.
Mendeklarasikan Struktur Pohon Biner
Setiap simpul pada pohon terdiri 2 komponen utama: 1. data
2. Pointer yang menunjuk ke anak
Pointer anak ada 2 macam, yaitu: 1. Pointer yang menunjuk ke anak kiri 2. pointer yang menunjuk ke anak kanan
Sebuah contoh struktur untuk menyatakan simpul pohon biner dapat dilihat dibawah ini: Type Tipedata = char; Pointerpohon = ^simpulpohon Simpulpohon = record Data : tipedata; Kiri,kanan : pointerpohon End; Menampilkan Data
Ada berbagai cara untuk menampilkan data pada setiap simpul. Pada pohon biner terdapat cara yang disebut preorder, inorder, dan postorder. Cara ini bertumpu pada cara mengunjungi setiap simpul.
Dengan cara inorder (LNR = Left Node Right), data akan ditampilkan dengan cara urut naik. Kunjungan dilakukan dari posisi kiri simpul. Bila posisi kiri tidak memiliki anak, maka isi simpul ditampilkan. Kemudian dilanjutkan dengan kunjungan di posisi kanan.
Implementasi dari metode ini dapat dilihat sebagai berikut :
Procedure inorder (pointerakar : pointerpohon); Begin
If pointerakar <> nil then Begin
With pointerakar^ do Begin
Inoder(kiri);
If data <> ‘0’ then write (data) Inorder (kanan)
End; End; End;
Dengan cara preorder prosesnya dilakukan dengan cara NLR (Node Left Right). Pada setiap simpul yang dikunjungi, data pada simpul akan ditampilkan terlebih dahulu, kemudian mengarah ke simpul kiri dan akhirnya ke simpul kanan.
Implementasi dari metode ini dapat dilihat sebagai berikut :
Procedure preorder(pointerakar : pointerpohon); Begin
If pointerakar <> nil then Begin
With pointerakar^ do Begin
If data <> ‘0’ then write(data); Inorder(kiri);
Inorder(kanan) End;
End; End;
Dengan cara postorder, prosesnya dilakukan secara LNR (Left Node Right). Pada setiap simpul yang dikunjnjungi, data pada simpul akan ditampilkan terlebih dahulu kemudian mengarah ke simpul kiri dan akhirnya ke simpul kanan. Implementasi dari metode ini dapat dilihat sebagai berikut :
Procedure postorder(pointerakar : pointerpohon); Begin
If pointerakar <> nil then Begin
With pointerakar^ do Begin
Inorder(kiri); Inorder(kanan)
If data <> ‘0’ then write(data); End;
End; End;
Selain ketiga metode diatas, masih ada satu metode yaitu metode levelorder. Dalam hal ini akan ditampilkan simpul dari tingkat 1 (akar) diteruskan dengan simpul-simpul pada tingkat 2,3, dst. Untuk mengimplementasikan prosedurnya maka digunakan struktur antrian.
C. PRAKTIK
1. Cobalah program dibawah ini, dan amati untuk beberapa masukan yang berbeda. Program pohon; Uses crt; Type tipedata=char; Pointerpohon=^simpulpohon; Simpulpohon=record Data:tipedata; Kiri, kanan:pointerpohon; End; Var pointerakar:pointerpohon; Entri:tipedata; Procedure sisipkankepohon(varp[ointerakar:pointerpohon;entri:tip edata); Begin If pointerakar=nil then Begin New(pointerakar); With pointerakar^ do Begin Data:=entri; Kiri:=nil; Kanan:=nil; End; End; Else If entri<pointerakar^.data then Sisipkankepohon(pointerakar^.kiri,entri)
Else
Sisipkankepohon(pointerakar^.kanan,entri) End;
Procedure inorder(pointerakar:pointerpohon); Begin
If pointerakar <> nil then Begin
With pointerakar^ do Begin
Inorder(kiri);
If data <> ‘0’ then write(data); Inorder(kanan); End End; End; Begin{program utama} Clrscr; Pointerakar:=nil; Writeln(‘buat pohon’); Repeat Read(entri); Sisipkankepohon(pointerakar,entri); Until entrti=’0’; Writeln(;penulisan inorder’); Inorder(pointerakar); Writeln; Readln;
2. Lengkapilah program diatas sehingga bisa digunakan untuk mencek sebuah karakter ada di pohon atau tidak. (Petunjuk : gunakan fungsi di bawah ini)
Function
cari(pointerakar:pointerpohon;entri:tipedata):pointerp ohon;
Begin
if pointerakar = nil then cari := nil else
with pointerakar^ do
if entri = data then cari := pointerakar else
if entri < data then cari := cari(kiri,entri) else
cari:=cari(kanan,entrri); end;
D. TUGAS
MODUL VII