KATA PENGANTAR
Yang Maha Kuasa atas limpahan Rahmat-Nya sehingga buku saduran dengan
Buku ini disusun hanya untuk kalangan sendiri yaitu UPT Pelatihan
Penulis juga mengucapkan banyak terima kasih atas dukungan semua pihak yang
telah mendukung pembuatan buku ini sehingga buku ini dapat terselesaikan.
Penulis,
DAFTAR ISI
KATA PENGANTAR..........................................................................i
DAFTAR ISI...................................................................................ii
BAB I PENDAHULUAN...................................................................1
1.1 Latar Belakang..........................................................................1
1.2 Tujuan.....................................................................................1
BAB II ALGORITMA & STRUKTUR DATA........................................3
2.1 Paradigma Rekayasa Perangkat Lunak.......................................3
2.2 Algoritma dan Struktur Data......................................................5
2.2.1 Algoritma..............................................................................5
2.2.2 Struktur Data.........................................................................7
2.3 Tujuan Pembentukan Struktur Data..........................................10
BAB III ARRAY DAN MATRIKS (LARIK)......................................15
3.1 Definisi Array..........................................................................15
3.2 Kamus Data Array...................................................................16
3.3 Pemrosesan Array...................................................................16
3.4 Panjang Array.........................................................................18
3.5 Pengalamatan Array dalam Memory.........................................21
3.6 Traversing (Pengunjungan Array).............................................23
3.7 Menyisipkan Dan Menghapus Array..........................................24
3.8 Sorting Array..........................................................................26
3.9 Pencarian...............................................................................29
3.10 Definisi Matriks.......................................................................30
3.11 Kamus Data Matriks................................................................31
3.12 Pemrosesan Matriks................................................................31
3.13 Pengalamatan Matriks.............................................................34
BAB IV STACK (TUMPUKAN).......................................................38
4.1 Definisi Stack..........................................................................38
4.2 Representasi Lojik...................................................................39
4.3 Traversal dan Search...............................................................39
ini.
I.2 Tujuan
digunakan adalah :
1. Daur Hidup Klasik (The Classic Life Cycle atau Waterfall), terdiri dari
a. Pengumpulan kebutuhan
b. Analisa kebutuhan
c. Desain
d. Pemrograman
e. Pengujian
f. Pemeliharaan
S y s te m
E n g in e r in g
A n a ly s is
D e s a in
C ode
T e s t in g
M a in t e n a n c e
b. Desain Cepat
c. Bangun Prototipe
d. Evaluasi prototipe
P ro to ty p in g
S ta rt
R e q u ir e m e n t s
S to p g a t h e r in g &
s n a l y s is
M odel E N g in e e r Q u ic k
P ro d u c t D e s ig n
P a p e r p r o t o t ip e
w o r k i n g p r o t i t ip e
E x i s t in g P r o g r a m
R e f in in g B u li d
P r o t o t ip e P r o t o t ip e
C u s to m e r
E v a lu a t io n
ulangi langkah a.
R is k a n a l is y s b a s e d o n
I n it i a l r e q u r e m e n t s
in it i a l r e q u ir e m e n t s
g a t h e r in g a n d
p r o j e c t p la n n in g R is k a n a lis y s b a s e d o n
c u s t o m e r r e a c t io n
P la n n i n g b a s e d - o n
c o s tu m e r c o m m e n ts
T o w a r d a c o m p le t e d
s y s te m
C o s t u m e r e v a l u a t io n
I n it ia l s o f t w a r e p r o t o t ip e
N e x t le v e l p r o t o t ip e
E n g in e e r e d s y s t e m
C o s tu m e r
e v a lu a tio n E n g in e e r in g
perlu mempelajari struktur data dan algoritma? Untuk labih jelasnya akan
II.2.1 Algoritma
pemrograman.
data.
Contoh :
terurut (sorting)
tersebut?
elemen data
solusi masalah
pemrograman
sama
yaitu :
1. Domain D,d D
baru
tumpukan.
string, int, dll. Serta struktur data lainnya yang belum ada dapat dibentuk
TREE, GRAF.
1. Array
Struktur data ini termasuk yang paling mudah digunakan. Ada yang terdiri
darti satu dimensi (array linier), dua dimensi (matriks) dan multidimensi.
1 7 18 03 69 24 08 70
1 2 3 4 5 6 7 8
2. Link List
Link list adalah struktur data yang diproses melalui alamat kepala
(awal). Info adalah tempat untuk datanya, Next adalah untuk menyimpan
s A B C
q X
3. Tree
B C D
E F
4. Stack
hanya pada satu ujung yaitu pada posisi TOP-nya. Struktur data ini
69 T O P
03
18
5. Queue
Struktur data ini diproses dari dua ujung, penambahan pada posisi
karcis di loket.
A n tr ia n d e n g a n tig a e le m e n ( 1 8 , 0 3 , 6 9 )
p o s is i d e p a n a d a la h 1 d a n p o s is i
b e la k a n g a d a la h 3
18 03 69
B e la k a n g D ep a n
6. Graf
Struktur data graf mirip dengan struktur data tree, hanya saja
hubungan antara data tidak selalu hubungan hirarki. Contoh : jalan yang
6 2
1
T S
4
5
3 dengan nilai 100, maka cara mengisinya adalah A[3] 100. contoh
berikut ini :
1 2 3 4 5 6 7 8
Elemen array : A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]
Indek array : 1 2 3 4 5 6 7 8
Mengisi elemen array : A[3] 100
Kerugiannya :
digunakan
KAMUS
Nama: array [1..400] of string {array dengan tipe data string}
Panjang : array [a..e] of real {array dengan tipe data real}
Type TITIK : record <X:real, Y:real>
Kurva: array[0..30] of Titik {array dengan tipe data record}
1. elemen array harus memiliki tipe data yang sama atau sejenis
integer.
III.3.1.1.2 ALGORITMA
For Indeks 1 to N do
III.3.1.1.2.1 PROSES ARRAY
EndFor
Program INISIALISASI
KAMUS
Cons : N=10 {jumlah elemen array}
Indeks : integer
A : array[1..N] of integer {deklarasi array A dengan tipe integer}
III.3.1.1.3 ALGORITMA
For Indeks 1 to N do
III.3.1.1.3.1 A[Indeks] 0 {proses inisialisasi}
EndFor
KAMUS LOKAL
Indeks : Integer
ALGORITMA
For Indeks 1 to N do
A[Indeks] 0
EndFor
Program Mengisi_elemen
KAMUS
Cons : N=10 {jumlah elemen array}
Indeks : integer
A : array[1..N] of integer {deklarasi array A dengan tipe integer}
III.3.1.1.4 ALGORITMA
For Indeks 1 to N do
III.3.1.1.4.1 Input A[Indeks] {jika ingin mencetak ganti dengan output}
EndFor
kumpulan data yang permanen. Akat tetapi ukuran data yang didalam
struktur selalu berubah, maka struktur data Link List akan lebih berguna.
bilangan
berhimpitan
Panjang (L) = UB – LB + 1
dimana
UB = upper bound (indek terbesar)
LB = lower bound (indek terkecil)
Atau
L = BA – BB + 1
Ket : L = Banyaknya Elemen array
BB = Batas Bawah
BA = Batas Atas
Jika BB = 1 L = BA
1 BB
2
3
4
n BA
DATA[6] = 156.
DATA
DATA
1 247
247 56 429 135 87 156 2 56
1 2 3 4 5 6 3 429
pengenalan algoritma dan struktur data
4 135 19
(array, matriks dan stack)
5 87
6 156
2. Seorang pedagang mobil menggunakan array untuk menyimpan
LB = 1994
UP = 2005
Jadi pajang = UB – LB + 1
= 2005 – 1994 + 1
= 12
Kamus
JUAL : array [1994..2005] of integer
= 2005 – 2000+1
=6
Jadi array AUTO terdiri dari 6 elemen dan indeksnya mulai dari
menjadi :
untuk array secara statik, selama kompilasi program. Ukuran dari array
dinamik.
Dimana :
Contoh :
LOK(JUAL[1994]) = 100
LOK(JUAL[1995]) = 104
LOK(JUAL[1996]) = 108
berikut :
maka
LOC(AUTO[2000]) = 200
banyaknya elemen A dengan sifat tertentu setiap elemen tepat satu kali.
K := BB
WHILE K BA atau FOR K = BB TO BA
DO WRITE LA[K]
WRITE LA[K] EXIT
K := K + 1
EWHILE
EXIT
Contoh:
Dari Array AUTO :
a. Cari tahun NUM (Jumlah) tempat data mobil yang terjual lebih dari
300 disimpan
NUM := 0
FOR K= 2000 TO 2005
IF AUTO[K] > 300 THEN
WRITE AUTO[K]
NUM:=NUM + 1
EXIT
b. Cetak setiap tahun dan jumlah mobil yang terjual
FOR K = 2000 TO 1984
WRITE K, AUTO[K]
EXIT
lain ke A.
elemen A.
terakhir tidak ada kesulitan, tetapi setelah menghapus array yang berada
Contoh :
TES[3]. Bila X adalah nilai untuk TES[4] dan TES[5] akan ditambahkan
elemen lagi. Sekarang array telah penuh dan tidak dapat menambahkan
1. Misalkan ada array NAMA dengan 8 lokasi memori yang berisi 5 elemen urut
menurut abjad.
NAMA NAMA NAMA NAMA
1 Bita 1 Bita 1 Bita 1 Bita
2 Dul 2 Dul 2 Dul 2 Jono
3 Jono 3 Jono 3 Jono 3 Rita
4 Sarip 4 Rita 4 Rita 4 Sarip
5 Wito 5 Sarip 5 Sarip 5 Tono
6 6 Wito 6 Tono 6 Wito
7 7 7 Wito 7
8 8 8 8
pengenalan algoritma dan struktur data
24
(array, matriks dan stack)
1. Rita akan disisip
sebagai berikut :
Contoh :
19, 2, 7, 13, 5, 16
Bubble Sort
Langkah ke-1
- Bandingkan A[1] dengan A[2] dan susun sehingga A[1] < A[2]
- Bandingkan A[2] dengan A[3] dan susun sehingga A[2] < A[3]
Langkah ke-2
- Dst
Langkah ke(n-1)
- Bandingkan A[1] dengan A[2] dan susun sehingga A[1] < A[2]
naik.
Contoh :
Step 1 : Step = K – 1 = 5 – 1= 4
D[1] > D[2] T
ALGORITMANYA :
30 60 5 25 50
BUBBLE (DATA,N)
D[2] > D[3] Y FOR K= 1 to N - 1 DO
PTR : = 1
WHILE PTR <= N – K DO
30 5 60 25 50
IF DATA [PTR] > DATA[PTR+1] THEN
X:= DATA[PTR]
D[3] > D[4] Y DATA[PTR] := DATA[PTR+1]
D[1] D[3] D[4] D[2] D[5] DATA[PTR+1] := X
30 5 25 60 50 ENDIF
PTR := PTR + 1
EWHILE
D[4] > D[5] Y
30 5 25 50 60
Step 2 :
D[1] > D[2] Y
5 30 25 50 60
5 25 30 50 60
D[4] > D[5] Y
5 25 30 50 60
Step 3 :
D[1] > D[2] Y
5 25 30 50 60
5 25 30 50 60
5 25 30 50 60
5 25 30 50 60
Step 4 :
D[1] > D[2] Y
5 25 30 50 60
5 25 30 50 60
5 25 30 50 60
5 25 30 50 60
III.9 Pencarian
a. Linier Search
b. Binary Search
ALGORITMA
BINARY (DATA, BB,BA,ITEM,LOC)
BEG:=BB
END:=BA
MID:=INT((BEG+END)/2)
WHILE (BEG<=END) AND (DATA[MID]<>ITEMP)
DO
IF ITEM < DATA[MID] THEN
END:=MID – 1
ELSE
BEG:=MID+1
EWHILE
IF DATA[MID] = ITEM THEN
LOC:=MID
ELSE
LOC:=NOL
ENDIF
Berbeda dengan array linier, pada matriks indeks terdiri dari dua bagian
yaitu indeks baris dan indeks kolom. Setiap elemen matriks dapat diakses
melalui indeksnya.
A 1 a b c
2 d e f
1 2 3
Kerugian :
KAMUS
A : aray [1..2, 1..3] of string { ukuran matriks 2x3 bertipe string
Nilai : array [1..50, 1..4] og real
Type Wakru : Record
< JJ : Integer[0..23]
MM : integer[0..59]
DD : integer[0..59]>
Absensi : array[1..100, 1..2] of waktu
cara, yaitu :
Program proses
KAMUS
Cons : M = 2
Cons : N = 3
Baris, Kolom : integer
A : array [1..M, 1..N] of integer
ALGORITMA 1
For Baris 1 to M do
For Kolom 1 to N do
PROSES MATRIKS
Endfor
Endfor
ALGORITMA 2
For Kolom 1 to N do
For Baris 1 to M do
PROSES MATRIKS
Endfor
Endfor
pemrosesan baris demi baris “For Baris” lebih dahulu diikuti “For Kolom”,
1. Menginisialisasi matriks
Program inisialisasi
KAMUS
Cons : M = 2
Cons : N = 3
Baris, Kolom : integer
A : array [1..M, 1..N] of integer
ALGORITMA
For Baris 1 to M do
For Kolom 1 to N do
A[Baris,Kolom] 0 {baris demi baris}
Endfor
Endfor
Program proses
{matriks A[M,P], B[P,N] dan hasil perkalian disimpan pada matriks C[M,N])
KAMUS
Const : M = 2
Const : N = 3
Const : P = 2
Baris, Kolom, K : integer
A : array [1..M, 1..P] of integer
B : array [1..P, 1..N] of integer
C : array [1..M, 1..N] of integer
ALGORITMA
For Baris 1 to M do
For Kolom 1 to N do
C[Baris,Kolom] 0
For K 1 to P do
C[Baris,Kolom] C[Baris,Kolom] + A[Baris,K] + B[K, Kolom]
Endfor
Endfor
Endfor
Program proses
KAMUS
ALGORITMA
For Baris 1 to M do
For Kolom 1 to N do
C[Baris,Kolom] A[Baris,Kolom] + B[Baris, Kolom]
Endfor
Endfor
1 2 3
1 A[1,1] A[1,2] A[1,3]
2 A[2,1] A[2,3] A[2,3]
major
komputer secara :
indeks tertentu :
Ket :
X[1,1] = 400
MAJOR adalah :
1 2 3 4 5 6
1 400 404 408 412 416 420
2 424 428 …
3Alamat
448 elemen pertama
4 …
5
6
7
8
64 = 464
188 = 588
X[1,1] = 400
1 2 3 4 5 6
1 400 432 464 …
2 404 436 …
3 408 …
4 412
5 416
6 420
7 424
8 428
136 = 536
188 = 588
tertentu, yaitu :
kata lain, elemen yang ditambahkan paling akhir akan menjadi elemen
berikut ini :
- pemanggilan prosedur
- rekursivitas
berikut :
traversal seperti pada list linier biasa dengan mengganti First dengan Top.
1. IsStackEmpty
return(Top == NIL);
}
2. CreateEmptyStack
*Top = NIL;
}
3. Push
address P;
4. Pop
address P;
P = *Top;
*Top = Next(P);
Next(P) = NIL;
*X = Info(P);
// Dealokasi P
}
#define NMax 99
#define NIL -1 // alamat tak terdefinisi
// di dalam main
address Top;
InfoType TabElmt[NMax + 1];
- Next(P) menjadi P - 1
lajur linier. Kumpulan elemen data hanya boleh diakses pada satu lokasi
saja yaitu pada posisi ATAS (TOP) stack. Stack digunakan dalam algoritma
bertipe data integer, real, record dalam bentuk sederhan atau terstruktur.
elemen baru (PUSH) dan penghapusan elemen dari stack (POP). Contoh
pada PDA (Push Down Automaton). Sistem pada pengaksesan pada stack
terakhir masuk itu yang akan pertama dikeluarkan dari stack. Ilustrai stack
Contoh stack kosong, stack dengan satu elemen dan stack dengan
n elemen.
D
C
TOP=0 TOP=1 B TOP=N
A A
menghapus satu elemen hanya bisa dilakukan pada satu ujung yang
Contoh :
A B C D E F
TOP
1 2 3 4 5 6
penyisipan dan penghapusan hanya terjadi pada TOP, artinya E tidak bisa
Contoh :
menjadi :
C
B B B
A A A A A
struktur data ini, salah satunya adalah dengan menggunakan tata susunan
linier (larik) dan sebuah variabel yang dikemas dalam tipe data record.
Kamus Data
Const
MAKSTUM = 80; {kapasitas maksimal stack)
Type
Stack adalah struktur data bertipe rocord yang terdiri dari field
elemen bertpie array dengan indeks dari 1 sampai dengan MaksTum, atas,
Push dan Pop. Operasi dasar yang dapat diterapkan adalah sebagai
berikut :
elemenkosong
Apa yang terjadi bila dilakukan POP (Sebanyak dua kali lagi ?
Underflow. Artinya stack kosong tidak ada elemen yang dapat diambil.
Apa yang terjadi jika dilakukan PUSH (’x’S) sebanyak sepuluh kali, jika
kapasitas stack 5 lagi ? Overflow, artinya stack penuh tidak ada elemen
apakah ada elemen yang hendak dikeluarkan atau tidak. Jika tidak ada
maka UNDERFLOW.
dalam bentuk array stack. Pointer TOP yang menyatakan lokasi elemen
X Y Z
6 = MAXSTK
1 2 3 4 5 6
3 = TOP
TOP = 3 Stack mempunyai 3 elemen
Maxstk = 8
ada ruang kosong atau tidak, jika tidak ada maka akan oferflow, untuk
mengambil satu elemen dari stack harus dicek apakah stack mempunyai
Contoh :
2). TOP = 3 + 1 = 4
4). Return
2). ITEM = 2
4). Return
dari Stack.
77, 90, 40, 60, 99, 22, 88, (66) dimulai dari bilangan terakhir menuju
(22), 33, 11, 55, 77, 90, 40, 60, 99, (44), 88, 66
kemudian mulai dari 22 kekanan kita cari elemen yang lebih besar dari 44
22, 33, 11, (44), 77, 90, 40, 60, 99, (55), 88, 66
mulai dari 55 kekiri, kita cari elemen yang lebih kecil dan kita tukar,
22, 33, 11, (40), 77, 90, (44), 60, 99, (55), 88, 66
22, 33, 11, 40, (44), 90, (77), 60, 99, (55), 88, 66
Ket :
dan semua bilangan yang lebih kecil dari 44 telah berada disebelah kiri
(44) dan semua bilangan yang lebih dari (44) berada disebelah kanan
(44). Berarti (44) berada pada posisi yang benar. Pengurutan berikutnya
Karena dalam satu waktu kita hanya memproses satu sub list, kita
harus bisa menjejaki sub list yang lain untuk proses berikutnya yang bisa
tersebut. Jadi alamat dari elemen pertama dan terakhir dari setiap sub list
hanya sesudah nilai batas suatu sub list diambil dari stack.
Contoh :
Dari List A diatas dengan n=12, nilai batas adalah Lower = 1 dan
Upper = 12. kita ambil nilai I dan 2 stac dari sehingga lower=0 dan upper
=0.
Untuk melakukan langkah reduksi lagi kita ambil nilai TOP 6 dan
Lower = 1 Upper =4
sehingga menjadi :
Lower=1, 6 Upper=4,10
Proses berhenti jika stack sudah tidak ada sublist uantuk diproses.
pengerjaannya adalah :
3. perkalian, pembagian : *, /
4. Penjumlahan, pengurangan : +, -
Contoh :
(A – B) * (C + D)
Prefix atau posfix saat kompilasi. Notasi prefix maupun postfix akan lebih
notasi lainnya :
2. INFIX ke POSTFIX :
5. POSTFIX ke INFIX : A B C D * / -
6. POSTFIX ke PREFIX
2 4 3 * - 1 +
IV.10.1.1.1.1.1.1
IV.10.1.1.1.1.1.2 Op
3
2
IV.10.1.1.1.1.1.2.1 O IV.10.1.1.1.1.1.2.2 O
4 4 Op1 12 p 1 p IV.10
2 2
- - -
2 2 2 2 Op1 Op1
10 10 9
1 3 4 * 2 - +
IV.10.1.1.1.1.1.3
IV.10.1.1.1.1.1.4 Op IV.10.1.1.1.1.1.5 Op
4 2
1 1
IV.10.1.1.1.1.1.5.1 O
- IV.10.1.1.1.1.1.6 Op
3 3 Op2 12 p 12 Op2 IV.10.1.1.1
10 1
1
-
1 1 1 1 Op2 1 1 Op2
9
Kondisi ini disebut sebagai base. Dengan demikian badan fungsi akan
n! = n * (n-1)*(n-2)*…*3*2*1
n!=n*(n-1) !
Dengan
(n-1) ! = (n-1) * (n-2) !
dan (n-2) ! = (n-2) * (n=3) !
x) !, dengan nilai x selalu berkurang 1 dan baru akan berhenti bila (n-
x)=1.
Tanpa Rekursif
Fact :=1;
For i := 1 to n do
Fact :=Fact* i ;
End
Dengan Rekursif
Function fact(n:integer):integer
Begin
Yogyakarta.
Dwi Sanjaya, 2005. Asyiknya Belajar Struktur Data Di Planet C++, Elex