MATERI 1
PENGANTAR STRUKTUR DATA
Tujuan :
LATAR BELAKANG
Untuk menyelesaikan suatu permasalahan dengan program komputer, banyak
tahapan yang harus dilalui. Tahapan dimulai dari penentuan dan spesifikasi
masalah, perancangan solusi, implementasi, testing, dokumentasi dan evaluasi.
Umtuk melakukan perancangan solusi yang baik, perancang harus melakukan :
- Perancangan Struktur Data
- Perancangan Algoritma
Kedua perancangan di atas akan memudahkan pelaksanaan tahapan-tahapan
selanjutnya pada penyelesaian masalah dengan komputer tersebut.
Struktur data menjadi dasar dalam langkah awal perancangan program
Algoritma + Struktur Data = Program
MANFAAT
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.
Membuat program lebih ringkas, lebih bersih, lebih elegan, lebih mudah dan
lebih mampu berkinerja tinggi (karena efisien dalam penggunaan memori
dan waktu)
Program berjalan membutuhkan waktu beberapa detik, di mana struktur
yang lain mungkin akan membutuhkan ribuan detik.
PENGERTIAN
Struktur data adalah cara menyimpan atau merepresentasikan data di
dalam komputer agar bisa dipakai secara efisien
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
Page 1 of 56
Struktur Data
- Real
- Boolean
- Char
BAHASAN STRUKTUR DATA
Struktur Data, meliputi :
a. Struktur data dasar/sederhana, yaitu array, record/struct dan himpunan
b. Struktur data lanjut/majemuk, yang terdiri dari :
- Linier : Stack, Queue, serta List dan Multilist
- Non Linier : Pohon Biner dan Graph
RECORD
Record adalah kumpulan data, Record terdiri dari elemen yang memiliki tipe data
yang berbeda dengan yang lain.
Bentuk umum deklarasi record adalah:
Type pengenal_variabel = record
Elemen1 : tipedata1
Elemen2 : tipedata2
.
.
.
Elemenn : tipedatan
Contoh pada data mahasiswa dapat dijabarkan elemen-elemennya sebagai berikut:
1. Nim bertipe integer
2. Nama bertipe string
3. Umur bertipe integer
Jika dituliskan dalam notasi algoritmik maka, akan menjadi:
type Mahasiswa : <nim : integer,
nama : string,
umur : integer>
Operasi dalam menggunakan tipe data bentukan memiliki perilaku yang sama
dengan operasi pada tipe data dasar, hanya perbedaannya adalah pada cara
mengaksesnya. Tipe data bentukan memiliki beberapa variabel/elemen yang
berada di dalamnya, oleh karena itu cara mengaksesnya menggunakan tanda
dot/titik .
Contoh:
Jika akan mendefinisikan nama variabel Mhs dengan tipe data Mahasiswa maka
pendeklarasiannya adalah:
Kamus data
Mhs : Mahasiswa
Jika akan mengisi elemen nim pada variabel Mhs maka:
Mhs.nim 30107001
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 2 of 56
Struktur Data
8. Mhs : Mahasiswa
9. Algoritma
10. /*mengisi elemen-elemen dalam variabel Mhs*/
11. read(Mhs.nim)
12. read(Mhs.nama)
13. read(Mhs.umur)
14. /*menampilkan isi elemen-elemen dalam Mhs*/
15. write(Mhs.nim)
16. write(Mhs.nama)
17. write(Mhs.umur)
STRING
Salah satu tipe data yang merupakan representasi array 1 dimensi adalah
String.
Jumlah karakter yang dapat ditampung oleh data bertipe string adalah antara 1
sampai dengan 255.
Pendeklarasian string :
Type
Teks =string [20];
Var
Kalimat : Teks;
Operasi String :
Operator operator yang digunakan dalam operasi string adalah :
- Operator + , operator ini bertuuan untuk penggabungan suatu string
dengan string lain sehingga membentuk suatu string baru.
- Operator =, <>, <, >, <=, >= , operator operator ini bertujuan untuk
membandingkan suatu string dengan string lainnya. Hasil pembandingan
berupa nilai boolean True atau false.
Prosedur untuk operasi string :
1. Delete
Bentuk deklarasi : Delete (Var st : string; n : integer; jum : integer)
Tujuan : untuk menghapus karakter yang ada pada string st, dimulai dari posisi
ke
n, sebanyak jum karakter.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 3 of 56
Struktur Data
2. Insert
Bentuk deklarasi : Insert (obyek : string; Var Target : string; n : integer);
Tujuan : untuk menyisipkan string obyek ke string Target. Posisi penyisipan
yaitu pada indeks ke- n dari string Target.
3. Str
Bentuk deklarasi : STR (x [ : m [ : n ] ]; Var st : string)
Tujuan : prosedur ini digunakan untuk mengkonversi nilai x (bertipe real atau
integer) menjadi string. String hasil diletakkan pada st.
Fungsi untuk operasi string :
1. Copy
Bentuk deklarasi : Copy (st : string; n : integer; jum : integer) : string.
Tujuan : hasilnya berupa deretan karakter sebanyak jum, mulai karakter ke n
dari string st.
2. Concat
Bentuk deklarasi : Concat ( s1[ , s2, s3, , sn] ) : string.
Tujuan : fungsi ini menghasilkan keluaran berupa string yang merupakan
gabungan dari semua string argumennya.
3. Length
Bentuk deklarasi : Length ( st : string ) : integer.
Tujuan : fungsi ini menghasilkan panjang dari string st.
4. UpCase
Bentuk deklarasi : Upcase (ch : char ) : char;
Tujuan : fungsi ini menghasilkan huruf kapital dari ch.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 4 of 56
Struktur Data
MATERI 2
ARRAY
Tujuan:
Mengetahui dan memahami struktur data statis
Memahami operasi-operasi array
Array adalah sekumpulan memori untuk suatu nama yang memiliki elemenelemen data yang sejenis. Sifat-sifat array adalah sebagai berikut :
- Mengacu sekumpulan elemen melalui indeks.
- Elemen bertipe sama.
- Disimpan secara berurutan di memori.
- Ukuran tetap, harus dipesan terlebih dahulu.
Representasi array dibagi menjadi dua, yaitu :
1. Representasi array 1 dimensi, contoh : string.
A[1]
A[2]
A[N]
A[1,N]
A[1,1]
A[2,1]
A[1,N]
A[2,N]
A[N,1]
A[N,N]
Page 5 of 56
Struktur Data
1. Traversal
2. Searching
3. Sorting
Operasi Traversal terhadap tabel array :
Tabel integer didefinisikan seperti dibawah ini :
Const
IdxMin = 1;
{batas bawah}
IdxMax = 10;
{batas atas}
Type
TipeElm = Integer;
{type terdefinisi,misal integer}
TabInt = Array [IdxMin .. IdxMax] of TipeElm;
Var
TInt = TabInt;
{tabel integer}
Skema traversal :
Pemrosesan traversal yaitu mengolah seluruh elemen tabel secara
sistematik.
Skema :
Procedure ProsesTraversal (Var TI:TabInt);
Var
i:integer;
Begin
Inisialisasi;
{prosedur persiapan sebelum pemrosesan}
For i:=IdxMin to IdxMax do
Begin
Proses ( TI [ i ] );
{proses terhadap elemen saat itu}
End;
Terminasi;
{prosedur aksi setelah pemrosesan selesai}
End;
Contoh penggunaan skema :
- Prosedur memasukkan nilai seluruh elemen tabel.
Procedure InputTabInt (Var TI : TabInt);
Var
i : Integer;
Begin
For i := IdxMin to IdxMax do
Begin
Write (Elemen ke-,i);
Readln ( TI[ i ] );
End;
End;
- Prosedur menuliskan seluruh nilai elemen tabel ke layar.
Procedure OutputTabInt ( TI : TabInt);
Var
i: Integer;
Begin
For i := IdxMin to IdxMax do
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 6 of 56
Struktur Data
Begin
Write (Elemen ke-,i, = );
Writeln ( TI [ i ] );
End;
End;
MATRIKS
Merupakan array 2 dimensi, setiap elemen Matriks diidentifikasi oleh nama, indeks
baris dan indeks kolom.
1
2
N1
1
N2
Page 7 of 56
Struktur Data
I1
While I <= N1 do
J1
While J <= N2 do
M [I,J] 1
J J+1
EndWhile
I I+1
EndWhile
b. Matriks identitas ordo N
Read N
I1
While I <= N do
J1
While J <= N do
If I = J then
M[I,J] 1
Else
M[I,J] 0
Endif
J J+1
EndWhile
I I+1
EndWhile
3. Penulisan elemen matriks
I1
While I <= N1 do
J1
While J <= N2 do
Write M[I,J]
J J+1
EndWhile
I I+1
EndWhile
4. Penjumlahan matriks
I1
While I <= N1 do
J1
While J <= N2 do
C[I,J] A[I,J] + B[I,J]
J J+1
EndWhile
I I+1
EndWhile
5. Perkalian matriks
I1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 8 of 56
Struktur Data
While I <= N1 do
{N1 = baris Matriks A}
J1
While J <= N2 do
{N2 = baris Matriks B}
C[I,J] 0
K1
While K <= N do
{N = kolom matriks A = baris matriks B}
C[I,J] C[(I,J] + A[I,K] * B[K,J]
K K+1
EndWhile
J J+1
EndWhile
II+1
EndWhile
Jika direpresentasikan dalam bentuk gambar maka, akan tampak sebagai berikut:
30107002
Nisya
18
Mhs =
0
...
...
49
30107001
Najwa
18
Page 9 of 56
Struktur Data
Mhs[1].umur 18
Mhs[2].nim 30107002
Mhs[2].nama Amingwati
Mhs[2].umur 18
...
Dengan demikian data mahasiswa dapat disimpan dalam satu buah variabel bertipe
array dengan tipe Mahasiswa.
Contoh pseudocode lengkapnya
1.ALGORITMA
2. /*contoh algoritma penggunaan tipe data bentukan dalam array*/
3.KAMUS DATA
4. Type Mahasiswa : <nim : integer,
5.
nama : string,
6.
umur : integer >
7. /*Menggunakan tipe data Mahasiswa pada variabel Mhs*/
8. Mhs : array [1..3] of Mahasiswa
9. i : integer
10.Algoritma
11. /*mengisi elemen-elemen dalam variabel Mhs*/
12. for i:=1 to 3 do
13. write(Nim = ); read(Mhs[i].nim)
14. write(Nama = ); read(Mhs[i].nama)
15. write(Umur = ); read(Mhs[i].umur)
16. EndFor
17. /*menampilkan isi elemen-elemen dalam Mhs*/
18. for i:=1 to 3 do
19. write(Mhs[i].nim)
20. write(Mhs[i].nama)
21. write(Mhs[i].umur)
22. EndFor
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 10 of 56
Struktur Data
100
1
89
2
88
3
Dari gambar di atas dapat dilihat bahwa seorang mahasiswa memiliki beberapa
nilai, maka cara mendeklarasikan tipe datanya adalah:
type Mahasiswa : <nim : integer,
nama : string,
nilai: array [1..3] of integer
>
Kamus data
Mhs : Mahasiswa
Dalam hal ini yang memiliki tipe data array adalah elemen di dalam tipe data
bentukan, oleh karena itu cara mengakses elemen array yang terdapat di dalam
tipe Mahasiswa adalah sebagai berikut:
Mhs.nilai[1] 100
Mhs.nilai[2] 89
Mhs.nilai[3] 88
Atau dengan perintah masukan sebagai berikut:
read(Mhs.nilai[1])
read(Mhs.nilai[2])
read(Mhs.nilai[3])
Contoh pseudocode lengkapnya
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 11 of 56
Struktur Data
1.ALGORITMA
2. /*contoh algoritma penggunaan array dalam tipe data bentukan*/
3.KAMUS DATA
4. type Mahasiswa: <nim : integer,
5.
nama : string,
6.
nilai: array[1..3] of integer>
7./*Menggunakan tipe data Mahasiswa pada variabel Mhs*/
8. Mhs : Mahasiswa
9. i,a : integer
10.Begin
11./*mengisi elemen-elemen dalam variabel Mhs*/
12. write(Memasukkan nilai dalam array)
13. write(Nim = ); input(Mhs.nim)
14. write(Nama= ); input(Mhs.nama)
15. a=1;
16. for i:=1 to 2 do
17. write(Nilai ke ,a, = )
18. read(Mhs.nilai[i])
19. a=a+1
20. endfor
21./*menampilkan isi elemen-elemen dalam Mhs*/
22. write(Nim Anda : ,Mhs.nim, dan Nama
23.
Anda: ,Mhs.nama)
24. write(Nilai Anda adalah:)
25. for i=1 to 3 do
26. write(Mhs.nilai[i])
27. endFor
28.End.
Output yang dihasilkan:
Page 12 of 56
Struktur Data
Kamus data
Mhs : array [0..49] of Mahasiswa
Dapat dilihat bahwa dalam tipe data Mahasiswa terdapat elemen nilai yang
memiliki tipe array, kemudian pada bagian kamus data didefinisikan bahwa
variabel Mhs merupakan tipe array dengan tipe data Mahasiswa.
Jika digambarkan akan tampak sebagai berikut:
Mhs =
0
...
...
49
100
Nindya
Nilai =
100
0
89
1
88
2
Cara untuk mengisi satu elemen Nilai dalam variabel Mhs adalah sebagai berikut:
...
Mhs[0].Nilai[0] 100
Mhs[0].Nilai[1] 89
Mhs[0].Nilai[2] 88
...
Demikian pula untuk mengakses suatu nilai pada elemen Nilai di variabel Mhs
adalah:
...
{Menampilkan isi elemen nilai ke-0}
write(Mhs[0].Nilai[0])
...
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 13 of 56
Struktur Data
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 14 of 56
Struktur Data
Latihan :
1. Buat Algoritma dengan menggunakan Struktur Data Array untuk Matrik
dalam pencarian elemen tertentu didalam matrik!
Algoritma Global:
- Misalkan elemen x yang akan dicari
- Bila x ditemukan, maka keluaran yang diinginkan adalah indeks baris dan
indeks kolomnya. Bila x tidak ditemukan di dalam matriks, maka indeks
baris dan indeks kolom yang dihasilkan masing-masing bernilai -1
2. Buat Algoritma dengan menggunakan Struktur Data Array untuk Matrik untuk
membuat Matrik Transpose!
3. Buat Algoritma dengan menggunakan Struktur Data Array untuk Matrik
dalam mencetak elemen diagonal matrik!
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 15 of 56
Struktur Data
MATERI 3
STRUKTUR DATA DINAMIS ( POINTER )
Tujuan:
Pointer digunakan untuk menyatakan secara eksplisit alamat tersebut pada waktu
dilakukan pengoperasiannya. Manipulasi dapat dilakukan pada alamat maupun
struktur data tersebut.
Pada implementasinya, pernyataan eksplisit ini diperlukan karena struktur
data itu belum tentu terletak pada segmen data yang sama dengan program yang
akan dieksekusi.
List Berkait / Linked list
List diawali dari Kepala, yang merupakan kepala dari list. Kepala berisi
alamat dari elemen pertama. Elemen list berisi 2 jenis field, yaitu Info dan Berikut.
Info adalah harga yang disimpan/dioperasikan, sedangkan Berikut adalah pointer
yang berisi alamat berikutnya.
List diakhiri dengan suatu elemen terakhir yang memiliki harga Berikut yang
tidak menunjuk kemanapun. Harga Berikut ini disebut Nil.
Jika Kepala = Nil, menunjukkan list dalam keadaan kosong.
Notasi :
Jika P adalah suatu variabel yang berjenis pointer :
P^. Info
P^. Berikut
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 16 of 56
Struktur Data
NAME
or
START
Gambar 1
Contoh :
Pada bangsal sebuah rumah sakit terdapat 12 tempat tidur. Sembilan di antaranya
telah ditempati Pasien. Kita hendak membuat list nama para pasien tersebut secara
alfabetik.
START
Bed
Number
1
2
3
4
5
6
7
8
9
10
11
12
Patient
Kirk
Next
7
Dean
Maxwell
Adams
11
12
3
Lane
Green
Samuels
4
1
0
Fields
Nelson
8
9
Gambar 3.1
Operasi operasi Dasar Pada Linked List
Operasi-operasi dasar : Inisialisasi List, Penelusuran List (Explore), Pencarian
List (Searching), Penyisipan List (Insertion), Penghapusan List (Deletion). Pada
bagian ini diasumsikan List Berkait diimplementasikan pada jenis data dinamis.
Rutin-rutin yang digunakan :
NEW (P)
menyimpan
alamat di P.
RELEASE (P) atau
DISPOSE (P)
ditunjuk oleh P.
Inisialisasi List
Inisialisasi adalah pemberian nilai awal terhadap variabel list (pointer).
Procedure Inisialisasi (Var Kepala : List);
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 17 of 56
Struktur Data
Begin
Kepala := Nil; {tidak menunjuk kemanapun}
End;
Penelusuran List / Explore
Explorasi adalah penjelajahan untuk mengunjungi semua elemen.
Tujuan : Pencetakan, Pemeriksaan, pengubahan data, dll.
Procedure PenelusuranList (Var Kepala : List);
Var
P : List;
Begin
P := Kepala; {alamat elemen yang akan dikunjungi}
While P <> Nil Do
Begin
Proses (P);
{realisasinya : pemrosesan terhadap P}
P := P^. Berikut;
End;
{P = Nil, semua elemen sudah dikunjungi, atau list kosong }
End;
Pencarian List / Searching
Searching adalah pencarian suatu elemen pada list, dengan kriteria tertentu
a. Pencarian elemen list yang berharga Y
Function PencarianList (Var Kepala : List; Y : Info_Type) : Boolean;
Var
P : List;
Ketemu : Boolean;
Begin
P := Kepala;
Ketemu := False;
While (P <> Nil) And (Not Ketemu) Do
Begin
If P^. Info = Y Then
Ketemu := True
Else
P := P^. Berikut;
End;
PencarianList := Ketemu;
End;
{Jika tidak ketemu P = Nil dan PencarianList bernilai False}
b. Pencarian elemen terakhir
Procedure PencElemenAkhir (Var Kepala, P : List) ;
Begin
P := Head
If P <> Nil Then
Begin
While (P^. Berikut <> Nil) Do
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 18 of 56
Struktur Data
P := P^. Berikut;
End;
End;
Penyisipan List / Insertion
Insertion adalah penyisipan suatu elemen list pada Linked List.
a. Penyisipan sebagai elemen pertama
Procedure SisipAwal (Var Kepala : List; P :List)
Begin
P^. Berikut := Kepala;
Kepala := P;
End;
b. Penyisipan sebagai elemen terakhir
Procedure SisipAkhir (Var Kepala : List; P : List);
Var
Akhir : List;
Begin
New (P)
If Kepala = Nil Then SisipAwal (Kepala, P);
Else
Begin
Akhir := Kepala;
While (Akhir <> Nil) Do
Akhir := Akhir^. Berikut;
P^. Berikut := Nil;
Akhir^. Berikut := P;
End;
End;
Page 19 of 56
Struktur Data
Begin
If Kepala <> Nil Then
Begin
P := Kepala;
Kepala := Kepala^. Berikut;
Dispose (P);
End;
End;
b. Penghapusan elemen terakhir
Procedure HapusElemenAkhir (Var Kepala : List; P : List);
Var
Akhir, PreAkhir : List;
Begin
If Kepala <> Nil Then
Begin
Akhir := Kepala;
PrecAkhir := Nil;
While (Akhir ^. Berikut <> Nil) Do
Begin
PrecAkhir := Akhir;
Akhir := Akhir^. Berikut;
End;
P:= Akhir;
If PrecAkhir = Nil Then
{Elemen List hanya satu}
Kepala := Nil
Else
PrecAkhir^. Berikut := Nil;
If P <> Nil Then Dispose (P);
End;
End;
c. Penghapusan elemen sesudah P
Procedure HapusElemenSesudah (Var P : List);
{List Tidak Boleh Kosong !!}
Var
Prec : List;
Begin
If P^. Berikut <> Nil Then
Begin
Prec := P^. Berikut;
P^. Berikut := Prec^. Berikut; {Alamat P yangberikutnya}
Dispose (Prec);
End;
End;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 20 of 56
Struktur Data
MATERI 4
OPERASI OPERASI DASAR II PADA LINKED LIST
Tujuan:
Kepala 2
List Kedua :
x
Hasil Gabungan :
Kepala 1
a
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 21 of 56
Struktur Data
Kepala
Ekor
2. List Sirkuler.
Anak-anak
Cucu
5. List kombinasi dari varian-varian tersebut.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 22 of 56
Struktur Data
Struktur Data
Q^. Berikut := P;
End;
P^. Berikut := Kepala;
End;
c. Penghapusan Elemen List Sirkuler
Penghapusan Elemen Pertama List Sirkuler :
Procedure HapusElmPertamaListSirkuler (Var Kepala : List);
Var
P : List;
Begin
If Kepala <> Nil Then
Begin
If Kepala^. Berikut = Kepala Then
Begin
Dispose (Kepala);
Kepala := Nil;
End
Else
{If Kepala^. Berikut <> Kepala Then}
Begin
P := Kepala;
Kepala := Kepala^. Berikut;
While Kepala^. Berikut <> P do
Kepala := Kepala^. Berikut;
End;
Kepala^. Berikut := P^. Berikut;
Dispose (P);
End;
End;
End;
Penghapusan Elemen Terakhir List Sirkuler :
Procedure HapusElmAkhirListSirkuler (Var Kepala : List);
Var
PreAkhir, P : List;
Begin
If Kepala <> Nil Then
Begin
If Kepala^. Berikut = Kepala Then
Begin
Dispose (Kepala);
Kepala := Nil;
End
Else
Begin
P := Kepala;
While P^. Berikut <> Kepala do
Begin
PreAkhir := P;
P:= P^. Berikut;
End;
PreAkhir^. Berikut := Kepala;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 24 of 56
Struktur Data
Dispose (P);
End;
End;
End;
Operasi operasi pada List berpointer Ganda
Pendeklarasian pada program pascal :
Type
Info_Type = integer;
List = ^ElmList;
ElmList = Record
Info : Info_Type;
Sebelum, Berikut : List;
End;
a. Kunjungan pada setiap elemen :
-
Page 25 of 56
Struktur Data
Q^. Berikut := P;
End;
e. Penghapusan elemen pertama
Procedure HapusElmPtmListGanda (var Kepala : List; P : List);
Begin
If (Kepala <> Nil) then
Begin
P:= Kepala;
Kepala := Kepala^. Berikut;
Dispose (P);
If (Kepala <> Nil) Then
{sisa tidak kosong}
Kepala^. Sebelum := Nil;
End;
End;
f. Penghapusan elemen terakhir
Procedure HapusElmAkhListGanda (var Kepala : List; P : List);
Ver
Q : List;
Begin
If (Kepala <> Nil) then
Begin
If (Kepala^. Berikut = Nil) then
Begin
Dispose (Kepala);
Kepala := Nil;
End
Else
Begin
PencElemenAkhir(Kepala, Q);
P := Q^. Sebelum;
Dispose (Q);
P^. Berikut := Nil;
End;
End;
End;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 26 of 56
Struktur Data
MATERI 5
STACK DAN QUEUE
Tujuan:
- Dapat memahami stack dan queue
- Dapat mengetahui algoritma stack dan queue
- Dapat memahami operasi polish notation untuk stack
- Dapat mengimplementasikan algoritma stack dan queue kedalam bahasa
pemrograman.
1. Stack
Stack merupakan koleksi atau kumpulan data secara bertumpuk (seolah-olah
bertumpuk) dimana data yang akan disisipkan atau akan diambil(dihapus) dilakukan
pada ujung yang sama yang dikenal dengan sebutan top dari tumpukan (top of
stack).
Deskripsinya sebagai berikut:
T OP
F
E
D
C
B
A
BOTTOM
s:stack;
1.2
Operasi-operasi dalam stack
1.2.1 Operasi Penyisipan (PUSH)
Operasi ini dilakukan untuk menyisipkan data pada stack
dengan operasi PUSH. Berikut procedure untuk operasi stack:
yang dikenal
Page 27 of 56
Struktur Data
s.item[s.top]:=x;
end;
end;
1.2.2 Operasi POP
Operasi ini dilakukan untuk mengambil atau menghapus data pada stack yang
dikenal dengan operasi POP. Berikut procedure untuk operasi stack:
function pop(var s:stack):integer;
begin
if empty(s) then error(stack underflow)
else
begin
pop:=s.item[s.top];
s.top:=s.top-1;
end;
end;
empty(s) merupakan function untuk mengetahui kosong atau tidaknya
didalam stack. Berikut function untuk empty(s).
function empty(s:stack):boolean;
begin
if s.top=0 then
empty:=true {stack adalah kosong}
else
empty:=false; {stack adalah tidak kosong}
end;
1.2.3 Implementasi Stack.
Salahsatu pemanfaatan tumpukan adalah untuk menulis ungkapan
menggunakan notasi tertentu atau dikenal dengan penulisan ungkapan numeris.
Seperti dalam menggunakan tanda kurung untuk mengelompokan bagian mana yang
harus dikerjakan terlebih dahulu.
Infix
Posfix
A+B-C
AB+C(A+B)*(C-D)
AB+CD-*
A-B/(C*D^E)
ABCD^*/Notasi aritmatik biasa ditulis dalam notasi infix, missal A + B C. Notasi infix mudah
dimengerti oleh manusia, hanya dalam notasi infix ini perlu diperhatikan prioritas
pengerjaan karena berhubungan dengan hirarki operator pada computer. Prioritas
pengerjaannya adalah :
1. Tanda Kurung : ( )
2. Eksponensial atau pangkat : ^
3. Perkalian, Pembagian : *,/
4. Penjumlahan, Pengurangan : +,Contoh : (A - B) * (C + D)
Prioritas pengerjaan soal di atas adalah sebagai berikut:
a. Dalam kurung yang paling kiri : (A-B)
b. Dalam Kurung yang kedua : (C+D)
c. Perkalian hasil pengurangan dengan hasil penjumlahan
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 28 of 56
Struktur Data
Notasi infix untuk penulisan aritmatik, biasa diubah kedalam notasi prefix atau
postfix saat kompilasi. Notasi prefix maupun postfix akan lebih mudah dikerjakan
oleh komputer, karena tidak perlu mencari urutan pengerjaan seperti pada notasi
infix.
PREFIX adalah keadaan di mana simbol operator diletakkan sebelum dua operand.
POSTFIX adalah keadaan di mana symbol operator diletakkan sesudah dua
operand. Aturan notasi infix, prefix dan postfix :
1. Notasi Infix
: operand operator operand
A+B
2. Notasi Prefix
: operator operand operand
+A B
(disebut juga Polish Notation - PN)
3. Notasi Postfix
: operand operand operator
AB+
(disebut juga Reveser Polish Notation - RPN)
NOTASI POSTFIX
ALGORITMA
Amati barisan dari kiri ke kanan
1. Jika (, maka PUSH ke dalam stack.
2. Jika ), POP elemen dalam stack sampai simbol (. Semua di POP
merupakan output kecuali ( tadi.
3. Jika simbol operand, langsung merupakan output.
4. Jika simbol operator, maka :
Jika elemen TOP stack dengan level >= maka POP sebagai output teruskan
sampai (.
elemen TOP <, operator yang diamati di PUSH ke dalam stack.
5. Bila ; kita POP semua elemen dalam stack hingga hampa.
APLIKASI STACK
Notasi Postfix
Contoh :
Notasi Infix : ((A+B) * C/D+E^F)/G;
Simbol yang 1
diamati
(
10
11
12
13
14
15
16
17
18
^
/
TOP dari
STACK
(
OUTPUT
^+
Page 29 of 56
Struktur Data
case op of
^:valensi:=3;{pangkat}
*,/:valensi:=2;{kali dan bagi}
+,-:valensi:=1;{tambah dan minus }
(:valensi:=0;{kurung buka}
end;
end;
procedure infix_posfix(infix:string);
var
i:integer;
operator:set of char;
temp, kar:char;
s:Stack;
Test:boolean
begin
{*himpunan operator yang diijinkan*}
operator:=[^]+[*]+[/]+[+]+[-];
{*melakukan konversi*}
for i:=1 to length(infix) do
begin
kar:=infix[i];
{*kurung buka. Push kedalam tumpukan*}
if kar=( then push(s,kar)
{*kurung tutup. Pop semua elem tumpukan*
*dan cetak, sampai elemen atas tumpukan*
*adalah kurung buka. Pop juga elemen ini *
*tetapi tidak perlu ditulis. *}
else
if kar=) then
begin
while s.item[s.top]<>( do
write(pop(s));
temp:=pop(s);
end
{*operator. Test valensinya terhadap valensi elemen atas tumpukan. jika*
valensinya lebih kecil, pop elemen atas tumpukan sampai valensi elemen
atas tumpukan lebih kecil. Push operator ini.}
else
if kar in operator then
begin
while (s.top<>0) and (valensi(kar) <=valensi(s.item[s.top])) do
write(pop(s))
push(s,kar)
end
else
if kar<> then write(kar)
end;
s.top<>0 then
{*tumpukan masih isi. Pop semua elemen*
*yang masih ada dalam tumpukan
*}
repeat
write(pop(s))
until s.top=0;
end;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 30 of 56
Struktur Data
2. QUEUE
Queue adalah suatu kumpulan data yang mana penambahan (insert) elemen
hanya bisa dilakukan pada satu ujung(disebut dengan sisi belakang atau rear), dan
penghapusan (pengambilan elemen) dilakukan lewat ujung lain(disebut dengan sisi
depan atau front). Berikut ilustrasi dari queue:
Front
Rear
: Antri;
: integer;
: char;
Page 31 of 56
Struktur Data
Algoritma QDELETE
1. if FRONT := NULL , then UNDERFLOW , Return
2. set ITEM := QUEUE[FRONT]
3. [find new value of FRONT]
if FRONT = REAR , then
set FRONT := NULL and REAR := NULL
else
set FRONT := FRONT + 1
4. Return
Contoh :
Antrean dalam array queue dengan 5 lokasi memori
1. Pada awal antrean kosong
Queue
F=0
R=0
1
2. A, B dan C dimasukkan
F=1
R=3
Queue
A
1
B
2
Queue
1
4. D dan E dimasukkan
F=2
R=5
Queue
1
5. Hapus 1 elemen : B dihapus
F=3
R=5
Queue
C
1
D
3
Untuk setiap pemasukan elemen, nilai Rear + 1penghapusan elemen, nilai Front + 1
Akibatnya, setelah pemasukan elemen ke-5 maka lokasi Queue (5) telah diduduki
mungkin saja tidak sebanyak 5 elemen ada dalam antrean, karena sudah dilakukan
beberapa penghapusan. Untuk pemasukan elemen berikutnya, yakni memasukkan
elemen ITEM, gunakan lokasi QUEUE (1), dan seterusnya.
Antrian Sirkular yaitu elemen Queue (1) datang sesudah Queue (N) di dalam array,
maka Rear = 1. Jika Front = N, dilakukan penghapusan maka Front = 1, bukan N + 1.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 32 of 56
Struktur Data
Contoh :
Array Sirkular dengan 5 lokasi memori
1. Pada awal antrean hampa
F=0
R=0
Queue
1
2. A, B dan C dimasukkan
F=1
R=3
Queue
A
1
3. Hapus 1 elemen : A dihapus
F=2
R=3
2
Queue
B
1
4. D dan E dimasukkan
F=2
R=5
C
3
Queue
B
1
5. Hapus 1 elemen : B dihapus
F=3
R=5
E
5
Queue
1
6. G dimasukkan
F=3
R=1
Queue
G
1
Algoritma QINSERT
1. if FRONT = 1 and REAR = N , or If FRONT = REAR + 1, then
OVERFLOW, Return
2. if FRONT := NULL, then
set FRONT := 1 and REAR := 1
else if REAR = N , then
set REAR := 1
else
set REAR := REAR + 1
3. set QUEUE [REAR] := ITEM
4. Return
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 33 of 56
Struktur Data
Algoritma QDELETE
1. if FRONT := NULL , then UNDERFLOW , Return
2. set ITEM := QUEUE[FRONT]
3. [find new value of FRONT]
if FRONT = REAR , then
set FRONT := NULL and REAR := NULL
else if FRONT = N, then
set FRONT := 1
else
set FRONT := FRONT + 1
4. Return
ANTREAN BERPRIORITAS
Himpunan elemen, yang setiap elemennya telah diberikan sebuah prioritas, dan
urutan proses penghapusan elemen adalah berdasarkan aturan berikut :
1. Elemen yang prioritasnya lebih tinggi, diproses lebih dahulu dibandingkan
dengan elemen yang prioritasnya lebih rendah.
2. Dua elemen dengan prioritas yang sama, diproses sesuai dengan urutannya
sewaktu dimasukkan ke dalam antrean berprioritas.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 34 of 56
Struktur Data
START
Diagram Skematik
Penyajian Dalam Memori
START
AVAIL
2
1
2
3
4
5
6
7
8
9
10
11
12
INFO
B
PRN
2
D
E
A
C
4
4
1
2
G
F
5
4
LINK
6
7
4
9
1
3
10
0
8
11
12
0
Sifat utama dari penyajian One-way list dari sebuah Antrean Berprioritas adalah
bahwa elemen dalam Antrean yang seharusnya diproses pertama kali selalu muncul
pada bagian permulaan One-way list. Oleh karena itu, adalah sangat sederhana
untuk menghilangkan dan memproses sebuah elemen Antrean Prioritas tersebut.
Algoritmanya sebagai berikut :
ALGORITMA 1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 35 of 56
Struktur Data
START
X
A
x
Diagram Skematik
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 36 of 56
Struktur Data
START
AVAIL
7
1
2
3
4
5
6
7
8
9
10
11
12
INFO
B
X
D
E
A
C
PRN
2
2
4
4
1
2
G
F
5
4
LINK
6
3
4
9
1
2
10
0
8
11
12
0
1
2
3
4
5
FRONT
2
1
0
5
4
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
REAR
2
3
0
1
4
1
1
2
3
4
5
2
A
C
F
G
Page 37 of 56
Struktur Data
Latihan
1. Buatlah program untuk menghitung nilai dari notasi posfik yang sudah ada
sebelumnya (tinggal menambahkan algoritma untuk menghitung nilai postfix
tersebut ).
2. Buatlah program untuk mengimplementasikan prioritas queue ,dengan struktur
data sebagai berikut:
type antri =listantrian;
listantrian=record
info:char;
prioritas:integer;
next:antri;
end;
dalam hal ini berlaku dua ketentuan, yaitu:
1. Elemen-elemen yang mempunyai prioritas lebih tinggi akan diproses lebih
dulu.
2. Dua elemen yang mempunyai prioritas sama akan dikerjakan sesuai dengan
urutan ada saat kedua elemen ini masuk dalam antrian.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 38 of 56
Struktur Data
MATERI 6
PENGURUTAN DATA
Tujuan:
Memahami algoritma Pengurutan Data
Dapat memahami metoda-metoda pengurutan Data
Salah satu pemanfaatan struktur data array terpenting adalah pengurutan data.
Pengurutan dibedakan 2 macam:
a. Pengurutan Internal, yaitu pengurutan terhadap sekumpulan data yang
disimpan dalam media internal komputer yang dapat diakses setiap
elemennya secara langsung maka dapat dikatakan sebagai pengurutan
tabel.
b. Pengurutan eksternal, yaitu pengurutan data yang disimpan dalam memori
sekunder, biasanya dapat bervolume besar sehingga tidak mampu untuk
dimuat semuanya dalam memori.
METODA PENGURUTAN DATA
1. Bubble/Exchange Sort
2. Insertion Sort
3. Selection Sort
BUBBLE/EXCHANGE SORT
Bubble/Exchange Sort merupakan metode pengurutan data secara langsung.
Algoritma Global
Untuk Setiap Pass i=1,2,...,N-1, lakukan
Mulai dari Elemen j=N,N-1,...,i+1 lakukan:
1.1.
Bandingkan A[J] dengan L[J-1]
1.2. Pertukarkan A[J] dengan A[J-1] Jika A[J] < A[J-1]
Algoritma Detail
{N:Banyaknya elemen Array}
I:=1
While J<N Do
J:=N
While J>I Do
If A[J] < A[J-1] then
Swap := A[J]
A[J] :=A[J-1]
A[J-1]:=Swap
endif
j:=j-1
Endwhile
i:=i+1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 39 of 56
Struktur Data
endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Bubble Sort!
25
1
27
2
10
3
8
4
76
5
21
6
INSERTION SORT
Insertion Sort merupakan metoda pengurutan data secara menyisipkan
langsung.
Dasarnya : Ambil/tinjau sebuah nilai, lalu tempatkan/sisipkan dilokasi yang
sesuai/tepat (mirip dengan cara mengurutkan kartu)
Algoritma Global
Untuk setiap pass i=2,...,N lakukan:
1. X := A[i]
2. sisipkan y pada tempat yang sesuai antara A[1]...a[i]
Algoritma Detail
I:=2
while I N do
X:=A[i]
{sisipkan X diposisi yang tetap diantara A[1],,A[N]}
J:=i-1
While x A[j] Do
A[J+1]:=A[J]
J:=J-1
Endwhile
A[J+1]:=X
I:=I+1
Endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Insertion Sort!
25
1
27
2
10
3
8
4
76
5
21
6
SELECTION SORT
Selection Sort merupakan metoda pengurutan data secara pemilihan langsung.
Dasarnya : cari nilai paling tinggi/rendah lalu tempatkan dibagian ujung array
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 40 of 56
Struktur Data
Ada dua jenis algoritma pemgurutan seleksi ditinjau dari pemilihan elemen
maksimum/minimum, yaitu:
1. Algoritma pengurutan seleksi-maksimum, yaitu memilih elemen maksimum
sebagai basis pengurutan.
2. Algoritma pengurutan seleksi-minimum, yaitu memilih elemen minimum
sebagai basis pengurutan.
1. Pengurutan Seleksi-Maksimum
Algoritma Global
1. JumlahPass = n-1
2. Untuk setiap pass i=1,2,....,JumlahPass lakukan:
cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-n;
pertukarkan maks dengan elemen ke-n;
kurangi n satu (karena elemen ke-n sudah terurut).
Algoritma Detail
I:=N
while I 2 do
{cari elemen maksimum pada elemen A[1..N]}
imaks :=1 {elemen pertama diasumsikan elemen maks sementara}
J:=2
while J I do
if A[J] > A[imaks] then
imaks:=j
endif
J := J+1
endwhile
{pertukarkan A[imaks] dengan A[i]}
swap := A[i]
A[i] := A[imaks]
A[imaks] := swap
I:=I-1
Endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Selection Sort
maksimum!
25
1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
27
2
10
3
8
4
76
5
21
6
Page 41 of 56
Struktur Data
2. Pengurutan Seleksi-Minimum
Algoritma Global
Untuk setiap pass i =1,2,..., n-1 lakukan:
1. Cari elemen terkecil (min) mulai dari elemen ke-1 sampai elemen ke-n;
2. pertukarkan min dengan elemen ke-i;
Algoritma Detail
I:=1
while I < N do
{cari elemen minimum pada elemen A[1..N]}
imin :=I {elemen pertama diasumsikan elemen min sementara}
J:=i+1
while J N do
if A[J] < A[imin] then
imin:=j
endif
J := J+1
endwhile
{pertukarkan A[imins] dengan A[i]}
swap := A[i]
A[i] := A[imin]
A[imin] := swap
I:=I+1
Endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Selection Sort
minimum!
25
1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
27
2
10
3
8
4
76
5
21
6
Page 42 of 56
Struktur Data
MATERI 7
PENCARIAN (SEARCHING)
DEFINISI
Pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan
nilai yang bertipe sama (tipe dasar atau bentukan).
Mengapa dibutuhkan?
Untuk mengubah atau menghapus nilai tertentu harus dicari apakah
ada nilai tersebut di dalam kumpulan tersebut
Penyisipan data ke dalam kumpulan juga kadang-kadang dimulai
dengan pencarian apakah data tersebut telah ada sehingga terhindar
dari duplikasi data
Algoritma Pencarian Mendasar adalah
Pencarian Beruntun (Sequential Search)
Pencarian Bagi dua (Binary Search)
PENCARIAN BERUNTUN (SEQUENTIAL SEARCH)
Adalah proses membandingkan setiap elemen larik (array) satu persatu secara
beruntun, mulai dari elemen pertama, sampai elemen yang dicari ditemukan, atau
seluruh elemen sudah diperiksa.
ALGORITMA
Procedure SeqSearch(input L:LarikInt, input N:Integer, input X:integer, output
ketemu : boolean)
{Mencari keberadaan nilai X didalam larik[1N]}
{K.Awal:X dan larik L[1..N] sudah terdefinisi nilainya}
{K.Akhir:ketemu bernilai true jika X ditemukan, ketemu bernilai false jika X tidak
ditemukan.}
DEKLARASI
k:integer {indeks larik}
ketemu
:boolean {flag apabila X ketemu}
DESKRIPSI
k0
while ((k<N) and (L[k]!=X)) Do
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 43 of 56
Struktur Data
Kk+1
endwhile
if (L[k]=x) then
ketemu true
else
ketemu false
endif
CONTOH PENCARIAN BERUNTUN
13
16
14
21
76
15
Page 44 of 56
Struktur Data
10
13
16
18
21
76
81
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 45 of 56
Struktur Data
MATERI 8
STRUKTUR POHON
Tujuan:
- Dapat memahami struktur pohon
- Dapat mengetahui representasi struktur pohon
- Dapat memahami dan mengetahui operasi-operasi dasar pre-order, in-order,
post-order
- Dapat memahami dan mengimplementasi algoritma struktur pohon dalam
bentuk program
Secara sederhana struktur pohon bisa didefinisikan sebagai kumpulan elemen
yang salah satu elemennya disebut dengan akar(root), dan sisa elemen yang
lain(yang disebut simpul) terpecah menjadi sejumlah himpunan yang saling tidak
berhubungan satu sama lain, yang disebut dengan subpohon (subtree), atau disebut
dengan cabang.
Istilah dalam struktur pohon:
- Derajat(degree) adalah banyaknya anak atau turunan dari simpul tersebut.
- Daun(leaf) adalah semua simpul yang berderajad nol.
- Tinggi(height) atau kedalaman(depth) dari suatu pohon adalah tingkat
maksimum dari simpul dalam pohon tersebut dikurangi dengan 1.
- Hutan(forest) adalah kumpulan sejumlah pohon yang tidak saling berhubungan
Contoh struktur pohon
A
B
1. Pohon Biner
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 46 of 56
Struktur Data
Pohon biner(binary tree) bisa didefinisikan sebagai suatu kumpulan simpul yang
mungkin kosong atau mempunyai akar dan dua subpohon yang saling terpisah yang
disebut dengan subpohon kiri (left subtree), dan subpohon kanan (right subtree)
atau
procedure
yang
terlibat
untuk
Page 47 of 56
Struktur Data
end;
procedure setleft(p:nodeptr;x:integer);
var q:nodeptr;
begin {procedure setleft}
if p=nil then error(void insertion)
else if p.left<>nil then error(invalid insertion)
else begin
q:=maketree(x);
p.left:=q;
q.father:=p;
end;{else begin}
end;
procedure setright(p:nodeptr;x:integer);
var q:nodeptr;
begin {procedure setright}
if p=nil then error(void insertion)
else if p.right<>nil then error(invalid insertion)
else begin
q:=maketree(x);
p.right:=q;
q.father:=p;
end;{else begin}
end;
procedure DuplicateNode(p:nodeptr;number:integer)
var tree, q:nodeptr;
begin
tree:=maketree(number);
p:=tree;
q:=tree;
while (number<>p.info) and (q<>nil) do
begin
p:=q;
if number<p.info then
q:=p.left
else
q:=p.right;
end;
if number=p.info then
writeln(number,is a duplicate)
else if number < p.info then
setleft(p,number)
else setright(p,number)
end;
operasi-operasi lain yang
penelusuran(traverse):
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
terlibat
dalam
pohon
biner
adalah
operasi
Page 48 of 56
Struktur Data
Kunjungan secara pre-order, yang juga sering disebut dengan depth first order,
menggunakan urutan:
- cetak isi simpul yang dikunjungi.
- Kunjungi cabang kiri.
- Kunjungi cabang kanan.
{*procedure yang digunakan menggunakan procedure secara recursive*}
procedure preorder(tree:nodeptr);
begin
if tree <>nil then
with tree do
begin
writeln(info);{kunjungi dan cetak info}
preorder(left);{kunjungi left subtree}
preorder(right);{kunjungi right subtree}
end;{with begin}
end;
Kunjungan secara in-order, juga
menggunakan urutan:
- kunjungi cabang kiri.
- Cetak isi simpul yang dikunjungi.
- Kunjungi cabang kanan.
sering
disebut
dengan
symetric-order,
Page 49 of 56
Struktur Data
end;
3. Binary Search Tree
Binary search tree merupakan algoritma yang digunakan untuk mencari suatu nilai
kunci(key) yang berada dalam suatu tree/subtree.
Berikut ini akan diberikan suatu function untuk binary search tree:
function searchtree(key:integer):nodeptr;
var found:boolean;
tree, p:nodeptr;
begin
found:=false
p:=tree;
while (p<>nil) and (not found) do
begin
if key=p.info then
found:=true
else
if key<p.info then
p:=p.left
else
p:=p.right;
end;
if found then
searchtree:=p
else
searchtree:=nil;
end;
Latihan:
Implementasikan procedure dan function untuk operasi pohon biner (binary tree)
kedalam bahasa pemrograman!
Inputan:
Menu
1. create pohon biner
2. operasi pre-order
3. operasi in-order
4. operasi post-order
5. selesai
Tugas:
Buatlah program untuk mengimplementasikan binary search tree meliputi operasi:
1. pencarian nilai di pohon biner (binary search tree)
2. penyisipan nilai baru di pohon biner.
3. Penghapusan nilai di pohon biner.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 50 of 56
Struktur Data
MATERI 9
STRUKTUR GRAPH
Tujuan:
- Dapat memahami struktur graph
- Dapat memahami algoritma dari representasi graph
- Dapat meng-implementasikan algoritma struktur graph kedalam program
Graph merupakan kumpulan dari titik (node atau vertices) dan garis (arcs atau
edges). garis selalu diawali pada suatu titik dan diakhiri pada titik yang lain, maka
garis bisa dituliskan sebagai pasangan antara dua titik. Dalam notasi graph, garis
ditulis sebagai:
e=[u,v], yang berarti bahwa garis e berawal pada titik u dan berakhir pada titik v.
B
A
F
nodes={A,B,C,D,E,F,G,H}
edge = {(A,B),(A,C),(A,D),(C,D),(C,F),
(E,G),(A,A)}
Graph yang akan dibahas dimodul ini adalah graph berarah yang sudah dijelaskan
diatas.
1. Representasi Graph
Representasi graph dapat menggunakan Array atau linked-list. Representasi graph
misalnya untuk menentukan matrik tetangga (adjacent matrix).
{*representasi ini menggunakan array*}
const maxnodes = 50;
type nodeptr = 1..maxnodes;
adjmatrix=array[nodeptr,nodeptr] of boolean;
var
adj:adjmatrix;
procedure join(var adj:adjmatrix;node1,node2:nodeptr);
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 51 of 56
Struktur Data
begin
adj[node1,node2]:=true;
end;
Adjacent sets
2
vertex
1
2
3
4
Set
{2,3}
{3,4}
0
{1,2,3}
Adjacent T able
1 2 3 4
1
2
3
4
0
0
0
1
1
0
0
1
1
1
0
1
0
1
0
0
Page 52 of 56
Struktur Data
s:=a;
while s <> 0{nil} do
begin
dftraverse(s);
s:=select;
end;
end;
procedure dftraverse(var s:nodeptr;procedure visit(s:nodeptr));
var yptr:nodeptr;
begin
visited[s]:=true;
visit(s);
first( s, yptr,nd);
while(yptr<>0){nil} do
begin
if not visited(nd) then
dftraverse(nd);
nextsucc(s,yptr,nd);
end;
end;
function select:nodeptr;
var
i,last : integer;
found:boolean;
begin
{diinisialisasikan last=0}
i:=last+1;
found:=false;
while (not found) and (i<=maxvertex) do
begin
if visited(i) then
i:=i+1
else
found:=true;
end;
last:=i;
if found then
select:=i
else
select:=0;
end;
procedure first(var x:nodeptr;var yptr:nodeptr;ynode:nodeptr);
begin
nextsucc(x,0,ynode);
yptr:=ynode;
end;
procedure nextsucc(var x:nodeptr;var yptr:nodeptr,ynode:nodeptr)
var
i:integer;
finished:boolean;
begin
i:=yptr;
finished:=false;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 53 of 56
Struktur Data
repeat
i:=i+1;
if i > maxvertex then
begin
finished:=true;
yptr:=0;
ynode:=0;
end
else
if adj(x,i) then
begin
finished:=true;
yptr:=i;
ynode:=I;
end;
until finished;
end;
function adj(p,q:nodeptr):boolean;
var
r:nodeptr;
found:boolean;
begin
r:=node[p].point;
found:=false;
while (r<>0) and (not found) do
begin
if node[r].point:=q then
found:=true
else
r:=node[r].next;
end;
adj:=found;
end;
2.2
Algoritma Breadth-First
Algoritma breath-first adalah algoritma yang melakukan proses penelusuran
terhadap semua suksesor dalam hal ini node yang akan dikunjungi sebelum
dikunjungi oleh suksesor-suksesor yang lain. Berikut procedure bftraverse(s).
Catatan
:
untuk
procedure
maupun
function
seperti
init(ndqueue),insert(ndqueue,s), dan remove(ndqueue,s) sudah dijelaskan di modul
3 STACK dan QUEUE
procedure bftraverse(var s:nodeptr;procedure visit(var v:nodeptr));
var ndqueue:entry;
begin
init(ndqueue);
while s <> 0 do
begin
visit(s);
insert(ndqueue,s);
while not empty(ndqueue) do
begin
x:=remove(ndqueue);
first(x,yptr,nd);
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 54 of 56
Struktur Data
while (nd<>0) do
begin
if not visited(nd) then
begin
visit(nd);
insert(ndqueue,nd);
end;
nextsucc(x,yptr,nd)
end;
end;
s:=select;
end;
end;
2.3
Page 55 of 56
Struktur Data
end;
end;
end;
current:=k;
perm:=perm+[current]
end;
d:=distance[t];
end;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]
Page 56 of 56