1. Catatan Kuliah Algoritma dan Struktur Data
1
Catatan Kuliah
PAM 282
Algoritma dan Struktur Data
Oleh
Narwen, M.Si
2. Catatan Kuliah Algoritma dan Struktur Data
2
BAB I PENDAHULUAN
PENGERTIAN STRUKTUR DATA.
Struktur data adalah cara menyimpan atau merepre-
sentasikan data atau informasi secara logik di dalam
komputer agar bisa dipakai secara efisien.
Sedangkan data atau informasi itu sendiri adalah
representasi kenyataan atau fakta dari dunia nyata.
Fakta atau keterangan tentang kenyataan dari dunia
nyata tersebut akan disimpan, direkam ataupun
direpresentasikan dalam bentuk tulisan, suara, gambar,
sinyal atau simbol-simbol.
3. Catatan Kuliah Algoritma dan Struktur Data
3
Secara garis besar tipe data dapat dikategorikan
menjadi dua kelompok, yaitu tipe data sederhana dan
tipe data terstruktur.
Tipe data sederhana dibedakan lagi atas tipe data
sederhana tunggal dan tipe data sederhana majemuk.
Contoh tipe data sederhana tunggal adalah integer,
real, boolean dan karakter. Sedangan tipe data
sederhana majemuk adalah string.
Tipe data terstruktur dibedakan juga atas struktur data
sederhana dan struktur data majemuk. Contoh struktur
data sederhana adalah array dan record. Sedangkan
struktur data majemuk dibedakan lagi atas struktur
data majemuk Linier dan non linier.
4. Catatan Kuliah Algoritma dan Struktur Data
4
Contoh dari struktur data majemuk linier adalah
stack (tumpukan), queue (antrian), list dan multi
list. Sedangkan contoh dari struktur data majemuk
non Linier adalah pohon biner dan graph.
Pemakaian struktur data yang tepat di dalam proses
pemrograman akan menghasilkan algoritma yang
lebih jelas dan tepat, sehingga menjadikan program
secara keseluruhan lebih efisien dan sederhana.
Struktur data yang ″standar″ yang biasanya
digunakan di bidang informatika adalah list linier
(linked List) dan variasinya, multi list, stack
(tumpukan), queue (antrian), tree (pohon) dan
graph (graf ).
5. Catatan Kuliah Algoritma dan Struktur Data
5
1. Integer.
Integer adalah bilangan yang tidak mengandung pecah-
an dan disajikan sebagai angka bulat. Integer memiliki
representasi sederhana dalam komputer. Komputer
memandang integer sebagai nilai dari serangkaian
bilangan biner. Namun komputer tidak memproses per
bit, tapi per blok bit yang umumnya terdiri dari 8 bit
(dikenal sebagai 1 byte atau binary eight).
Sebuah integer N disajikan dalam memory dengan ru-
musan N ← 2n-1 – 1, dengan n adalah jumlah bit dalam
memory dan satu bit paling kiri sebagai sign (tanda).
Bila bit tersebut bernilai 0, maka bilangannya adalah
positif. Sebaliknya bila bit tersebut bernilai 1 maka
bilangannya adalah negatif.
6. Catatan Kuliah Algoritma dan Struktur Data
6
Metode menggambarkan bilangan biner negatif.
1. Ones Complement Notation.
Bilangan negatif diperoleh dengan merubah setiap bit
secara keseluruhan ke dalam kelompok bit lawannya.
Contoh : (38)10 = 00100110. Maka (-38)10 = 11011001.
Masalah dengan metode ini, (0)10 dapat digambarkan
dengan 00000000 atau 1111111, pada hal untuk satu
bilangan bulat dilambangkan oleh satu bilangan biner.
2. Twos Complement Notation.
Bilangan negatif diperoleh dengan menambahkan 1 ke
metode ones complement notation.
7. Catatan Kuliah Algoritma dan Struktur Data
7
Contoh : (-38)10 = 11011001 (ones complement)
1 +
(-38)10 = 11011010 (twos complement)
Dengan metode ini (0)10 dapat digambarkan dengan
00000000 secara tunggal.
Tipe Integer pada pascal.
Tipe Jangkauan Ukuran
Shortint -128 .. 127 8 bit
Byte 0 .. 255 8 bit
Word 0 .. 65535 16 bit
Integer -32768 .. 32767 16 bit
Longint -2147483648 .. 2147483647 32 bit
8. Catatan Kuliah Algoritma dan Struktur Data
8
Operasi dalam integer.
1. Operasi uner, yaitu operasi yang hanya mempunyai
satu operand, yaitu - dan +.
2. Operasi biner, yaitu operasi yang mempunyai dua
operand, yaitu penambahan (+), pengurangan (-),
perkalian (*), pembagian bulat (div), dan sisa bagi
bulat (mod).
Bentuk umum dari tipe integer adalah:
Var <nama variabel> : <tipe integer>;
9. Catatan Kuliah Algoritma dan Struktur Data
9
Real.
Bilangan Real adalah gabungan dari bilangan Rasional
dengan Irrasional. Biasanya ditulis dalam bentuk
bilangan berkoma.
Dalam memori komputer, bilangan real memakai
sistem floating point, merupakan versi dari notasi
ilmiah atau scientific notation. Disini penyajian ter-
diri dari mantissa (pecahan) dan indeks (eksponen)
atau karakter, sehingga untuk bilangan real X dapat
dirumuskan sebagai X = M * RE, dengan M adalah
pecahan, R adalah radix dan E adalah eksponen.
Mantissa adalah bilangan bulat ≠ 0.
10. Catatan Kuliah Algoritma dan Struktur Data
Narwen, M.Si / Jurusan Matematika FMIPA Unand 10
Penulisan floating point dengan 32 bit biner terdiri
dari 24 bit merupakan mantissa dan 8 bit merupakan
eksponen. Bilangan negatif dari mantissa atau
eksponen menggunakan two complement notation.
Operasi dalam Real.
Semua operasi pada aritmatika dan trigonometri adalah
operasi-operasi yang dapat dilakukan terhadap bilang-
an real.
Bentuk umum dari tipe real adalah:
Var <nama variabel> : <tipe real>;
11. Catatan Kuliah Algoritma dan Struktur Data
11
Karakter dan String.
Karakter (Character) meliputi digit numerik, karakater
alfabetik dan karakter khusus. Sebuah karakter dalam
memori komputer akan menempati 8 bit biner yang
merepresentasikan bilangan positif. Misalkan ‘A’
dalam memori ditulis 0100 0001 atau (65)10 . Jadi kode
ASCII dari A adalah 65. ASCII = America Standart
Code for Information Interchange. Ada juga
mengembangkan EBCDIC = Extended Binary Coded
Decimal Interchange Code, dengan 8 bit biner.
String adalah barisan hingga simbol yang diambil dari
sejumlah hingga karakter. String S dengan panjang n
ditulis sebagai S ← a1 a2 a3… an.
12. Catatan Kuliah Algoritma dan Struktur Data
12
Operasi dalam Karakter dan String.
1. Concat [fungsi], digunakan untuk menggabungkan
dua atau lebih variable-variabel string.
2. Copy [fungsi], digunakan untuk mengambil satu atau
beberapa karakter dari sebuah string.
3. Delete [prosedur], digunakan untuk menghapus seba-
gian karakter dari sebuah string.
4. Insert [prosedur], digunakan untuk menyisipkan satu
atau beberapa karakter ke dalam sebuah string.
ConCat ( s1 <,s2,...,sn>: String) : String;
Copy(S:String;Index,Count:integer) : String;
Delete(S:String;Index,Count:integer);
Insert(source,S:string;Index:integer);
13. Catatan Kuliah Algoritma dan Struktur Data
13
5. Length [fungsi], digunakan untuk menghitung ba-
nyaknya karakter dalam suatu string.
6. Pos [fungsi], digunakan untuk mencari posisi sebuah
bagian string (substring) di dalam sebuah string.
7. Str [prosedur], digunakan untuk merubah nilai
numerik ke dalam nilai string.
8. Val [prosedur], digunakan untuk merubah nilai string
ke dalam nilai numerik.
Length(S:String): integer;
Pos(Substr,S:string): Byte;
Str(N:integer;S:string);
Val(S:String;N:Integer;P:byte);
14. Catatan Kuliah Algoritma dan Struktur Data
14
9. Upcase [fungsi], digunakan untuk memberikan huruf
kapital dari suatu argumen karakter.
Operasi transfer tipe data.
1. Chr [fungsi], digunakan untuk merubah nilai dari byte
ke bentuk karakter yang sesuai dengan kode ASCII.
2. Ord [fungsi], digunakan untuk merubah nilai suatu
variabel dari bentuk karakter ke bentuk longint.
Upcase(C:char): char;
Chr(x : byte): char;
Ord(C : char): longint;
15. Catatan Kuliah Algoritma dan Struktur Data
15
3. Round [fungsi], digunakan untuk membulatkan
data tipe real ke data tipe longint.
4. Trunc [fungsi], digunakan untuk membulatkan ke
bawah data tipe real ke data tipe longint.
Round(X:Real): Longint;
Trunc(X : Real): Longint;
16. Catatan Kuliah Algoritma dan Struktur Data
16
Record
Disusun oleh satu atau lebih field.Tiap field me-
nyimpan data dari tipe dasar tertentu atau dari tipe
bentukan lain yang sudah didefinisikan sebelumnya.
Nama record ditentukan oleh pemrogram. Record
disebut juga tipe terstruktur. Bentuk umum dari
record adalah:
Type <nama record> = record
field1 : type1;
field2 : type2;
...
fieldn : typen;
end;
17. Catatan Kuliah Algoritma dan Struktur Data
17
Contoh 1.
Jika variabel P dideklarasikan mempunyai tipe Titik
maka field yang mengacu pada P adalah P.x dan P.y.
Contoh 2.
Didefinisikan tipe terstruktur yang mewakili Jam yang
dinyatakan sebagai jam(hh), menit(mm) dan detik(ss),
maka cara menulis type Jam adalah:
Type Titik = record
x : real;
y : real;
end;
18. Catatan Kuliah Algoritma dan Struktur Data
18
Jika variabel J dideklarasikan mempunyai tipe Jam
maka cara mengacu tiap field adalah J.hh, J.mm dan
J.ss.
Operasi terhadap record adalah operasi per elemen,
yaitu assignment, baca dan tulis.
Akses elemen dari record adalah,
<nama record> . <nama filed>.
Type JAM = record
hh : integer; {0…23}
mm : integer; {0…59}
ss : integer; {0…59}
end;
19. Catatan Kuliah Algoritma dan Struktur Data
19
Array (Larik)
Array adalah struktur data statik yang menyimpan
sekumpulan elemen yang bertipe sama. Setiap
elemen diakses langsung melalui indeksnya. Indeks
dari array harus tipe data yang menyatakan keter-
urutan misalnya integer atau karakter. Banyaknya
elemen array harus sudah diketahui sebelum program
dieksekusi. Tipe elemen array dapat berupa tipe
sederhana, tipe terstruktur atau tipe array lainnya.
Nama lain array adalah Larik. Array satu dimensi
disebut dengan vektor dan array dua dimensi disebut
tabel.
20. Catatan Kuliah Algoritma dan Struktur Data
20
Bentuk umum dari array satu dimensi adalah:
Bentuk umum dari array dua dimensi adalah:
Tiga hal yang harus diperhatikan dalam mendeklara-
sikan suatu array yaitu,
1. Nama array,
2. Range dari Indeks,
3. Tipe data dari elemen array.
Elemen terkecil dari indeks array disebut batas bawah (l)
dan elemen terbesar disebut batas atas (u). Jumlah ele-
men dalam array disebut range, diberikan oleh
ord(u) - ord(l) + 1.
Type <nama array> = array[<indeks>] of <tipe>;
Type <nama array> = array[<indeks1>,<indeks2>] of <tipe>;
21. Catatan Kuliah Algoritma dan Struktur Data
21
Contoh 3.
Definisikan suatu array dengan nama LarikA yang
masing-masing elemennya adalah integer dan indeks-
nya dari -5 sampai dengan 200.
Jika variabel A dideklarasikan sebagai LarikA, maka
cara mengacu tiap elemennya adalah A[-5], A[-4], …,
A[200].
Contoh 4.
Jika variabel A dideklarasikan sebagai LarikB, maka
cara mengacu tiap elemennya adalah A[1,1],…
A[1,10], …, A[10,1], …, A[10,10].
Type LarikA = Array[-5..200] of integer;
Type LarikB = Array[1..10,1..10] of integer;
22. Catatan Kuliah Algoritma dan Struktur Data
22
Contoh 5.
Cara mengacu elemen TabMhs adalah TabMhs[2].
Nobp mengacu field Nobp dari elemen kedua dari
larik. Sedangkan Write(TabMhs[k].KodeMK);
adalah menuliskan field KodeMK dari elemen ke k
dari larik.
Const Nmaks = 100;
Type mahasiswa = Record
Nobp : integer;
Nama : string;
kodeMK : string;
nilai : char;
end;
var TabMhs : Array[1..Nmaks] of Mahasiswa;
23. Catatan Kuliah Algoritma dan Struktur Data
23
Operasi yang dapat dilakukan pada array adalah opera-
si per elemen untuk baca dan tulis, assignment, perhi-
tungan dan perbandingan yang diakses melalui indeks-
nya. Banyaknya indeks menentukan dimensi dari array
tersebut.
Set (Himpunan)
Set adalah kumpulan dari objek-objek. Dalam Pascal
objek tersebut harus mempunyai tipe dasar yang
sama. Tipe dasar ini adalah sembarang skalar atau
tipe enumerasi. Bentuk umum set adalah :
Type <nama himpunan> = Set of <tipe>;
24. Catatan Kuliah Algoritma dan Struktur Data
24
Keuntungan menggunakan Set adalah butuh tempat pe-
nyimpanan yang sedikit karena representasinya internal
dalam bit. Sedangkan kerugiannya adalah anggota dari
set tidak dapat dicetak dan hanya dapat dibaca keang-
gotaanya.
Operasi pada Set adalah assignment (:=), union (+),
inter-section (*), different (-), not equal (<>), equal
(=), inclution (<=), exclution (>=) dan in.
Contoh 6.
Jika variabel huruf dideklarasikan sebagai Alfabet,
maka salah satu elemennya adalah huruf := [‘a’,’d’].
Sedang himpunan kosong ditulis dengan [ ].
Type Alfabet = Set of Char;
25. Catatan Kuliah Algoritma dan Struktur Data
25
Latihan.
Buatlah dalam bahasa pascal :
1. Definisikan sebuah tipe terstruktur untuk menyatakan
data nasabah disebuah bank. Data nasabah terdiri atas
field Nomor Account, Nama Nasabah, Alamat Nasa-
bah, Kota Nasabah, dan Nomor Telpon Nasabah. Un-
tuk setiap field definisikan tipe data yang cocok.
2. Dari soal nomor1 buatlah program dalam bahasa pemrog-
raman berbasis bahasa Pascal, untuk memasukkan data
nasabah sebanyak N, dengan N diinputkan dari papan
ketik, kemudian menuliskan kembali semua data nasabah
dalam bentuk matrik. Petunjuk: Gunakan notasi pengu-
langan untuk menyelesaikan permasalahan tersebut.
26. Catatan Kuliah Algoritma dan Struktur Data
26
TIPE DATA ABSTRAK (ADT)
Tipe Data Abstrak (Abstract Data Type) adalah definisi
dari tipe dan sekumpulan primitif (operasi dasar) terha-
dap tipe tersebut.
Tipe diterjemahkan menjadi tipe terdefinisi dalam
bahasa pemrograman yang bersangkutan, misalnya
menjadi record dalam Pascal.
Primitif dalam konteks pemrograman prosedural,
diterjemahkan menjadi fungsi (function) dan
prosedur (procedure).
27. Catatan Kuliah Algoritma dan Struktur Data
27
Primitif dikelompokkan menjadi:
1. Konstruktor / Kreator, untuk pembentuk nilai
tipe. Biasanya namanya di awali dengan Make.
2. Selektor, untuk mengakses komponen tipe.
Biasanya namanya diawali dengan Get.
3. Prosedur Pengubah Nilai Komponen.
4. Validator komponen tipe, yang dipakai untuk me-
nguji apakah dapat membentuk tipe sesuai batasan.
5. Destruktor / Dealokator, yaitu untuk menghancur-
kan nilai objek, sekaligus memori penyimpannya.
6. Baca/tulis, untuk interface dengan input/output
device.
28. Catatan Kuliah Algoritma dan Struktur Data
28
7. Operator Relasional terhadap tipe tersebut untuk
mendefinisikan lebih besar, lebih kecil, sama dengan
dan sebagainya.
8. Aritmatika terhadap tipe tersebut, dalam pemrog-
raman biasanya hanya terdefinisi untuk bilangan
numerik.
9. Konversi dari tipe tersebut ke tipe dasar dan seba-
liknya.
29. Catatan Kuliah Algoritma dan Struktur Data
29
Tipe Data Abstrak biasanya diimplementasi menjadi dua
buah modul, yaitu:
1. Definisi/spesifikasi type dan primitif
- Spesifikasi type sesuai dengan bahasa yang
dipakai.
- Spesifikasi dari primitif sesuai dengan kaidah
dalam konteks prosedural, yaitu:
a. Fungsi: nama, domain, range, dan pre
kondisi jika ada.
b. Prosedur: Keadaan Awal, Keadaan Akhir
dan proses yang dilakukan.
2. Body/realisasi dari primitif, berupa kode program
dalam bahasa yang bersangkutan. Realisasi fungsi dan
prosedur harus sedapat mungkin memanfaatkan Selek-
tor dan Konstruktor.