• Tidak ada hasil yang ditemukan

MAKSUD DAN TUJUAN 1. MAKSUD

Dalam dokumen struktur data Pascal (Halaman 32-43)

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

Dalam dokumen struktur data Pascal (Halaman 32-43)

Dokumen terkait