Professional Documents
Culture Documents
SASARAN : 1. Meningkatkan pehamanan pengetahuan tentang teori dasar struktur data dan Penanganan data 2. Meningkatakan pembuatan algoritma dan penggunaan struktur data dalam pemrograman
MATERI : 1. Konsep Tipe data dan definisi data 2. Array 3. Stack 4. Queue 5. Link list 6. Struktur data linear 7. Struktur data non linear 8. Sorting 9. Searching 10. Hashing
REFERENSI : Ir. Wihartinin, M.Eng Ir. Hari Soetanto, MSc Teddy Marcus Zakaria etc
DATA
SEDERHANA
TERSTRUKTUR
POINTER
2. Tipe data boolean : Mempunyai 2 nilai yaitu True and False Operator && II I And Or Not Maksud
3. ASSIGNMENT OPERATOR : (:=) Gunanya untuk memberikan nilai pada suatu identifier. Identifier adalah penciri atau pengenal variabel. Contoh : x:=A + B 4. RELATIONAL OPERATOR : ( =, <, >, >=, <=, < > ) Gunanya untuk membandingkan dua nilai identifier. Contoh : A > B
5. UNARY OPERATOR : (+,-) Untuk memberikan suatu tanda pada nilai identifier. Contoh : -3
6. STRING OPERATOR : (+ ) Gunanya untuk menggabungkan dua buah string Contoh : sangat + jauh = sangat jauh 7. SET OPERATOR : Gunanya untuk operasi melibatkan set atau himpunan, dimana : + Berarti union ( contoh A + B ) - Berarti set difference ( contoh yang tidak ada di set A ) * Perkalian himpunan ( set A di set B ) 8. Binary operator : ( *, div, /, mod, +, - ) , lihat tabel di bawah ini :
OPERATOR
PENULISAN
HASIL
A*B
div /
A DIV B A/B
mod
A mod B
A+B
A-B
D. OPERATOR PRECEDENCE : Adalah tingkat atau urutan pemakaian dari operator bila operator tersebut dipakai bersama-sama. 1. ( ) 2. NOT 3. *,/, DIV, MOD, AND 4. +,-, OR 5. =, < >, <=, >=, IN, >, <
Nama array
2. Array dimensi dua artinya : array yang dimensinya terdiri dari lebih dari satu. Array dimensi dua mewakili sutu bentuk tabel atau matriks yang index pertama dapat menunjukkan baris dan index kedua kolom. Contoh : X := array of [1..3, 1..2] of integer;
baris
kolom
Keuntungan struktur data array : 1. Paling mudah pengoperasiannya 2. Ekonomis dalam pemakaian memori, bila semua elemen terisi 3. Akses ke setiap elemen memerlukan waktu yang sama.
B. KAMUS DATA ARRAY : Sebelum elemen array dapat digunakan , perlu didefinisikan dahulu dalam kamus Data, contoh : Nama : array [1..400] of char Panjang : array [1..100] of integer X=array [1..2,1..3] of integer; C. PANJANG ARRAY : Untuk menghitung jumlah elemen suatu array dapat dihitung dengan rumus : PANJANG=(UB LB) + 1, dimana UB = upper bound (index terbesar) LB = lower bound (index terkecil) Contoh : Seoranng pedagang mobil menggunakan array untuk menyimpan data penjualan Dari tahun 1994 sampai dengan tahun 2005. berapa panjang (jumlah elemen) larik yang disediakan .? Jawab = PANJANG = (2005 1994) + 1 = 1 Artinya : jumlah elemen array yang diperlukan sebanyak 12 buah. Penulisan kamus datanya =jual:array[1994..2005]of integer;
D. PENGALAMATAN ARRAY : Penyimpanan elemen array di dalam memory komputer disusun berurutan sehingga komputer tidak perlu menentukan setiap elemen array tetapi cukup menyimpan alamat awal/pertamanya. Rumus : LOK(LA[K])= AWAL(LA) + W(K-LB) LOK(LA[K])= lokasi elemen larik dengan index K, yang dicari K = index larik yang dicari AWAL(LA) = lokasi awal dari data larik W= jumlah byte untuk menyimpan 1 elemen larik LB = lower bound/batas bawah Contoh : Misalkan AWAL(jual) =100 dan W =4, maka LOK(JUAL[1994])=100 LOK(JUAL[19995]=104 LOK(JUAL[1996]=108, berapa lokasi JUAL[2005] ? Jawab = LOK(LA[K])=100+4x(2005-1994)=140
Untuk menentukan lokasi elemen matriks , sbb : Contoh ( 1 ): Diketahui : x[1,1] = 400 Lebar (Width) : 1 elemen= 4 byte Maka untuk mencari alamat setiap elemen jika pengalamatan dengan ROM = Untuk alamat X[3,5]= 400 + ((14) x 4) =456, caranya : Untuk alamat x[8,6]=400 + ((47) x 4) = 588 1 1 2 400 424 2 404 428 Alamat elemen pertama Angka 14 dari loncatan x[1,1] ke x[3,5] 3 408 4 412 5 416 6 420
3 4
5 6 7 8
448
Maka untuk mencari alamat setiap elemen jika pengalamatan dengan COM = Untuk alamat X[3,5]= 400 + ((14) x 4) =456 Untuk alamat X[8,6] = 400 + ((47) x 4) =588
2 432 436
3 464
Contoh (2): Multidimensional array A(4:5 , 2:4, 1:2, 3:4) alamat elemen pertama x atau
A[4,2,1,3], A[4,2,1,4], A[4,2,2,3], A[4,2,2,4] A[4,3,1,3], A[4,3,1,4], A[4,3,2,3], A[4,3,2,4] A[4,4,1,3], A[4,4,1,4], A[4,4,2,3], A[4,4,2,4] A[5,2,1,3], A[5,2,1,4}, A[5,2,2,3], A[5,2,2,4] A[5,3,1,3], A[5,3,1,4], A[5,3,2,3], A[5,3,2,4} A[5,4,1,3], A[5,4,1,4},A[5,4,2,3], A[5,4,2,4]
Jumlah elemen = (5-4+1) , (4-2+1), (2-1+1), (4-3+1) = = 2,3,2,2 =24
Alamat A[5,2,1,4] = A[4,2,1,3] +{ [5-4).3.2.2 + (2-2).2.2+(1-1).2+ (4-3).1}1 =1800 H + {12+0+0+1}1 =1800 H +13 =180DH
program array_dimensi1; uses wincrt; var i, n : integer; total, rata_rata : real; x : array [byte] of real;
begin clrscr;
write ('masukkan data = ');readln(n); total :=0; for i:= 1 to n do begin write ('nilai data ke',i,' = '); readln(x[i]); total :=total +x[i]; end; { menghitung rata-rata } rata_rata := total/n; writeln ('jumlah total = ' ,total:2:0); write ('rata- rata = ',rata_rata:4:2); end.
Output : 3 2 1 4 5 6
b) Nilai data array diinput sembarang : Contoh : penjumlahan matriks Input : baris matriks pertama = 2 , misalkan 2 kolom matrisk pertama = 2 Baris matriks kedua = 2 Proses : Output : baris matriks pertama = 2 , misalkan 2 kolom matrisk pertama = 2 Baris matriks kedua = 2 Matriks yang pertama = Nilai[1,1]= Nilai[ 1,2]= Nilai [2,1]= Nilai [2,2]= Jumlahkan ke dua baris tersebut
Output : baris matriks pertama = 2 , misalkan 2 kolom matrisk pertama = 2 Baris matriks kedua = 2 Matriks yang pertama = Nilai[1,1]= Nilai[ 1,2]= Nilai [2,1]= Nilai [2,2]= Matriks yang kedua : Nilai [1,1]= Nilai[1,2]= Nilai [2,1]= Nilai [2,2]=
{pertambahan matriks}
for i:= 1 to m do begin for j := 1 to n do begin c[i,j]:=a[i,j] +b[i,j]; end; end;
{cetak hasil}
writeln('hasil pertambahan matrks ='); for i := 1 to m do begin for j := 1 to n do write (c[i,j]:2:0); writeln; end; end.
Top Dasar = 0
x2 x1
Bila top=0, berarti stack Kosong & top berimpit dgn dasar D C B A A
kosong
top =0
penuh
top=N
Operasi atau proses pada stack : a. Operasi push data Artinya : Menyimpan/memasukkan/menyisipkan data ke dalam stack. Proses : bila dialokasikan suatu array dengan N elemen yang akan digunakan sebagai stack, cara mem push data adalah : 1. Periksa apakah top < N 2. Lalu naikkan top dengan 1 3. Isikan data ke dalam elemen yang di tunjuk oleh top.
CONTOH : Procedure push (var T : tumpukan ; X : integer); Begin T.Atas := T.Atas +1; T. Isi (T.Atas) :=X; End;
Penjelasan : Untuk menyisipkan tempat untuk X yang akan di push ke dalam tumpukan, Yaitu dengan menambah nilai medan T.Atas dengan 1 & kemudian menyisipkan X ke dalam larik T. Isi Jika nilai T. Atas = maxelemen, kita push lagi maka akan terjadi overflow, yaitu = pada larik T. Isi ( banyak elemen larik tidak mencukupi )
Jika nilai T. Atas = maxelemen, kita push lagi maka akan terjadi overflow, yaitu = pada larik T. Isi ( banyak elemen larik tidak mencukupi )
Pencegahan nya : Procedure push (var T : tumpukan;X: integer); Begin if T. Atas = max elemen then writeln(tumpukan sudah penuh) else T.Atas = T.Atas + 1; T. Isi (F. Atas):=X; End; End.
b. Operasi pop : Mengambil data dari stack atau disebut deletion (penghapusan elemen yang terletak paling atas dari sebuah tumpukan Cara pengambilan data : 1. Periksa dulu apakah top > 0 2. Lalu copy data dari elemen yang variabel. 3. Turunkan top
Push
pop
Stack
Operasi dasar tumpukan : a) Createstack(S) adalah membuat tumpukan baru S, dengan jumlah elemen kosong b) Makenull(S) adalah mengosongkan tumpukan S, jika ada elemen maka semua elemen dihapus. c) Empty adalah tumpukan kosong d) Push(X,S) adalah memasukkan elemen baru X ke dalam tumpukan S e) Pop (S) adalah mengeluarkan elemen posisi atas pada tumpukan S NO 1. 2. 3. 4. 5. 6. 7. 8. 9. OPERASI CREATESTTACK(S) PUSH(A,S) PUSH(B,S) PUSH(C,S) POP(S) PUSH(D,S) PUSH(E,S) POP(S) POP(S) ISI TUMPUKAN KOSONG A A,B ABC AB ABD ABDE ABD AB 0 1 2 3 2 3 4 3 2 NILAI TOP
10.
POP(S)
Apa yang terjadi bila POP(S) dilakukan dua kali ? Terjadi Underflow, artinya tumpukan kosong tidak ada elemen yang dapat diambil. Apa yang terjadi apabila PUSH(X,S) dilakukan sepuluh kali, jika kapasitas tumpukan adalah 5 lagi, terjadi Overflow, artinya tumpukan penuh tidak ada elemen yang dapat dimasukkan dalam tumpukan. Sehingga pada PUSH harus dicek dahulu apakah jumlah elemen sudah mencapai maksimum atau belum, sedang pada POP harus dicek apakah ada elemen yang hendak dikeluarkan atau tidak.
Contoh listing : Procedure pop (var T: tumpukan); Begin T. Atas := T.Atas-1; End; Kendala : Bagaimana kalau tumpukan sudah kosong, lalu apa yang dipop? (karena tumpukan sudah kosong, maka tidak mungkin dipop lagi, maka : Pencegahannya : Procedure pop (var T: tumpukan); Begin T. Atas := 0 then Writeln (tumpukan sudah kosong); Else T.Atas :=T.Atas-1; End;
ubah ke
+AB - + ABC
1. Ubah notasi prefix ke infix : +/*ABCD : Cara : (cari opertor dimulai dari operan terkanan sbb ): a) Cari perator ke 1: yaitu *, lalu ambil dua operand sebelumnya , yaitu : A dan B, sehingga hasilnya (A*B) b) Cari operator ke 2: yaitu : /, lalu ambil dua operan sebelumnya (A*B) dan C, sehingga hasilnya ((A*B)/C) c) Cari operataor ke 3: +, lalu ambil dua operan sebelumnya ((A*B)/C) dan D, sehingga hasilnya ((A*B)/C)+D
2. Ubah notasi prefix ke postfix : +/*ABCD : Cara : (cari opertor dimulai dari operan terkanan sbb ): a) Cari perator ke 1: yaitu *, lalu ambil dua operand sebelumnya , yaitu : A dan B, sehingga hasilnya AB* b) Cari operator ke 2: yaitu : /, lalu ambil dua operan sebelumnya AB* dan C, sehingga hasilnya AB*C/ c) Cari operataor ke 3: +, lalu ambil dua operan sebelumnya AB*C dan D, sehingga hasilnya AB*C/D+
3. Ubah notasi postfix ke infix : ABCD*/Cara : (cari opertor dimulai dari operan terkiri sbb ): a) Cari operator ke 1: yaitu *, lalu ambil dua operan sebelumnya , yaitu : C dan D, sehingga hasilnya (C*D) b) Cari operator ke 2: yaitu : /, lalu ambil dua operan sebelumnya B DAN (C*D) , sehingga hasilnya (B/(C*D)) c) Cari operataor ke 3:-, lalu ambil dua operan sebelumnya A DAN (B/(C*D)) , sehingga hasilnya (A-(B/(C*D))
4. Ubah notasi postfix ke prefix : ABCD*/Cara : (cari opertor dimulai dari operan terkanan sbb ): a) Cari operator ke 1: yaitu *, lalu ambil dua operan sebelumnya , yaitu : C dan D, sehingga hasilnya *CD b) Cari operator ke 2: yaitu : /, lalu ambil dua operan sebelumnya B DAN *CD , sehingga hasilnya /B*CD c) Cari operataor ke 3: -, lalu ambil dua operan sebelumnya A DAN /B*CD , sehingga hasilnya A/B*CD
5. Contoh nilai postfix menggunakan tumpukan : Notasi infix : 2-4*3+1 , diubah ke postfix : 243*-1+ 2 4 4 2 2 3 3 4 2 * Op 2 12 Op 2 2 Op 1 -10 1 1 -10 + Op 2 Op 1 -9
Op 1
Algoritmanya : 1. Buatlah tumpukan kosong 2. ulangi langkah sampai elemen habis. a. Ambil elemen satu persatu b. Jika elemen itu adalah operan, masukkan ke dalam tumpukan dan jika operator maka keluarkan dua nilai teratas dari tumpukan (op 1) dan (op 2), lalu hitung dengan operator tersebut. Hasilnya dimasukkan ke tumpukan (jika tidak ada 2 operan dalam tumpukan, maka ada kesalahan pada notasi tersebut. 3. Bila elemen dari notasi tersebut habis, maka nilai yang tertinggal (teratas dalam tumpukan)
6. Contoh nilai prefix menggunakan tumpukan : Notasi infix : 2-4*3+1 , diubah ke prefix : +-2431
3 3 1 1
4 4 3 1
* Op 1
2 2 12 Op1 12 1 Op 2 1
+ -10 1 Op 1 Op 2 -9
Op1 Op 2
Op2
Op1=operand ke 1(kiri). Op2=operand kekanan (kanan) Algoritmanya : 1. Buat tumpukan kosong 2. Ulangi langkah berikut sampai elemen habis a. ambil elemen satu persatu dari aritmatika b. Jika elemen itu adalah operan, masukkan kedalam tumpukan dan jika operator maka keluarkan dua nilai teratas dari tumpukan ( (op1, op2) , kebalikan dari postfix), lalu hitung dengan opeartor ybs. Hasilnya dimasukkan ke tumpukan (jika tidak ada operan dalam tumpukan maka ada kesalahan pada notasi tersebut)
2. ANTRIAN ( QUEUE ) a) Suatu kumpulan antrian data dimana penambahan elemen hanya bisa dilakukan pada satu ujung (=Rear/sisi belakang ) dan penghapusan (pengambilan elemen dilakukan lewat ujung lain (front = sisi depan). b) Menggunakan prinsip FIFO ( first in fisrt out), artinya yang pertama masuk itu yang akan pertama dikeluarkan.
BELAKANG
A KELUAR
E MASUK
C KELUAR
E
MASUK Proses hapus elemen
Contoh : a) Penjualan karcis kereta, bioskop b) Penjadwalan pemakaian printer atau cpu pada client server c) Penyimpanan barang di apotek Operasi dasar pada antrian : 1) Createqueue(Q) adalah membuat antrian baru Q dengan jumlah elemen kosong 2) Makenull(Q) adalah mengosongkan antrian Q, jika ada elemen maka semua elemen dihapus 3) Empty Q adalah antrian kosong 4) fullQ adalah antrian penuh 5) tambahQ(X,Q) adalah mengeluarkan elemen depan pada antrian Q
Ilustrasi operasi TAMBAHQ dan AMBILQ terhadap antrian : NO 1. 2. 3. 4. OPERASI CREATEQ(Q) TAMBAHQ(a,Q) TAMBAHQ(b,Q) TAMBAHQ(c,Q) ISI ANTRIAN KOSONG a ab abc DEPAN 0 1 1 1 BELAKANG 0 1 2 3
5. 6.
7. 8. 9. 10.
AMBILQ(Q,x) TAMBAHQ(d,Q)
TAMBAHQ(e,Q) AMBILQ(Q,x) AMBILQ(Q,x) AMBILQ(Q,x)
bc bcd
bcde cde de e
2 2
2 3 4 5
3 4
5 5 5 5
Apa yang terjadi apabila AMBILQ (Q,X) sebanyak dua kali lagi? Terjadi underflow, artinya antrian kosong tidak ada elemen yang dapat di ambil. Apa yang terjadi apabila TAMBAHQ(X,Q) sebanyak sepuluh kali lagi, jika kapasitas antrian adalah 5 lagi? Terjadi overflow, artinya antrian penuh tidak ada elemen yang dapat dimasukkan ke dalam antrian. Pada proses TAMBAHQ harus diperiksa apakah jumlah elemen sudah maksimum atau tidak, jika sudah maka overflow, sedangkan AMBILQ antrian harus diperiksa apakah ada elemen yang hendak dikeluarkan atau tidak, jika tidak ada maka underflow.
LINKED LIST
Link list ( daftar berkait / senarai berantai ) Perbedaannya array dengan linked list:
Array Variabelnya statis Penambahan/penghapusan Data terbatas Random access Penghapusan array tidak Mungkin Linked list Variabelnya dinamis Penambahan/penghapusan Tidak terbatas Sequential access Penghapusan linked list mudah
Link list ( daftar berkait / senarai berantai ) Adalah : Pengolahan memory secara dinamis artinya tidak perlu mengalokasikan memori lebih awal secara tetap. Suatu simpul (node) yang menunjuk ke simpul lain / berikutnya di dalam suatu Urutan. Adalah suatu simpul (node) yang dapat berupa suatu struktur data record. Adalah suatu node minimal yang harus mempunyai 2 komponen : 1. 1 atau lebih filed yang berisi data di daftar berkait 2. 1 atau lebih field berupa pointer yang menunjuk ke node lainnya. Field yang berupa poinnter ini disebut kait( link). node link node link node link