modul algoritma & struktur data

50
M O D U L ALGORITMA DAN STRUKTUR DATA TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS SILIWANGI Jl. Siliwangi No. 24 Tasikmalaya Kotak Pos 164 Tlp. (0265) 323537 E-Mail : [email protected]; URL : http://if.unsil.ac.id/

Upload: toras-salom-lubis

Post on 12-Jan-2016

127 views

Category:

Documents


31 download

DESCRIPTION

Modul Algoritma & Struktur Data

TRANSCRIPT

Page 1: Modul Algoritma & Struktur Data

M O D U L

ALGORITMA DAN STRUKTUR DATA

TEKNIK INFORMATIKA

FAKULTAS TEKNIK UNIVERSITAS SILIWANGI

Jl. Siliwangi No. 24 Tasikmalaya Kotak Pos 164 Tlp. (0265) 323537

E-Mail : [email protected]; URL : http://if.unsil.ac.id/

Page 2: Modul Algoritma & Struktur Data

Teknik Informatika Universitas Siliwangi

Page 3: Modul Algoritma & Struktur Data

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 Nama File : text

contoh : 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

Page 4: Modul Algoritma & Struktur Data

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 : Assign(F, ‘data.txt’); {data.txt adalah contoh nama file

fisik}

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}

Page 5: Modul Algoritma & Struktur Data

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;

Page 6: Modul Algoritma & Struktur Data

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

Page 7: Modul Algoritma & Struktur 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;

Page 8: Modul Algoritma & Struktur Data

Teknik Informatika Universitas Siliwangi

type

DataMhs = record

NIM : longint;

Nama: string[25];

IP : real;

end;

var

MSiswa : DataMhs; {variable yang bertipe record DataMhs} Mhs : File of DataMhs; {nama file sekuensial} answer : char;

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);

Page 9: Modul Algoritma & Struktur Data

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++

Page 10: Modul Algoritma & Struktur Data

Teknik Informatika Universitas Siliwangi

2 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

Page 11: Modul Algoritma & Struktur Data

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 INC

{pencacah dimajukan satu

IS : CI = harga

FS : CI = 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

Page 12: Modul Algoritma & Struktur Data

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 = ’.’ jika CC =

’.’ maka lampu EOP akan menyala}

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) X

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

Page 13: Modul Algoritma & Struktur Data

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.

Page 14: Modul Algoritma & Struktur Data

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

Page 15: Modul Algoritma & Struktur Data

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)

Page 16: Modul Algoritma & Struktur Data

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 L F A I T B E A U .

Y A .

T .

.

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

Page 17: Modul Algoritma & Struktur Data

Teknik Informatika Universitas Siliwangi

ADV; INC {CC=’L’,CI=1} INC;ADV

ADV; INC {CC=’ ’,CI=2} INC;ADV

ADV; INC {CC=’F’,CI=3} INC;ADV

ADV; INC {CC=’A’,CI=4} INC;ADV

ADV; INC {CC=’I’,CI=5} INC;ADV

ADV; INC {CC=’T’,CI=6} INC;ADV

ADV; INC {CC=’ ’,CI=7} INC;ADV

ADV; INC {CC=’B’,CI=8} INC;ADV

ADV; INC {CC=’E’,CI=9} INC;ADV

ADV; INC {CC=’A’,CI=10} INC;ADV

ADV; INC {CC=’U’,CI=11} INC;ADV

ADV; INC {CC=’.’,CI=12} INC;ADV

2) START; RESET { CC=’Y’, CI = 0}

ADV; INC {CC=’A’,CI=1}

ADV; INC {CC=’ ’,CI=2}

ADV; INC {CC=’ ’,CI=3}

ADV; INC {CC=’.’,CI=4}

3) START; RESET { CC=’T’, CI = 0}

ADV; INC {CC=’.’,CI=1}

4) START; RESET { 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 N F O R M A T I K A .

F T U N S I L .

T A S I K .

.

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

Page 18: Modul Algoritma & Struktur Data

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

Page 19: Modul Algoritma & Struktur Data

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) n! = 1 , jika n = 0 {komponen basis}

(ii) n! = n x (n-1)! , 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

Page 20: Modul Algoritma & Struktur Data

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.

Page 21: Modul Algoritma & Struktur Data

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

Page 22: Modul Algoritma & Struktur Data

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,

Page 23: Modul Algoritma & Struktur Data

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

Page 24: Modul Algoritma & Struktur Data

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

Page 25: Modul Algoritma & Struktur Data

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

Page 26: Modul Algoritma & Struktur Data

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 operasi‐operasi 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 elemen‐elemen 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;

Page 27: Modul Algoritma & Struktur Data

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 := Top‐1; { 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 operasi‐operasi 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;

Page 28: Modul Algoritma & Struktur Data

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 elemen‐elemen 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;

Page 29: Modul Algoritma & Struktur Data

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;

Page 30: Modul Algoritma & Struktur Data

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.

Page 31: Modul Algoritma & Struktur Data

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;

Page 32: Modul Algoritma & Struktur Data

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 Tail‐1 do

Queue[I] := Queue[I+1];

Dec(Tail);

End;

End;

Page 33: Modul Algoritma & Struktur Data

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 seakan‐akan 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 = Head then

Empty := true

Else

Empty := False;

End;

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

Page 34: Modul Algoritma & Struktur Data

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;

Page 35: Modul Algoritma & Struktur Data

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 mula‐mula 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;

Page 36: Modul Algoritma & Struktur Data

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.

Page 37: Modul Algoritma & Struktur Data

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 sehari‐hari. 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);

Page 38: Modul Algoritma & Struktur Data

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 procedure‐procedure 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;

Page 39: Modul Algoritma & Struktur Data

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 elemen yang ditunjuk oleh now. Elemen tersebut lalu

ditampung pada 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;

Page 40: Modul Algoritma & Struktur Data

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 data‐data 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;

Page 41: Modul Algoritma & Struktur Data

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;

Page 42: Modul Algoritma & Struktur Data

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;

Page 43: Modul Algoritma & Struktur Data

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

Page 44: Modul Algoritma & Struktur Data

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

Page 45: Modul Algoritma & Struktur Data

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

Page 46: Modul Algoritma & Struktur Data

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

Page 47: Modul Algoritma & Struktur Data

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.

Page 48: Modul Algoritma & Struktur Data

Teknik Informatika Universitas Siliwangi

Characteristic: Mengetahui karakteristik dari suatu tree, yakni : size, height, serta

average dari lengthnya. Tree tidak boleh kosong.

Traverse : Mengunjungi seluruh node‐node pada tree, masing‐masing

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.

Page 49: Modul Algoritma & Struktur Data

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.

Page 50: Modul Algoritma & Struktur Data

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