Anda di halaman 1dari 50

MODUL

ALGORITMA DAN STRUKTUR DATA

TEKNIK INFORMATIKA
FAKULTAS TEKNIK UNIVERSITAS SILIWANGI
Jl. Siliwangi No. 24 Tasikmalaya Kotak Pos 164 Tlp. (0265) 323537
E-Mail : informatika@ft.unsil.ac.id;

URL : http://if.unsil.ac.id/

Teknik Informatika Universitas Siliwangi

Teknik Informatika Universitas Siliwangi

1 PEMROSESAN FILE
Data yang disimpan pada tipe-tipe data yang telah dipelajari pada bab-bab sebelumnya
bersifat sementara. Artinya, sewaktu program selesai dijalankan, data tersebut akan
hilang. Pada banyak aplikasi, data yang dimasukkan, meskipun program telah selesai,
harus disimpan. Contohnya aplikasi pemesanan tiket kereta api atau transaksi
perbankan. Data pesanan tiket dan data transaksi keuangan harus tetap disimpan sampai
diinginkan dihapus.
Untuk memecahkan masalah penyimpanan data yang seperti itu digunakan file. Data
yang dioutputkan oleh program dapat disimpan dalam sebuah file(file output). Data
pada file juga dapat dibaca lagi(file input). Jenis file ada dua macam yaitu file teks dan
nonteks.
FILE TEKS
File teks adalah sebuah file yang terdiri dari karakter-karakter. Karakter-karakter
tersebut dapat dianggap sebagai data yang bertipe karakter, integer, real, atau string
tergantung tipe data yang digunakan untuk menyimpan hasil pembacaan dari file.
Deklarasi File
Supaya dapat menggunakan file teks, maka file tersebut harus dideklarasikan terlebih
dahulu. Cara mendeklarasikan file teks adalah
contoh :

Nama File : text

F : text

Instruksi Baku
Untuk pemrosesan file, Pascal telah menyediakan sejumlah instruksi baku berupa
prosedur atau fungsi yang dapat langsung digunakan dengan cara memanggil prosedur
atau fungsi tersebut. Beberapa instruksi baku untuk pemrosesan File yang sudah
tersedia antara lain :

Assign, berfungsi untuk membuka file untuk siap dibaca atau ditulis. Cara
memanggil prosedur ini dengan perintah Assign(Nama File, File Fisik). Nama
File digunakan untuk menampung isi dari File Fisik

Teknik Informatika Universitas Siliwangi


Jika file dibuka untuk ditulis/diisi, setelah perintah assign gunakan perintah
Rewrite(Nama File). Jika file dibuka hanya untuk dibaca, setelah perintah assign
gunakan perintah Reset(Nama File)
contoh
fisik}

Assign(F, data.txt);

{data.txt adalah contoh nama file

Rewrite(F);
{File dibuka untuk ditulisi}
Assign(F, data.txt);
Reset(F);
{File dibuka untuk dibaca}
Read, berfungsi untuk membaca isi file kemudian ditampung dalam sebuah
variabel. Tipe data variable disesuaikan dengan hasil pembacaan dari file, bisa
bertipe integer, character, string, atau record. Isi dari file akan dikonversi sesuai
dengan tipe variabel tempat menyimpan data yang dibaca jika memungkinkan.
Jika isi file bertipe string sedangkan variabel bertipe integer tidak dapat
dilakukan karena tidak memungkinkan. Jika file berisi angka maka variabel
dapat bertipe integer, karakter atau string. Variabel tersebut harus sudah
dideklarasikan sebelumnya.

Cara memanggil prosedur ini dengan perintah Read(Nama File, Nama Variabel)
Jika deklarasi programnya sebagai berikut :
var
F : text;
i : integer;
c : char;
kalimat : string
Maka contoh perintah yang menggunakan statement Read antara lain
contoh :
Read(F, i)
{membaca isi file F yang bertipe integer
disimpan di i}
Read(F, c)
{membaca isi file yang bertipe karakter disimpan di c}
Read(F, kalimat){membaca isi file yang bertipe string disimpan di
kalimat}
Write, berfungsi untuk menulis nilai atau isi variable ke dalam file. Cara
memanggil prosedur ini dengan perintah Write(Nama File, Nama Variabel)
contoh :
i := 5;
Write(MyFile, i)
{menuliskan isi variable i ke dalam file MyFile}
kalimat := Pemrosesan File;
Write(MyFile, kalimat)
{ menuliskan isi variable kalimat ke MyFile}
Write(MyFile, Informatika); { menuliskan Informatika ke MyFile}

Teknik Informatika Universitas Siliwangi


Close, berfungsi untuk menutup file yang telah dibuka. Setiap file yang sudah
dibuka harus ditutup kembali dengan perintah tersebut. Cara memanggil prosedur
ini dengan perintah Close(Nama File);
contoh

: Close(F)

Berikut ini beberapa contoh program untuk memperjelas pemahaman tentang file teks :
Program 1.1 :

Program untuk penulisan File Teks

program Tulis_Jurusan;
var
fjurusan : text;
begin
assign(fjurusan,'jurusan.txt');
rewrite(fjurusan);
writeln(fjurusan,'Jurusan Teknik Informatika');
writeln(fjurusan,'Fakultas Teknik');
writeln(fjurusan,'Universitas Siliwangi');close(fjurusan);
end.

Jika ingin menggunakan file yang sudah ada dan menambahkan isinya gunakan
prosedure append(Nama File)
Program 1.2 : Program Pembacaan isi file teks dan menuliskannya di layar
program Baca_Jurusan;
uses
crt;
var
fjurusan : text;
temp
: string;
begin
clrscr;
assign(fjurusan,'jurusan.txt');
reset(fjurusan);
while not eof (fjurusan) do
begin
readln(fjurusan,temp);
writeln(temp);
end;
close(fjurusan);
readln;
end.

Pengulangan menggunakan statement while digunakan untuk melakukan pembacaan


file sampai akhir. Fungsi eof(fjurusan) mengirimkan true jika sudah sampai akhir file
fjurusan, dan false jika sebaliknya.
Program 1.3 : Program di bawah ini menyimpan kalimat ke dalam file lalu membacanya
per karakter
Program MyFile;
uses crt;

Teknik Informatika Universitas Siliwangi


var
F : text;
c : char;
kalimat : string;
begin
clrscr;
writeln('$ PENULISAN FILE $');
assign(F,'sentence.txt');
{membuat/membuka file}
rewrite(F);
{membuka file untuk ditulisi}
write('Input Kalimat : '); readln(kalimat);
write(F,kalimat);
{menulis isi variabel kalimat ke file F}
close(F);
{menutup File}
writeln; writeln('$ PEMBACAAN FILE $');
assign(F,'sentence.txt');
{membuka file}
reset(F);
{membuka file untuk ditulisi}
while not eof(F) do
{membaca isi file selama belum mencapai akhir file}
begin
read(F,c);
{membaca isi file per karakter}
write(c);
end;
close(F);
{menutup File}
readln;
end.

FILE SEKUENSIAL
File sekuensial atau file beruntun termasuk file non teks. File Sekuensial adalah
sekumpulan elemen data bertipe sama yang diakses secara berurutan mulai dari elemen
data pertama sampai elemen data terakhir. Data di dalam file sekuensial diakses satu
persatu secara searah. Struktur file sekuensial tidak jauh berbeda dengan struktur array,
perbedaannya array disimpan di memori sedangkan file sekuensial disimpan di dalam
HardDisk sehingga tidak akan hilang setelah program selesai dijalankan dan dapat
diakses kembali. Selain itu pengaksesan elemen file tidak dapat diakses langsung
melalui indeksnya.

Deklarasi File
Cara mendeklarasikan file sekuensial di dalam bagian deklarasi adalah sebagai
berikut:
Nama_File : file of tipe_elemen_data

Teknik Informatika Universitas Siliwangi


tipe_elemen_data bisa berupa tipe dasar(integer, karakter, real, string, boolean)
atau tipe terstruktur(record) tergantung jenis data yang akan disimpan
contoh :
FBil :
file of integer
{file dengan elemen data bertipe integer}
Fkar :
file of char
{file dengan elemen data bertipe karakter}
type DataMhs = record
NIM : integer;
Nama : string; IP : real;
end;
Mhs : file of DataMhs {file dengan elemen data bertipe record DataMhs}
Instruksi Baku
Instruksi yang digunakan pada File Sekuensial sama seperti yang digunakan pada
File Teks
Program 1.4 Penulisan dan Pembacaan File Sekuensial
Program File_Sequential;
uses crt;
var
FInt : file of integer;
i, bil : integer;
begin

{PENULISAN FILE}
assign(FInt,'Integer.txt');
rewrite(FInt);
i:=1;
repeat
write('Data - ',i,' : '); readln(bil);
write(FInt,Bil);
i:=i+1;
until (i>10);
close(FInt);
clrscr;

{PEMBACAAN FILE}
assign(FInt,'Integer.txt');
reset(FInt);
while not eof(FInt) do
begin
read(FInt, bil);
writeln(bil);
end;
close(FInt);
readln;
end.
Program 1.5 : Program Penulisan File bertipe terstruktur(record)
Program BuatArsipMahasiswa;
uses crt;

Teknik Informatika Universitas Siliwangi


type
DataMhs = record
NIM : longint;
Nama: string[25];
IP : real;
end;
var
MSiswa : DataMhs;
Mhs
: File of DataMhs;
answer : char;

{variable yang bertipe record DataMhs}


{nama file sekuensial}

begin
clrscr;
writeln(' PENULISAN FILE'); writeln;
assign(Mhs,'Mhs.dat');
rewrite(Mhs);
repeat
write('NIM : '); readln(MSiswa.NIM);
write('Nama : '); readln(MSiswa.Nama);
write('IP : '); readln(MSiswa.IP);
write(Mhs,MSiswa); {data yang ditampung var MSiswa dimasukkan ke file

Mhs}
write('Input Data Lagi? ');readln(answer);writeln;
until (answer='t') or (answer='T');
close(Mhs);
end.
Program 1.6 : Program Pembacaan File bertipe terstruktur(record)
Program BacaArsipMahasiswa;
uses crt;
type
DataMhs = record
NIM : longint;
Nama: string[25];
IP : real;
end;
var
MSiswa : DataMhs;
Mhs : File of DataMhs;
begin
clrscr;
writeln('
PEMBACAAN FILE');
writeln('-----------------------------------');
writeln('
NIM
Nama
IP');
writeln('-----------------------------------');
assign(Mhs,'Mhs.dat');
reset(Mhs);
while not eof(Mhs) do
begin
read(Mhs,MSiswa); {hasil pembacaan file ditampung di var MSiswa}
writeln(MSiswa.NIM:10,MSiswa.Nama:16,MSiswa.IP:8:2);
end;
close(Mhs);

Teknik Informatika Universitas Siliwangi


readln;
end.

LATIHAN SOAL
1. Dengan memperhatikan contoh pemrosesan file teks seperti contoh program 1.1,
1.2 dan 1.3 yang sudah dibahas, buatlah program untuk biodata/ daftar riwayat
hidup anda masing-masing
2. Dengan memperhatikan contoh pemrosesan file teks seperti contoh program 1.4,
1.5 dan 1.6 yang sudah dibahas, buatlah program untuk biodata/daftar riwayat
hidup anda dan senua teman-teman sekelas anda.
3. Dari contoh-contoh diatas, implementasikan kedalam bahasa pemrograman turbo
C/ C++

Teknik Informatika Universitas Siliwangi

MESIN ABSTRAK

Mesin adalah mekanisme yang terdefinisi dan mengerti serta mampu untuk
mengekseskusi aksi-aksi primitif yang terdefinisi untuk mesin tersebut. Mesin abstrak
adalah mesin yang dianggap ada, dan diasumsikan mampu melakukan mekanisme yang
didefinisikan untuk mesin tersebut. Mesin abstrak memodelkan suatu semesta (universe)
tertentu.
Dalam pemrograman, seringkali pemrogram harus mendefinisikan mesin-mesin abstrak
sebelum menuliskan kode program karena mesin abstrak memungkinkan pemrogram
untuk melakukan pemecahan masalah secara bertahap. Mesin abstrak yang diciptakan
pada tahap konseptual bahkan memungkinkan pemrogram untuk berfikir tahap demi
tahap, sampai akhirnya dijabarkan dalam terminologi mesin riil.
Mesin Riil
Mesin Abstrak
Mesin Abstrak
Sebetulnya, bahasa tingkat tinggi adalah mesin abstrak bagi asembler, dan lebih abstrak
bagi mesin rill yaitu komputer.
Mendefinisikan mesin abstrak, berarti mendefinisikan.
sekumpulan state yang mungkin
sekumpulan aksi primitif yang diasumsikan dapat dimengerti dan dieksekusi mesin
bersangkutan.
Contoh macam-macam mesin abstrak misalnya: mesin gambar, mesin karakter, mesin
integer, mesin rekam, dan lain-lain. Pada diktat ini, akan diberikan contoh mesin abstrak
untuk mesin integer dan mesin karakter.
MESIN INTEGER (PENCACAH)
Mesin integer adalah mesin abstrak yang terdiri dari : tombol RESET dan INC. Seperti
halnya mesin karakter, mesin ini sebuah jendela yang menunjukan sebuah angka integer

Teknik Informatika Universitas Siliwangi


yang diingatkan, yang disebut CI (Current Integer). Mesin ini berfungsi sebagai
pencacah bilangan integer.

Primitif untuk mengubah keadaan mesin


procedure RESET
{pencacah disiapkan untuk dipakai, harga bilangan bulat yang disimpan adalah nol
IS : sembarang
FS : CI = 0
}
procedure
{pencacah
IS : CI =
FS : CI =
}

INC
dimajukan satu
harga
harga + 1

MESIN KARAKTER (MODEL AKSES SEKUENSIAL)


Suatu mesin karakter adalah mesin yang dapat memproses pita karakter dan memiliki
elemen-elemen sebagai berikut :
1. PITA KARAKTER yang merupakan kumpulan karakter yang diakhiri tanda
titik. Pita yang hanya terdiri dari . disebut sebagai pita kosong
2. POINTER yang merupakan penunjuk posisi karakter pada pita
3. Jendela CURRENT CHARACTER(CC) yang akan menampilkan karakter
yang sedang ditunjuk oleh POINTER
4. Tombol START yang menempatkan POINTER mesin ke awal pita
5. Tombol ADVANCE yang akan memajukan pointer ke karakter selanjutnya pada
pita karakter
6. Lampu EOP(End Of Pita) yang menunjukkan apakah POINTER ada di akhir
pita atau tidak. Lampu EOP akan menyala jika POINTER ada di akhir pita dan
mengembalikan nilai True, jika sebaliknya akan mengembalikan nilai False
Prosedur-prosedur standar yang terdapat pada Mesin karakter antara lain :
1)

START yang berfungsi untuk memulai pembacaan pita karakter dan meempatkan
head/CC pada karakter pertama dalam pita

procedure START
{mesin siap dioperasikan. Pita disiapkan untuk dibaca. Karakter pertama pada pita
posisinya ada pada jendela sebagai Current Character

Teknik Informatika Universitas Siliwangi


IS : sembarang
FS : CC adalah karakter pertama yang ada pada pita,
Jika CC . maka EOP akan padam (false)
Jika CC = . maka EOP akan menyala (true)}

2)

ADV yang berfungsi untuk memajukan pointer ke karakter selanjutnya(membaca


karakter selanjutnya)

procedure ADV
{Pita dimajukan.
IS : karakter pada jendela = CC, CC .
FS : CC adalah karakter berikutnya dari CC yang lama, CC mungkin
. maka lampu EOP akan menyala}

= . jika CC =

Catatan : EOP diwakili oleh tipe boolean., bernilai true jika menyala, atau false jika
tidak menyala. Jika EOP menyala, mesin sudah tidak bisa dioperasikan lagi
MESIN GAMBAR
Mesin gambar adalah mesin abstrak yang terdiri dari : bidang gambar dan pena.
Keduanya menyatakan keadaan (State) dari mesin.
Bidang gambar yaitu sekumpulan titik yang membentuk sebuah permukaan terbatas
yang posisinya dikenali melalui koordinat kartesian dengan (0.0,0.0) di kiri atas bidang
gambar. Keadaan bidang gambar dinyatakan oleh titik-titik koordinat yang hitam atau
putih Setiap titik koordinat (x,y) pada bidang gambar dapat berada dalam keadaan hitam
atau putih.
(500.0, 500.0)

(0.0, 0.0)

Y
Pena :
Pena mempunyai 3 atribut yaitu :
Posisi penulisan (disingkat Pen) : bisa "on" atau "off". Hanya pada posisi "on",
pena dapat menghitamkan titik bidang gambar. Pena tidak pernah bisa
memutihkan titik bidang gambar.
Posisi pada permukaan (disingkat Posxy) : posisinya pada koordinat bidang
gambar bertype:
type Point : <X:real,Y:real>

{menyatakan koordinat real pada sumbu kartesian}


Arah pena (disingkat Dir) : yaitu arah pena terhadap sumbu Ox seperti dalam

Teknik Informatika Universitas Siliwangi


goneometri, besarnya dinyatakan dalam derajat [-360.0..+ 360.0] derajat) Untuk
menentukan harga dari keadaan-keadaan pena ini, kita dapat memakai konstanta
atau nama y (yang didefiniskan dalam kamus). Contoh :
Posxy = <10.0,20.0>, pen= off, Dir=-30.0
Posxy = <Px,Py>, pen= CurrentPos, Dir=90.0,

dengan px dan py yang telah didefinisikan dalam kamus


Mesin ini memungkinkan mekanisme yang melaksanakan beberapa aksi primitif untuk
membuat gambar grafik sederhana yang didefinisikan berikut ini :
Procedure Clear
{ Aksi yang membersihkan bidang gambar, tanpa mengubah posisi pena. Semua titik koordinat
diset menjadi putih.
I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d
F.S : Pen= Pospen, PosXy = <x,y>, Dir = d; semua titik bidang gambar menjadi putih }
Procedure Restart
{ Aksi yang membersihkan bidang gambar, dan menaruh pena pada posisi (0,0) dan
off, Semua titik koordinat diset menjadi putih.
I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d
F.S : Pen= off, PosXy = <0.0,0.0>, Dir = 0.0; dan semua titik bidang gambar menjadi
putih }

Primitif untuk mengubah posisi pena terhadap bidang gambar


Procedure MOVE (Input L : real >0.0)
{ Pena maju sejauh L satuan koordinat dengan arah yang sedang dipunyainya. Pena akan
menghitamkan titik bidang gambar sambil maju, jika berada pada posisi "on".
I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d
F.S : Pen= Pospen, PosXy = <x+L cos(d), y+L sin(d)>, Dir = d
}
Procedure TOPOS (Input x,y : real [-500.0 .. 500.0])
{ Pena menuju posisi (x,y), tanap berubah arah dan tanpa berubah posisinya terhadap
permukaan
I.S. : Pen= Pospen, PosXy = <x1,y1>, Dir = d
F.S : Pen= Pospen, PosXy = <x, y>, Dir = d
}
Procedure UP
{Pena diposisikan pada pada posisi "off"; Pen = off
I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d
F.S : Pen= off, PosXy = <x,y>, Dir = d
}
Procedure DOWN
{Pena diposisikan pada pada posisi "on"; Pen = on
I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d
F.S : Pen= on, PosXy = <x, y>, Dir = d
}

Primitif untuk mengubah arah pena


Procedure RIGHT (Input d: real [0.0..360.0])
{Pena dibelokkan searah jarum jam sebesar d derajat.

Teknik Informatika Universitas Siliwangi


I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d1
F.S : Pen= Pospen, PosXy = <x, y>, Dir = (d1-d) modreal 360.0
}
procedure LEFT (Input d: real [0.0..360.0])
{ Pena dibelokkan berlawanan arah jarum jam sebesar d derajat.
I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d1
F.S : Pen= Pospen, PosXy = <x, y>, Dir = (d1+d) /360.0;
}
procedure SETDIR (Input d: real [0.0..360.0])
{ Pena diarahkan pada sudut sebesar d derajat.
I.S. : Pen= Pospen, PosXy = <x,y>, Dir = d1
F.S : Pen= Pospen, PosXy = <x, y>, Dir = d
}

Contoh Algoritma dan Studi Kasus


Algoritma untuk membaca pita karakter, menampilkan isinya, dan menghitung jumlah
karakter yang terdapat pada pita
Algoritma Pita_Karakter
Kamus
procedure START
procedure ADV
jum_char : integer
CC : char
Deskripsi
jum_char 0
START
{memulai pembacaan pita, CC = karakter pertama pada pita}
if (CC='.') then {jika pita kosong}
write('Pita Kosong')
else
{jika pita tidak kosong}
while (CC '.')do
{pengulangan dilakukan selama pointer belum menunjuk

karakter tanda akhir pita yaitu .}


write(CC)
jum_char jum_char + 1
ADV
{menggerakan pointer ke posisi berikutnya pada pita}
endwhile
endif
write (jum_char);
Algoritma menghitung banyaknya huruf A pada pita karakter
Algoritma Hitung_A
Kamus
Jum_A : integer
CC : char
Algoritma
Jum_A 0
START

Teknik Informatika Universitas Siliwangi


while (not EOP) do
if (CC=A) then
Jum_A Jum_A + 1
endif
ADV
endwhile
Algoritma menghitung banyaknya pasangan huruf SA pada pita karakter
Algoritma Hitung_SA
Kamus
Jum_SA : integer
CC, CC_Lama : char
Algoritma
Jum_SA 0
CC_Lama
START
while (not EOP) do
if (CC_Lama = S) and (CC=A) then
Jum_SA Jum_SA + 1
endif
CC_Lama CC
ADV
endwhile
Program GambarTOPI
{ I.S. : Pen=sembarang, PosXy = sembarang, Dir =sembarang }
{ F.S : Pen=sembarang, PosXy = sembarang, Dir =sembarang
Proses : sebuah gambar seperti pada Gambar di atas tergambar di layar }
Kamus
procedure TOPI
{ I.S. : Pen=on, PosXy = <x,y>, Dir = 60.0}
{ F.S : Pen= on, PosXy = <x+ 15.0,0.0>, Dir = -60.0 tergambar dan topi spt pada Gb.}
Algoritma
Restart
Down; SetDir (60.0)
Topi
procedure TOPI
{ I.S. : Pen=on, PosXy = <x,y>, Dir = 60.0}
{ F.S : Pen= on, PosXy = <x+ 15.0,0.0>, Dir = -60.0 dan topi spt pada Gb. Tergambar }
Kamus lokal
Algoritma
Move(15.0)
Right (120.0)
Move(15.0)

Teknik Informatika Universitas Siliwangi


Program GamBarBSangkar
{ Input : sebuah data Bujur Sangkar }
{ Proses :Menggambarkan bujur sangkar }
{ Output : Bujur sangakr dengan awal Point bersisi Sisi berarah Arah digambarkan }
Kamus
BS : BujurSangkar
procedure DrawSimpleRect (Input L:real)
{ Menggambarkan bujur sangkar bersisi L }
{ I.S. : Pen=on, PosXy = P, Dir = Arah dari Bujur Sangkar}
{ F.S : Pen= on, PosXy = P, Dir = Arah dari Bujur Sangkar}
Algoritma
input (BS)
Restart
SetDir (BS.Arah)
Move(BS.Point)
Down
DrawSimpleRect(BS.Sisi)
procedure DrawSimpleRect (Input L:real)
{ Menggambarkan bujur sangkar bersisi L }
{ I.S. : Pen=on, PosXy = P, Dir = Arah dari Bujur Sangkar}
{ F.S : Pen= on, PosXy = P, Dir = Arah dari Bujur Sangkar}
Kamus
C : BujurSangkar
Algoritma
Repeat 4 times
Move(L)
Right (90.0)

LATIHAN SOAL
1. Diberikan empat pita sebagai berikut, hitung karakter dari pita-pita sebagai berikut
I

.
Deretan aksi (penekanan tombol) pada kedua mesin untuk menghitung banyaknya
huruf pada pita :
1.a)

START; RESET

{ CC=I, CI = 0}

1.b.)

START; RESET

Teknik Informatika Universitas Siliwangi


ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC
ADV; INC

{CC=L,CI=1}
{CC= ,CI=2}
{CC=F,CI=3}
{CC=A,CI=4}
{CC=I,CI=5}
{CC=T,CI=6}
{CC= ,CI=7}
{CC=B,CI=8}
{CC=E,CI=9}
{CC=A,CI=10}
{CC=U,CI=11}
{CC=.,CI=12}

2) START; RESET
ADV; INC
ADV; INC
ADV; INC
ADV; INC

{ CC=Y, CI = 0}
{CC=A,CI=1}
{CC= ,CI=2}
{CC= ,CI=3}
{CC=.,CI=4}

3)

{ CC=T, CI = 0}
{CC=.,CI=1}

START; RESET
ADV; INC

4)

START; RESET

INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV
INC;ADV

{ CC=., CI = 0}

Apa beda antara solusi 1.a) dan 1.b) ?


2. Dengan memperhatikan soal nomor 1 diatas, hitung karakter dari pita-pita dibawah
ini dengan deretan aksi (penekanan tombol) pada kedua mesin untuk menghitung
banyaknya huruf pada pita.
I

U
A

A
N

T
S
K

I
I

A
L

.
.

.
3. Buatlah algoritma yang membaca titik awal sebuah topi dan panjang sisi miringnya,
kemudian menggambarkan barisan topi sebagai berikut :
5.
60.0
60.0
(0.0, 0.0

Teknik Informatika Universitas Siliwangi

3 PROGRAM REKURSIF
Program rekursif adalah program yang memanggil dirinya sendiri. Oleh karena itu,
program rekursif harus dinyatakan dalam prosedur atau fungsi, karena hanya prosedur
dan fungsi yang dapat dipanggil dalam sebuah program.
Fungsi atau Prosedur Rekursif disusun oleh dua komponen :
1. Basis(komponen basis)
fungsi : Menghentikan rekursif dan memberi nilai yang terdefinisi
2. Aturan rekursif(komponen induksi)
fungsi : mendefinisikan dengan dirinya sendiri
Aturan rekursif dapat memungkinkan komputasi tak berhingga bila komputasi tidak
mencapai komponen basis. Pemrogram harus berhati-hati dalam membuat definisi
rekursif. Definisi harus menunjukkan pergerakan yang semakin menuju ke objek yang
lebih sederhana sehingga memungkinkan deinisi tersebut berhenti.
Studi Kasus Rekursif :
1. Perhitungan jumlah deret integer
Permasalahan : Diberikan sebuah integer non-negatif, n, buatlah algoritma untuk
menghitung jumlah deret integer mulai dari 1 sampai n
Permasalahan tersebut dapat diselesaikan dengan pengulangan dan rekursif
Algoritma Perhitungan jumlah deret integer dengan pengulangan
Algoritma Jumlah_Deret
Kamus
i,n, sum : integer
Deskripsi
read(n)
{n = banyaknya deret}
sum 0
for i 1 to n do
sum sum + i
endfor
write(sum)

Definisi secara rekursif :


(i) jumlah = 1

, jika n=1 {komponen basis}

(ii) jumlah = n + jumlah(n-1) , jika n>1 {komponen induksi}


Algoritma Perhitungan jumlah deret integer dengan rekursif
function sum(n : integer) integer

Teknik Informatika Universitas Siliwangi


Kamus
Deskripsi
if (n=1) then
1
else
n + sum(n-1) {pemanggilan fungsi sum secara rekursif}
endif
Algoritma Jum_Deret_Rekursif
Kamus
nderet : integer
Deskripsi
read (nderet)
write(sum(nderet)) {memanggil fungsi sum}

2.

Perhitungan Faktorial
Definisi secara iterasi :
n! = 1 x 2 x x n dan didefinisikan 0! = 1
contoh : 5! = 1 * 2 * 3 * 4 * 5

Fungsi Faktorial dengan Pengulangan


function fact (n : integer) integer
Kamus
i , temp : integer
Deskripsi
if (n > 0) then
temp 1
for i 1 to n do
temp temp * i
endfor
temp
else
1
endif

Definisi secara rekursif :


(i)
(ii)

n! = 1
n! = n x (n-1)!

, jika n = 0

{komponen basis}

, jika n > 0

{komponen induksi}

Fungsi Faktorial secara Rekursif


function fact (n : integer) integer
Kamus
i : integer
Deskripsi
if (n = 0) then
1
{komponen basis}
else
n * fact (n-1)
{komponen induksi}
endif

Teknik Informatika Universitas Siliwangi


PENJUMLAHAN dua bilangan integer

{Plus(x,y)}

DEFINISI DAN SPESIFIKASI


Plus : 2 integer > 0 integer > 0 { Plus(x,y) menghasilkan x + y) }
REALISASI VERSI-1 : REKURENS TERHADAP Y
{ Plus (x,y) = x + y = x + 1 + 1+ ......... +1 = x + 1 + (y-1) = 1 + x + (y-1)}
{ Basis :y=0 x Rekurens : y > 0 1+ Plus (x, prec(y)) }
Plus (x,y) :
if y = 0 then {Basis 0}
x
else {Rekurens terhadap y }
1 + Plus(x,prec(y))
REALISASI VERSI-2 : REKURENS TERHADAP X
{ Plus (x,y) = x + y = 1 + 1+ ......... +1+ y = 1 + (x-1) + y }
{ Basis : x=0 y Rekurens : x > 0 1+ Plus (prec(x),y) }
Plus (x,y) :
if x = 0 then {Basis 0}
y
else {Rekurens terhadap x}
Plus(prec(x), y)

Hal yang harus diperhatkan dalam melakukan proses rekursif aitu memastikan batas
atau kondisi berhenti proses rekursif. Pada fungsi fact di atas kondisi berhenti jika n=0.
Sebellum mengimplementasikan suatu proses rekursif yakinkan bahwa syarat berhenti
dapat dicapai. Jangan sampai proses berhenti tidak pernah dapat tercapai.
Untuk itu, berbagai kondisi yang dapat menyebabkan rekursif tak berujung harus dapat
ditangani (contohnya jika kita masukkan n<0). Proses rekursif yang tak berujung akan
menyebabkan memori system habis, dengan kata lain komputer hang,
LATIHAN
1. Tuliskanlah sebuah fungsi yang menghitung Fibonacci dari n , dengan definisi
rekursif
2. Tuliskanlah sebuah fungsi yang menjumlahkan dua buah integer, dan menghasilkan
sebuah integer, dengan membuat definisi rekursif dari penjumlahan
3. Tuliskanlah sebuah fungsi yang mengalikan dua buah integer, dan menghasilkan
sebuah integer, dengan membuat definisi rekursif dari perkalian.

Teknik Informatika Universitas Siliwangi

4 KOLEKSI OBJEK
Seringkali kita harus mengelola sekumpulan (koleksi) objek, dan tidak hanya sebuah
objek secara individual. Setiap elemen dalam suatu koleksi objek harus bertype sama
(mungkin type dasar, atau suatu ADT yang pernah didefinisikan, atau suatu objek dari
kelas tertentu), dan biasanya mempunyai keterurutan tertentu.
Definisi koleksi dan elemen dapat dilakukan dengan dua cara:
Definisi iteratif: dengan mendefinisikan setiap elemen
Definisi rekursif: suatu koleksi objek bahkan dapat mengandung elemen berupa
koleksi itu sendiri
Koleksi objek :
Diberi nama kolektif, dan nama elemennya
Diorganisasi elemennya baik secara linier, maupun tidak linier
Dapat diakses setiap elemen koleksinya secara individual, lewat nama atau address.
Bagaimana mengakses elemen yang lain berdasarkan individu elemen terdefinisi
yang sedang current Diproses per elemen atau seluruh koleksi
Banyaknya elemen suatu koleksi objek dapat tidak ada, berrati koleksi objeknya
kosong, atau bertambah/berkurang secara dinamik.
Alokasi Memori untuk seluruh koleksi dapat dilakukan:

Sekaligus (statik)

Setiap kali sebuah elemen akan ditambahkan ke koleksi (dinamik)

Koleksi Objek adalah sebuah ADT, dengan definisi :

Type koleksi

Type elemen (dan addressnya jika perlu)

Akses elemen lain

Primitif :

terhadap koleksi

Teknik Informatika Universitas Siliwangi

penciptaan koleksi kosong (dan alokasi jika perlu)

penghancuran seluruh koleksi (dan dealokasi jika perlu)

penambahan sebuah elemen baru menjadi anggota koleksi

penghapusan sebuah elemen dari koleksi

terhadap sebuah elemen tertentu:

konsultasi kandungan informasi elemen

perubahan informasi kandungan

iterasi untuk memproses semua elemen (traversal)

pencarian sebuah atau sekumpulan elemen dengan sifat tertentu (search)

pengurutan elemen-elemen berdasarkan kriteria tertentu

Pada bidang komputer, beberapa koleksi objek didefinisikan secara persis aturan- aturan
penyimpanan, penambahan, penghapusan elemennya. Ini melahirkan struktur data
standard di bidang komputer seperti:

List linier

Matriks

Stack (tumpukan)

Queue (antrian) dengan variasinya

List tidak linier (pohon, graph, multi list)

Koleksi Objek Generik


Beberapa bahasa pemrograman menyediakan fasilitas untuk koleksi objek (misalnya
bahasa Ada, C++). Beberapa bahasa tidak menyediakan fasilitas tersebut. Pada konteks
prosedural, mendefinisikan sebuah koleksi objek dilakukan dalam tiga tingkatan :
a. Definisi fungsional
b. Representasi lojik
c. Representasi (implementasi) fisik
a. Definisi fungsional
Definisi fungsional adalah pendefinisian nama struktur data dan operator-operator yang
berlaku pada struktur tsb. Pada tingkatan ini, kita belum membahas tentang representasi,

Teknik Informatika Universitas Siliwangi


melainkan hanya nama type dan semua operasi yang dilakukan terhadap type. Secara
umum, operasi fungsional hanya terdiri dari :

Pembuatan/penciptaan

Penambahan (add, insert)

Penghapusan (delete)

Perubahan (update)

Penggabungan

Operasi-operasi lain

b. Representasi lojik
Representasi lojik adalah spesifikasi type dari struktur, yang menyangkut nama type
dan spesifikasi semua operator, namun dalam definisi type ini, alamat masih belum
ditentukan secara pasti. Representasi lojik tak tergantung pada memori komputer.
Struktur ini memudahkan pemrogram untuk merancang data dan algoritma, serta tak
bergantung pada mesin apapun.
Pada konsteks prosedural, pada definisi ini, didefinisikan dengan lebih jelas, operator
fungsional menjadi fungsi atau prosedur, dengan spesifikasi parameter yang lebih jelas.
Selain itu, dapat pula didefinisikan primitif lain yang secara khusus erat hubungannya
dengan prosedural yaitu traversal atau search.
c. Representasi (implementasi) fisik
Representasi fisik adalah spesifikasi dari struktur data sesuai dengan implementasinya
dalam memori komputer dan kesediaan dalam bahasa pemrograman. Pada dasarnya,
hanya ada dua macam implementasi fisik : kontigu atau berkait.
Representasi fisik kontigu adalah sekumpulan data yang penempatannya dalam memori
benar-benar secara fisik adalah kontigu, setiap elemen ditaruh secara berturutan posisi
alamatnya dengan elemen lain. Karena itu untuk mencapai satuan elemen berikutnya,
cukup melalui suksesor alamat yang sedang "current". Supaya suksesor tetap terdefinisi,
maka tempat yang dialokasikan untuk struktur ini sudah ditetapkan sebelumnya, supaya
data tidak "kemana-mana". Dikatakan bahwa struktur ini adalah struktur yang statis,
karena alokasi memori dilakukan sekaligus untuk seluruh koleksi.
Representasi fisik berkait adalah sekumpulan data yang penempatannya pada memori

Teknik Informatika Universitas Siliwangi


komputer dapat terpencar-pencar, namun dapat ditelusuri berkat adanya informasi
berupa alamat, yang menghubungkan elemen yang satu dengan yang lain. Karena
alamat untuk mencapai elemen yang lain ada secara eksplisit, maka alamat yang bakal
dipakai dapat saja dialokasikan pada waktunya atau sudah ditetapkan dari awal. Jika
alokasi alamat baru diadakan pada waktu diperlukan dan juga dapat dikembalikan,
maka memori yang dipakai bisa membesar dan mengecil sesuai dengan kebutuhan.
Dikatakan bahwa struktur ini adalah struktur yang dinamis.

List linier

Multi List

Tree (Pohon)

Grap

Stack

5 STACK
5.1 Kaitan Stack dengan Struktur Data
Struktur data adalah cara menyimpan atau merepresentasikan data didalam komputer
agar bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata.
Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan
dalam bentuk tulisan, suara, gambar, sinyal atau simbol. Secara garis besar type data dapat
dikategorikan menjadi:
Type data sederhana.

Type data sederhana tunggal/dasar, misalnya Integer, Real, boolean dan karakter.

Type data sederhana majemuk/bentukan, misalnya String

Struktur Data, meliputi:


1. Struktur data sederhana, misalnya Array dan Record.
2. Struktur data majemuk, yang terdiri dari:
- Linier

: Stack, Queue, serta List dan Multilist

- Non Linier

: Pohon Biner dan Graph

5.2 Stack
Stack adalah suatu tumpukan dari benda atau urutan elemen yang elemennya dapat
diambil dan ditambah hanya pada posisi akhir (Top) yang lebih dikenal dengan istilah LIFO
(Last In First Out). Contoh dalam kehidupan sehari-hari adalah tumpukan Dus disebuah
gudang yang tumpukannya dapat ditambah pada bagian paling atas dan jika mengambilnya
pun dari bagian paling atas pula.
Contoh dalam pemrograman, stack bisa digunakan untuk pengujian kalimat palindrome,
penguji tanda kurung (matching parentheses), dan juga berfungsi sebagai konversi dari notasi
infix menjadi notasi postfix.
5.3 Operasi-operasi pada stack
Operasi dasar yang bisa dilakukan, yaitu :
1. Operasi PUSH, operasi menambahkan elemen pada urutan terakhir (paling atas).
2. Operasi POP, operasi mengambil sebuah elemen data pada urutan terakhir dan
menghapus elemen tersebut dari stack.
Operasi lainnya :
1. Proses Deklarasi, proses pendeklarasian stack

Teknik Informatika Universitas Siliwangi


2. Proses IsEmpty, proses pengecekan apakah stack dalam keadaan kosong
3. Proses Full, proses pemeriksaan apakah stack telah penuh
4. Proses Inisialisasi, proses pembuatan stack kosong, biasanya dengan pemberian nilai
untuk Top.
Representasi stack dalam pemrograman, dapat dilakukan dengan 2 cara yaitu :
1. Representasi stack dengan array
2. Representasi stack dengan Single Linked list
5.4 Implementasi Stack dalam Algoritma
A. Single Stack dengan Array
Sesuai dengan sifat stack, maka pengambilan/penghapusan elemen dalam stack
harus dimulai dari elemen teratas. Deklarasi konstanta, tipe, dan variable yang akan
dipakai dalam penjelasan operasioperasi stack dengan array adalah :
Const
Max = {jumlah tumpukan}
Type
TipeData = { };
Stack = array [1..Max] of TipeData;
Var
Top : TipeData;

Operasi-operasi pada Single Stack dengan Array


Create : Membuat stack baru yang masih kosong
Procedure Create;
Begin
Top := 0;
End;

Full : Fungsi untuk memeriksa apakah stack yang ada sudah penuh
Function Full : Boolean;
Begin
Full := False;
If top = max then Full := True;
End;

Push : Menambahkan sebuah elemenelemen ke dalam stack. Tidak bisa dilakukan lagi
jika stack sudah penuh.
Procedure Push(elemen:TipeData);
Begin
If not Full then
Begin
Top := Top+1; { atau Inc(Top) }
Stack[Top] := elemen;
End;
End;

Teknik Informatika Universitas Siliwangi


Empty : Fungsi untuk menentukan apakah stack kosong atau tidak.
Function Empty : Boolean;
Begin
Empty := False;
If Top = 0 then Empty := True;
End;

Pop : Mengambil elemen teratas dari stack. Stack tidak boleh kosong.
Procedure Pop(elemen:TipeData);
Begin
If not Empty then
Begin
Elemen := stack[Top];
Top := Top1; { atau Dec(Top) }
End;
End;

Clear : Mengosongkan stack ( Jika top = 0, maka stack dianggap kosong)


Procedure Clear;
Begin
Top := 0;
End;

B. Double Stack dengan Array


Merupakan teknik yang dikembangkan untuk menghemat pemakaian memory
dalam pembuatan dua stack dengan array. Intinya adalah menggunakan sebuah array
untuk menampung dua stack. Contoh deklarasi konstanta, tipe, dan variable yang akan
dipakai dalam operasioperasi double stack array.
Const
Max = {jumlah tumpukan}
Type
TipeData = {
};
Stack = array [1..Max] of Byte;
Var
Top : array[1..2] of Byte;

Operasi-operasi pada Double Stack dengan Array


Create : Membuat stack baru yang masih kosong
Procedure Create;
Begin
Top[1] := 0;
Top[2] := max + 1;
End;

Teknik Informatika Universitas Siliwangi


Full : Fungsi untuk memeriksa apakah stack yang ada sudah penuh
Function Full : Boolean;
Begin
Full := False;
If top[1]+1 > = top[2] then Full := True;
End;

Push : Menambahkan sebuah elemenelemen ke dalam stack. Tidak bisa dilakukan lagi
jika stack sudah penuh.
Procedure Push(elemen:TipeData; NoStack : Byte);
Begin
If not Full then
Begin
Case NoStack of
1 : Top[1] := Top[1] + 1;
2 : Top[2] := Top[2] 1;
Stack[Top[NoStack]] := elemen;
End;
End;

Empty : Fungsi untuk menentukan apakah stack kosong atau tidak.


Function Empty(NoStack : Byte) : Boolean;
Begin
Empty := False;
Case NoStack of
1 : if Top[1]=0 then
Empty := True;
2 : if Top[2] = Max + 1 then
Empty := True;
End;
End;

Pop : Mengambil elemen teratas dari stack. Stack tidak boleh kosong.
Procedure Pop(var elemen:TipeData; NoStack:Byte);
Begin
If not Empty(NoStack) then
Begin
Elemen := stack[Top[NoStack]];
Case NoStack of
1 : Top[1] := Top[1] 1;
2 : Top[2] := Top[2] +1;
End;
End;
End;

Teknik Informatika Universitas Siliwangi


Clear : Mengosongkan stack ( Jika top = 0, maka stack dianggap kosong)
Procedure Clear(NoStack:Byte);
Begin
Case NoStack Of
1 : Top[1] := 0;
2 : Top[2]:= Max + 1;
End;
End;

C. Stack dengan Single Linked List


Implementasi stack dengan Single Linked List hampir sama dengan stack pada
array. Keunggulannya terletak pada penggunaan alokasi memory yang dinamis sehingga
menghindari pemborosan memory. Misalnya pada stack dengan array disediakan tempat
untuk stack berisi 150 elemen, sementara ketika dipakai oleh user hanya diisi 50 elemen,
maka telah terjadi pemborosan memori untuk sisa 100 tempat elemen yang tak terpakai.
Dengan penggunaan linked list maka tempat yang disediakan akan sesuai dengan
banyaknya elemen yang mengisi stack. Karena itu pula dalam linked list tidak dikenal
dengan istilah Full, sebab biasanya program tidak menentukan jumlah elemen stack yang
mungkin ada. Deklarasi tipe, dan variable yang akan dipakai dalam penjelasan operasi stack.
Type
TipeData = Byte;
Point = ^Simpul;
Simpul = record
Isi : TipeData;
Next : Point;
End;
Var
Top : Point;

Operasi-operasi pada Stack dengan Single Linked List


Create : Membuat stack baru yang masih kosong
Procedure Create;
Begin
Top := nil;
End;

Empty : Fungsi untuk menentukan apakah stack yang ada masih kosong atau tidak.
Function Empty : Boolean;
Begin
Empty := False;
if Top = nil then
Empty := True;
End;

Push : Memasukan elemen baru ke dalam stack


Procedure Push(elemen:TipeData);
Var
Now : Point;
Begin
New(Now);
Now^.isi := elemen;
If empty then
Now^.next := nil;

Teknik Informatika Universitas Siliwangi


Else
Now^.next := top;
Top:= Now;
End;

Pop : Mengambil elemen teratas dari stack.


Procedure Pop(elemen:TipeData);
Var
Now : Point;
Begin
If not Empty then
Begin
Elemen := Now^.isi;
Now := Top;
Top := Top^.next;
Dipose(Now);
End;
End;

Clear : Mengosongkan stack ( Jika top = 0, maka stack dianggap kosong)


Procedure Clear;
Var
Trash = TipeData;
Begin
While not empty do Pop (Trash);
End;

Latihan soal
Buatlah sebuah program yang akan membalik susunan kata yang diinput oleh user dengan
menggunakan stack. Gunakan animasi untuk mengggambarkan huruf-huruf pada kata di push
satu persatu mulai dari huruf terdepan sampai belakang ke sebuah wadah, kemudian di pop
satu persatu sampai membentuk kata dengan susunan terbalik dari asalnya.

Teknik Informatika Universitas Siliwangi

6 QUEUE
6.1 Pengertian Queue
Secara harfiah queue dapat diartikan sebagai antrian. Queue merupakan
kumpulan data dengan penambahan data hanya melalui satu sisi, yaitu belakang
(tail) dan penghapusan data hanya melalui sisi depan (head). Berbeda dengan stack
yang bersifat LIFO maka queue bersifat FIFO(First In First Out), yaitu data yang
pertama masuk akan keluar terlebih dahulu dan data yang terakhir masuk akan
keluar terakhir.
Operasi-operasi standar pada queue adalah:
1. membuat queue atau inisialisasi.
2. mengecek apakah queue penuh.
3. mengecek apakah queue kosong.
4. memasukkan elemen ke dalam queue atau InQueue (Insert Queue).
5. Menghapus elemen queue atau DeQueue (Delete Queue).
A. Implementasi Queue dengan Linear Array
Disebut juga queue dengan model fisik, yaitu bagian depan queue selalu
menempati posisi pertama array. Queue dengan linear array secara umum dapat
dideklarasikan sebagai berikut:
Const
MaxQueue = {jumlah};
Type
TypeQueue = byte;
Var
Queue : Array[1..MaxQueue] of TypeQueuel
Head, Tail : Byte;

Operasi-operasi queue dengan linear array:


1. Create
Procedure create berguna untuk menciptakan queue yang baru dan kosong yaitu
dengan cara memberikan nilai awal (head) dan nilai akhir (tail) dengan nol(0). Nol
menunjukan bahwa queue masih kosong.
Procedure Create;
Begin
Head := 0; Tail := 0;
End.

2. Empty
Function empty berguna untuk mengecek apakah queue masih kosong atau
sudah berisi data. Hal ini dilakukan dengan mengecek apakah tail bernilai nol atau
tidak, jika ya maka kosong.
Function Empty : Boolean;
Begin
If Tail = 0 then
Empty := true
Else
Empty := False; End;

Teknik Informatika Universitas Siliwangi

3. Full
berguna untuk mengecek apakah Queue sudah penuh atau masih bisa menampung data
dengan cara mengecek apakah nilai tail sudah sama dengan jumlah maksimal queue,
jika ya maka penuh.
Function Full : Boolean;
Begin
If Tail = MaxQueue then
Full := true
Else
Full := False
End;

4. EnQueue
Procedure EnQueue berguna untuk memasukkan 1 elemen ke dalam queue.
Procedure Enqueue(Elemen : Byte);
Begin
If Empty then
Begin
Head := 1;
Tail := 1;
Queue[head] := Elemen;
End
Else
If Not Full then
Begin
Inc(Tail);
Queue[tail] := Elemen;
End;
End;

5. DeQueue
Procedure DeQueue berguna untuk mengambil 1 elemen dari Queue, operasi ini
sering disebut juga SERVE. Hal ini dilakukan dengan cara memindahkan semua
elemen satu langkah ke posisi di depannya, sehingga otomatis elemen yang paling
depan akan tertimpa dengan elemen yang terletak dibelakangnya.
Procedure DeQueue;
Var
i : Byte;
Begin
If Not Empty then
Begin
For i := Head to Tail1 do
Queue[I] := Queue[I+1];
Dec(Tail);
End;
End;

Teknik Informatika Universitas Siliwangi

6. Clear
Procedure clear berguna untuk menghapus semua elemen dalam queue dengan
jalan mengeluarkan semua elemen tersebut satu per satu sampai kosong dengan
memanfaatkan procedure DeQueue.
Procedure Clear;
Begin
While Not Empty then
DeQueue;
End;

B. Implementasi Queue dengan Circular Array


Salah satu variasi array adalah array melingkar (circular array), artinya
array dapat diakses mulai dari sembarang indeks (indeks awal) ke arah indeks
terakhir (maksimum array), lalu memutar ke indeks pertama hingga kembali ke
indeks awal. Circular array adalah array yang dibuat seakanakan merupakan sebuah
lingkaran dengan titik awal dan titik akhir saling bersebelahan jika array tersebut
masih kosong. Jumlah data yang dapat ditampung oleh array ini adalah besarnya
ukuran array dikurangi 1. Misalnya besar array adalah 8, maka jumlah data yang dapat
ditampung adalah 7.
Dengan circular array, meskipun posisi terakhir telah terpakai, elemen baru
tetap dapat ditambahkan pada posisi pertama jika posisi pertama dalam keadaan
kosong. Jika akhir=MAX dan awal=1, nilai head dan tail mencapai maksimum, maka
akan dikembalikan ke posisi awal. Operasi-operasi yang terdapat pada circular
array tidak jauh berbeda dengan operasi pada linear array.
Operasi-operasi queue dengan circular array:
1. Create
Procedure Create;
Begin
Head := 1;
Tail := MaxQueue;
End;

2. Empty
Function Empty : Boolean;
Begin
If (Tail Mod Max_Queue ) + 1
Empty := true
Else
Empty := False;
End;

= Head then

3. Full
Function Full : Boolean;
Var
X : 1 .. Max_queue;
Begin
X := (Tail Mod Max_queue)+1;
If (x Mod Max_queue) + 1 = head then

Teknik Informatika Universitas Siliwangi

Full := True;
Else
Full := False;
End;

4. EnQueue
Procedure EnQueue (Elemen : TypeElemen);
Begin
If Not Full Then
Begin
Tail := (Tail Mod Max_queue) + 1 ;
Queue[Tail] := Elemen;
End;
End;

5. DeQueue
Procedure Dequeue;
Begin
If Not Empty then
Head := (Head Mod Max_queue) + 1;
End;

C. Implementasi Queue dengan Double Linked List


Selain dengan menggunakan array, queue juga dapat dibuat dengan menggunakan
linked
list. Metoda linked list yang digunakan adalah double linked list. Deklarasi tipe,
konstanta,
dan variable yang akan digunakan adalah:
Type Point = ^simpul;
Simpul = record
Isi : TipeData;
Next : Point;
End;
Queue = record
Head : Point;
Tail : Point;
End;
Var
Q : Queue;
N : 0 . . Max_Queue;

{Jumlah Antrian}

Operasi-Operasi Pembuatan Queue dengan Double Linked List


1. Create
Procedure create berguna untuk menciptakan QUEUE yang baru dan kosong
yaitu dengan cara mengarahkan pointer HEAD dan TAIL kepada NIL.
Procedure Create;
Begin
Q.Head := NIL;
Q.Tail := Q.Head;

Teknik Informatika Universitas Siliwangi

N := 0;
End;

2. Empty
Function Empty berguna untuk mengecek apakah QUEUE masih kosong atau sudah
berisi data. Hal ini dilakukan dengan mengecek apakah head masih menunjuk pada nil
atau tidak, jika ya maka kosong.
Function Empty : Boolean;
Begin
If Q.Head = Nil Then
Empty := True
Else
Empty := False;
End;

3. Full
Function Full berguna untuk mengecek apakah QUEUE sudah penuh atau masih bisa
menampung data dengan cara mengecek apakah N (JumlahQueue) sudah sama
dengan Max_Queue atau belum, jika ya maka penuh.
Function Full : Boolean;
Begin
If N = Max_Queue Then
Full := True
Else
Full := False;
End;

4. EnQueue
Procedure EnQueue berguna untuk memasukkan 1 elemen ke dalam QUEUE. Head dan
Tail mulamula menunjuk ke NIL.
Procedure EnQueue (Elemen : TipeData);
Var
Now : Point;
Begin
If Not Full Then
Begin
New(Now);
Now^.Isi := elemen;
Now^.Next := NIL;
If Empty Then
Begin
Q.Head := Now;
Q.Tail := Now;
N := 1;
End
else
Begin
Q.Tail^.next := Now;
Q.Tail := Now;

Teknik Informatika Universitas Siliwangi

End;
End;
End;

5. DeQueue
Procedure DeQueue berguna untuk mengambil 1 elemen dari QUEUE. Jal ini
dilakukan dengan cara menghapus satu simpul yang terletak paling depan (head).
Procedure DeQueue;
Var
Now : Point;
Begin
If Not Empty Then
Begin
Now := Q.Head;
Q.Head := Q.Head^.Next;
Dispose(now);
Dec (N);
End;
End;

6.2 Latihan Soal


Buat algoritma antrian nasabah di bank, dimana dalam bank tersebut terdapat 4 teller
yang bisa melayani nasabah secara antri menurut nomor urut dari yang terkecil dan
tidak terbatas.

Teknik Informatika Universitas Siliwangi

7 LIST
A. Single Linked List
Gambar berikut menunjukan sebuah data terletak pada sebuah lokasi
memory. Tempat yang disediakan pada suatu area memory tertentu untuk menyimpan
data dikenal dengan sebutan

node/simpul. Pada setiap node memiliki

pointer

(penunjuk) yang menunjuk ke simpul berikutnya sehingga terbentuk suatu untaian dan
dengan demikian hanya diperlukan sebuah variable pointer. Susunan berupa untaian ini
disebut dengan Single Linked List. Nil tidak memiliki nilai apapun. Setiap linked list
pada akan menunjuk ke Nil.
Dalam pembuatan Single Linked List dapat menggunakan 2 Metoda :
LIFO ( Last In First Out ), aplikasinya : Stack (Tumpukan)
FIFO ( First In First Out ), aplikasinya : Queue (Antrian)
* LIFO ( Last In First Out )
LIFO adalah suatu metoda pembuatan Linked List dimana data yang
masuk paling akhir adalah data yang keluar paling awal. Hal ini dapat dianalogikan
dengan menumpukan barang pada kehidupan seharihari. Pembuatan simpul pada
suatu linked list disebut dengan istilah INSERT. Jika linked list dibuat dengan
Metoda LIFO maka penambahan/insert simpul dilakukan di BELAKANG.
1. Procedure Insert
Istilah INSERT berarti menambahkan sebuah simpul baru ke dalam suatu linked
list. Berikut adalah deklarasi tipe data dan variabel yang dapat digunakan sebagai
deklarasi awal dan penggalan procedure insert.
Type
Point = ^RecPoint;
RecPoint = Record
Isi : TipeData;
Next : Point;
End;
Var
Head, Tail, Now : Point;
Procedure INSERT(elemen:TipeData);
Var
Now : Point;
Begin
New(Now);

Teknik Informatika Universitas Siliwangi

Now^.Isi := Elemen;
If Head = Nil Then
Now^.Next := Nil;
Else
Now^.Next := Head;
Head := Now;
End;

* FIFO (First In First Out)


FIFO adalah suatu metoda pembuatan Linked List dimana data
yang masuk paling awal adalah data yang keluar paling awal juga. Jika linked list
dibuat dengan menggunakan FIFO, maka terjadi penambahan / Insert simpul di depan.
Procedure INSERT(elemen:TipeData);
Var
Now : Point;
Begin
New(Now);
If Head = Nil Then
Head := Now;
Else
Tail^.Next := now;
Tail := Now;
Tail^.Next := Nil;
Now^.Isi := Elemen;
End;

* Procedure dan function Linked List lainnya


Selain procedure insert diatas, pada linked list juga masih terdapat
procedure serta function lainnya. Dibawah ini diberikan procedureprocedure serta
function umum dalam linked list.
1. Create
Membuat sebuah linked list yang baru dan masih kosong. Procedure ini wajib
dipanggil untuk menggunakan linked list.
Procedure Create;
Begin
Head := Nil;
Tail := Nil;
End;

2. Empty
Function untuk menentukan apakah linked list kosong atau tidak.
Function Empty : Boolean;

Teknik Informatika Universitas Siliwangi

Begin
If head = nil then
Empty := true
else
Empty := false;
End;

3. Find First
Mencari elemen pertama dari linked list
Procedure Find_First;
Begin
Now := Head;
End;

4. Find Next
Mencari elemen sesudah elemen yang ditunjuk Now
Procedure Find_Next;
Begin
If Now^.Next <> Nil then
Now := Now^.next;
End;

5. Retrieve
Mengambil
ditampung pada

elemen

yang

ditunjuk

oleh

now.

Elemen

tersebut

lalu

suatu variabel, dalam potongan procedure ini ditampung dalam

variabel r.
Procedure Retrieve(var r : TipeData);
Begin
R := Now^.Isi;
End;

6. Update
Mengubah elemen yang ditunjuk oleh now dengan isi dari suatu variabel
(dalam
contoh ini digunakan variabel u).
Procedure UpDate(u :TipeData);
Begin
Now^.Isi := U;
End;

Teknik Informatika Universitas Siliwangi

7. Delete Now
Menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen
yang pertama dari linked list (head), maka head akan berpindah ke elemen berikutnya.
Procedure DeleteNow;
Var
x : point;
Begin
If Now <> Head then
Begin
X := head;
While x^.next <> now do
X := x^.next;
X^.next := now^.next;
End
Else head := head^.next;
Dispose(now);
Now := head;
End;

8. Delete Head
Menghapus elemen yang ditunjuk oleh head. Head akan berpindah ke
elemen sesudahnya.
Procedure DeleteHead;
Begin
If head <> nil then
Begin
Now := Head;
Head := Head^.Next;
Dispose(Now);
Now := Head;
End;
End;

9. Clear
Untuk menghapus linked list yang sudah ada. Wajib dilakukan bila ingin
mengakhiri program yang menggunakan linked list. Jika tidak ada datadata yang
dialokasikan ke memory pada program sebelumnya akan tetap tertinggal di dalam
memory.
Procedure Clear;
Begin
While head <> nil do
Begin
Now := head;
Head := head^.next;

Teknik Informatika Universitas Siliwangi

Dispose(now);
End;
End;

B. Double Linked List


Salah satu kelemahan dari single linked list adalah pointer (penunjuk)
hanya dapat bergerak satu arah saja, maju atau mundur, kanan atau kiri. Sehingga
pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja.
Untuk mengatasinya maka digunakan metode double linked list. Linked list seperti ini
dikenal dengan nama linked list berpointer ganda atau Double Linked List.
Operasi-operasi pada Double Linked List
1. Insert After
Procedure insert berguna untuk menambah simpul dibelakang (sebelah kanan)
pada sebuah double linked list. Berikut penggalan procedure insert after.
Procedure InsertAfter(e:Elemen_Type);
Var Now : Point;
Begin
New(now);
Now^.Isi := e;
If Head=Nil then
Begin
Head := Now;
Tail := Now;
Now^.Next := Nil;
Now^.Prev := Nil;
End
Else
Begin
Tail^.next := now;
Now^.Prev := Tail;
Tail := Now;
Tail^.Next := Nil;
End;
End;

Teknik Informatika Universitas Siliwangi

2. Insert Before
Sesuai dengan namanya, procedure Insert Before berguna untuk menambah
simpul di depan (sebelah kiri). Procedure ini tidak berbeda jauh dengan procedure
Insert After.
Procedure InsertBefore(e:Elemen_Type);
Var Now : Point;
Begin
New(now);
Now^.Isi := e;
If Head=Nil then
Begin
Head := Now;
Now^.Next := Nil;
Now^.Prev := Nil;
End
Else
Begin
Head^.prev := now;
Now^.next := head;
Head := Now;
Head^.Prev := Nil;
End;
End;

3. Delete After
Procedure Delete After berguna untuk menghapus simpul dari belakang.
Procedure ini merupakan kebalikan dari procedure Insert After yang menambahkan
simpul dibelakang.
Procedure DeleteAfter;
Var
Now : Point;
Begin
Now := Tail;
If Now <> Head then
Begin
Tail := Now^.Prev;

Teknik Informatika Universitas Siliwangi

Tail^.Next := Nil;
End
Else
Begin
Tail := Nil;
Head := Nil;
End;
If Now <> Nil then
Dispose(now);
End;

4 Delete Before
Procedure Delete Before merupakan kebalikan dari procedure Delete After
yang akan menghapus simpul dari depan (sebelah kiri).
Procedure DeleteBefore;
Var
Now : Point;
Begin
Now := Head;
If Now <> Head then
Begin
Head := Now^.Next;
Head^.Prev := Nil;
End
Else
Begin
Tail := Nil;
Head := Nil;
End;
If Now <> Nil then
Dispose(now);
End;

5. Delete at Position
Procedure at Position, sesuai dengan namanya, berguna untuk menghapus
simpul pada posisi yang diinginkan. Untuk melakukannya diperlukan bantuan 2
variabel pointer yang pada modul ini diberi nama Bantu1 dan Bantu2. Nama
tersebut boleh diganti.
Procedure DeleteAtPos;
Var
Bantu1, Bantu2 : Point;
Begin
Bantu1 := Now^.Prev;
Bantu2 := Now^.Next;
If Bantu1 <> Nil then

Teknik Informatika Universitas Siliwangi

Bantu1^.Next := Bantu2;
Else
Head := Bantu2;
If Bantu2 <> Nil Then
Bantu2^.Prev := Bantu1;
Else
Tail := Bantu1;
If Now <> Nil Then
Dispose(Now);
End;

C. Circullar Double Linked List


Merupakan double linked list yang simpul terakhirnya menunjuk ke simpul
awal

dan simpul awalnya menunjuk ke simpul akhir sehingga membentuk suatu

lingkaran.
Operasi-operasi pada Circullar Double Linked List
1. Insert After
Procedure Insert After berguna untuk menambah simpul di belakang
(sebelah kanan) pada sebuah double linked list.
Procedure InsertAfter(e:Elemen_Type);
Var
Now : Point;
Begin
New(now);
If Head=Nil then
Begin
Head := Now;
else
Now^.Prev := Tail;
Tail^.Next := Now;
End;
Now^.Isi := e;
Tail := Now;
Tail^.next := Head;
Head^.Prev := Tail;
End;

2. Insert Before
Procedure Insert Before berguna untuk menambahkan simpul di depan
(sebelah kiri). Procedure ini tidak berbeda jauh dengan procedure Insert After
yang telah dijelaskan sebelumnya.
Procedure InsertBefore(e:Elemen_Type);
Begin

Teknik Informatika Universitas Siliwangi

If Head=Nil then
Begin
Head := Now;
Tail := Now;
End else
Begin
Now^.Prev :=Head;
Head^.Next := Now;
End;
Now^.Isi := e;
Now^.Next := Tail;
Tail^.Prev := Now;
Tail := Now;
End;

3. Delete After
Procedure Delete After berguna untuk menghapus simpul dari belakang.
Procedure ini merupakan kebalikan dari Procedure Insert After yang menambah
simpul di belakang.
Procedure DeleteAfter;
Var
Now : Point;
Begin
Now := Tail;
If Head=Nil then
Begin
Tail := Nil;
Head := Nil;
End else
Begin
Tail := Now^.Prev;
Tail^.Next := Head;
Head^.Prev := Tail;
End;
If Now <> nil then
Dispose(Now);
End;

D.Latihan Soal
Suatu Linked-list digunakan untuk menyimpan informasi karakter. Buatlah procedure
yang mengurutkan linked-list tersebut sehingga urutannya menjadi vokal terlebih
dahulu kemudian diikuti oleh konsonan. Jika awal dri linked list tersebut berisi
(a,b,c,d,e,f,m,n,o,p) akan diurutkan menjadi ( a, e, o, b, c, d, e, f, m, n, p).

Teknik Informatika Universitas Siliwangi

8 TREE
A. TREE
Sebelumnya kita sudah mengenal struktur data list, yang berupa obyek-obyek
yang saling terkait. Dalam list, satu obyek hanya terkait dengan satu obyek berikutnya
melalui sebuah pointer. List dapat dikembangkan menjadi struktur data yang lebih
kompleks, misalnya dengan menambah jumlah pointer dalam obyek. Misal dengan
penambahan satu pointer lagi. Artinya bahwa jika masing-masing obyek memiliki
dua pointer, ada dua obyek lain yang ditunjuknya. Struktur yang demikian dikenal
sebagai binary tree atau dikenal juga sebagai Tree Node.
Istilah-istilah umum dalam Binary Tree :

Predecessor : node yang berada di atas node tertentu

Successor : node yang berada dibawah node tertentu

Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur
yang sama

Descendant : seluruh node yang terletak sesudah node tertentu dan terletak pada
jalur yang sama

Parent

: predecessor satu level diatas suatu node

Child

: successor satu level diatas suatu node

Subtree

: bagian dari tree yang berupa suatu node beserta descendantnya dan

memiliki semua karakteristik dari tree tersebut

Size

: Banyaknya node dalam suatu tree

Height

: Banyaknya tingkatan / level dalam suatu tree

Root

: Satu-satunya node khusus dalam tree yang tak punya predecessor

Leaf

: Node-node dalam tree yang tak memiliki successor

Degree

: Banyaknya child yang dimiliki suatu node

B. Jenis-jenis Tree
1. Binary Tree
Binary Tree adalah tree dengan syarat bah hwa tiap node hanya boleh
mem iliki maksimal dua subtree dan kedua subtree tersebut haru terpisah. Sesuai
dengan definisi terseebut, maka tiap node dalam binary tree hanya boleh memiliki

Teknik Informatika Universitas Siliwangi

paling banyak dua child.


Jenis-jenis Bi nary Tree :
* Full Binary Tree
Binary Tree yang tiap nodenya (kecuali leaf) dua child dan tiap subtree harus
mempunyai panjang path yang sama.
* Comlpete Binary Tree
Mirip dengan Full Binary Tree namun tiap subtree boleh memiliki panjang path
yang berbeda. Node kecuali leaf memiliki 0 atau 2 child.
* Skewed Binary Tree
Yakni Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki satu
child.
Deklarasi Binary Tree
Type Tree = ^node;
Node = record
Isi : TipeData;
Left, Right : Tree;
End;

Operas-operasi pada Binary Tree


Create : Membuat binary tree baru yang masih kosong
Clear

: Mengosongkan binary tree yang sudah ada

Empty : Function untuk memeriksa apakah binary tree masih kosong.


Insert

: Memasukan sebuah node ke dalam tree. Ada tiga pilihan insert,

yaitu ROOT, LEFT CHILD, atau RIGHT CHILD. Khusus insert sebagai
ROOT, TREE harus dalam keadaan kosong.
Find

: Mencari root, parent, left child, atau right child dari suatu node.

Tree tidak boleh dalam kedaan kosong.


Update : Mengubah isi dari node yang ditunjuk oleh pointer current. Tree
tidak boleh dalam keadaan kosong.
Retrieve : Mengetahui isi dari node yang ditunjuk oleh pointer kosong. Tree
tidak boleh dalam kedaan kosong.
DeleteSub : Menghapus sebuah subtree (node beserta seluruh descendant
nya) yang ditunjuk oleh current. Tree tidak boleh kosong. Setelah itu
pointer current akan berpindah ke parent dari node yang telah di hapus.

Teknik Informatika Universitas Siliwangi

Characteristic: Mengetahui karakteristik dari suatu tree, yakni : size, height, serta
average dari lengthnya. Tree tidak boleh kosong.
Traverse : Mengunjungi seluruh nodenode pada tree, masingmasing
sekali. Hasilnya adalah urutan informasi secara linier yang tersimpan dalam tree.
Ada tiga cara traverse : Pre Order, In Order, dan Post Order.
Langkah melakukan traverse :
1. PreOrder : cetak isi node yang dikunjungi, kunjungi Left Child, kunjungi
Right Child.
2. InOrder : Kunjungi Left Child, cetak isi node yang dikunjungi, kunjungi
Right Child.
3. PostOrder : Kunjungi Left Child, kunjungi Right Child, cetak isi node yang
dikunjungi.

Teknik Informatika Universitas Siliwangi

9 GRAP
A. GRAPH
Graph adalah kumpulan dari simpul dan busur yang secara matematis
dinyatakan sebagai :
G = (V, E)
Dimana
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
Graf merupakan suatu cabang ilmu yang memiliki banyak terapan. Banyak
sekali struktur yang bisa direpresentasikan dengan graf, dan banyak masalah yang bisa
diselesaikan dengan bantuan graf. Seringkali graf digunakan untuk merepresentasikan
suaru jaringan. Misalkan jaringan jalan raya dimodelkan graf dengan kota sebagai
simpul (vertex/node) dan jalan yang menghubungkan setiap kotanya sebagai sisi (edge)
yang bobotnya (weight) adalah panjang dari jalan tersebut.
Ada beberapa cara untuk menyimpan graph di dalam sitem komputer. Struktur data
bergantung pada struktur graph dan algoritma yang digunakan untuk memmanipulasi
graph. Secara teori salah satu dari keduanya dapat dibedakan antara struktur list dan
matriks, tetapi dalam penggunaannya struktur terbaik yang sering digunakan adalah
kombinasi keduanya.

Graph tak berarah (undirected graph atau non-directed graph) : Urutan simpul
dalam sebuah busur tidak dipentingkan. Misal busur e1 dapat disebut busur AB atau
BA

Graph berarah (directed graph) : Urutan simpul mempunyai arti. Misal busur AB
adalah e1 sedangkan busur BA adalah e8.

Graph Berbobot (Weighted Graph) : Jika setiap busur mempunyai nilai yang
menyatakan hubungan antara 2 buah simpul, maka busur tersebut dinyatakan
memiliki bobot. Bobot sebuah busur dapat menyatakan panjang sebuah jalan dari 2
buah titik, jumlah rata-rata kendaraan perhari yang melalui sebuah jalan, dll.

Teknik Informatika Universitas Siliwangi

DAFTAR PUSTAKA
Bryon, Goffried. Programming with PASCAL. 1986. New York : Schaum Series
Inggriani Liem. Dasar Pemrograman (Bagian Pemrograman Prosedural). April
2007. Bandung : STEI - ITB
Munir, Rinaldi. Algoritma dan Pemrograman 2. 2001. Bandung : Informatika
Pranata, Antony. Algoritma dan Pemrograman. 2005. Yogyakarta : Graha Ilmu
Santosa, Insap. Dasar-dasar Pemrograman Pascal Teori dan Program Terapan.
Yogyakarta : Andi Offset
Wahid, Fathul. Dasar-dasar Algoritma dan Pemrograman. 2004. Yogyakarta : Andi
Offset