SlideShare a Scribd company logo
1 of 42
Download to read offline
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 1 of 42
MATERI 1
PENGANTAR STRUKTUR DATA
Tujuan :
• Mengetahui dan memahami tentang Struktur Data
• Memahami mengenai tipe data standard
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
TIPE DATA STANDAR
Tipe data standar merupakan tipe data yang tersedia pada kebanyakan
komputer sebagai built-in features.
Tipe data standar yaitu :
- Integer
- Real
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 2 of 42
- 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
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
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 3 of 42
– n, sebanyak jum karakter.
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.
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 4 of 42
MATERI 2
ARRAY
Tujuan:
• Mengetahui dan memahami struktur data statis
• Memahami operasi-operasi array
Array adalah sekumpulan memori untuk suatu nama yang memiliki elemen-
elemen 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]
2. Representasi array 2 dimensi, contoh : matriks.
A[1,1] A[1,2] A[1,N]
A[1,1] A[1,N]
A[2,1] A[2,N]
A[N,1] A[N,N]
Pendeklarasian array di Pascal :
- Untuk array 1 dimensi :
Const
IdxAwal = 1;
IdxAkhir = 100;
{Pendeklarasian pada bagian type}
Type
TipeInfo = …;
TabInfo = Array [IdxAwal .. IdxAkhir] of TipeInfo;
{Pendeklarasian pada bagian variabel}
Var
<identifikasi_variabel> : TabInfo;
Kategori operasi-operasi dasar terhadap tabel array :
1. Traversal
2. Searching
3. Sorting
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 5 of 42
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
Begin
Write (‘Elemen ke-‘,i,’ = ‘);
Writeln ( TI [ i ] );
End;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 6 of 42
End;
MATRIKS
Merupakan array 2 dimensi, setiap elemen Matriks diidentifikasi oleh nama, indeks
baris dan indeks kolom.
1
2
↓
N1
1 2 → N2
Pendeklarasian Matriks (array 2 dimensi) :
Const
Idxawal = 1;
Idxakhir = 100;
Type
TipeInfo = …;
TabInfo = Array [ Idxawal .. Idxakhir, Idxawal .. Idxakhir] of TipeInfo;
Var
<identifikasi_variabel> : TabInfo;
Proses – proses/operasi terhadap Matriks :
1. Pengisian elemen matriks dari fil
2. Pengisian elemen matriks khusus dengan assignment
3. Penulisan elemen matriks
4. Penjumlahan matriks
5. Perkalian matriks
Algoritma-algoritma Operasi Matriks :
1. Pengisian elemen matriks dari fil
Read N1, N2 {N1 : jumlah baris, N2 : jumlah kolom}
I ← 1
While I <= N1 do
J ← 1
While J <= N2 do
Read M [I,J]
J ← J+1
EndWhile
I ← I+1
EndWhile
2. Pengisian elemen matriks khusus dengan assignment
a. Matriks N1 x N2 yang semua elemennya 1 :
I ← 1
While I <= N1 do
J ← 1
While J <= N2 do
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 7 of 42
M [I,J] ← 1
J ← J+1
EndWhile
I ← I+1
EndWhile
b. Matriks identitas ordo N
Read N
I ← 1
While I <= N do
J ← 1
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
I ← 1
While I <= N1 do
J ← 1
While J <= N2 do
Write M[I,J]
J ← J+1
EndWhile
I ← I+1
EndWhile
4. Penjumlahan matriks
I ← 1
While I <= N1 do
J ← 1
While J <= N2 do
C[I,J] ← A[I,J] + B[I,J]
J ← J+1
EndWhile
I ← I+1
EndWhile
5. Perkalian matriks
I ← 1
While I <= N1 do {N1 = baris Matriks A}
J ← 1
While J <= N2 do {N2 = baris Matriks B}
C[I,J] ← 0
K ← 1
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 8 of 42
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
I ← I + 1
EndWhile
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!
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 9 of 42
MATERI 3
STRUKTUR DATA DINAMIS ( POINTER )
Tujuan:
• Mengetahui dan memahami struktur data dinamis
• Memahami operasi-operasi dasar dari Linked List
Pointer adalah variabel yang berisi alamat dari suatu lokasi struktur data.
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 : Mengakses data pada elemen yang beralamat di P
P^. Berikut : Mengakses alamat elemen sesudah P
Pendefinisian dalam Pascal adalah sebagai berikut :
Type
Info_Type = Integer;
List = ^ElmList;
ElmList = Record
Info : Info_Type;
Berikut : List;
End;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 10 of 42
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) : Membuat node baru dari memori komputer lalu menyimpan
alamat di P.
RELEASE (P) atau
DISPOSE (P) : Membebaskan memori komputer dari suatu node yang alamatnya
ditunjuk oleh P.
Inisialisasi List
Inisialisasi adalah pemberian nilai awal terhadap variabel list (pointer).
Procedure Inisialisasi (Var Kepala : List);
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;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 11 of 42
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
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); {Bila masih kosong}
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 12 of 42
Else
Begin
Akhir := Kepala;
While (Akhir <> Nil) Do
Akhir := Akhir^. Berikut;
P^. Berikut := Nil;
Akhir^. Berikut := P;
End;
End;
c. Penyisipan sesudah elemen P
Procedure SisipSesudah (Var Prec : List; P : List);
Begin
Prec^. Berikut := P^. Berikut;
P^. Berikut := Prec;
End;
Penghapusan List / Deletion
Deletion adalah proses penghapusan list yang dianggap tidak diperlukan
lagi.
Penghapusan dilakukan dengan tahapan :
- Lepaskan elemen dari rantai Linked-List.
- Bebaskan memori yang digunakan dengan DISPOSE atau RELEASE.
a. Penghapusan elemen pertama
Procedure HapusElemenPertama (Var Kepala : List);
Begin
If Kepala <> Nil Then
Begin
P := Kepala;
Kepala := Kepala^. Berikut; {Kepala maju untuk menuju
Dispose (P); elemen berikutnya}
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;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 13 of 42
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;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 14 of 42
MATERI 4
OPERASI – OPERASI DASAR II PADA LINKED LIST
Tujuan:
• Memahami mengenai operasi khusus dari list berkait
• Memahami algoritma dan operasi khusus list berkait
Operasi – operasi dasar yang akan dibahas pada modul ini adalah operasi
penggabungan, operasi-operasi khusus pada varian Linked list.
Penggabungan List
Dua linked list yang terpisah dapat digabungkan menjadi list tunggal dengan
algoritma merging. Untuk penggabungan 2 list, dimana elemen pertama list II
adalah elemen berikutnya dari elemen terakhir list I, algoritmanya :
Kepala 1
List Pertama : a b c d
Kepala 2
List Kedua :
x y z
Hasil Gabungan :
Kepala 1
a b c d x y z
Procedure GabungListAkhir (var Kepala1, Kepala2 : List);
Begin
PencElemenAkhir (Kepala1, P);
If P <> Nil then
P^. Berikut := Kepala2
Else
Kepala1 := Kepala2;
End;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 15 of 42
Varian Linked List
Varian Linked List adalah Linked List yang tidak sesederhana representasi di
atas.
1. List Berkait dengan kepala dan ekor.
Kepala = Ekor = Nil → untuk List Kosong
Kepala = Ekor <> Nil → List beranggotakan 1 elemen
Kepala Ekor
2. List Sirkuler.
3. List dengan pointer ganda (Double Linked List).
4. List beranak bertingkat (menggunakan field pointer tambahan untuk kepala ke
list anak).
Kepala
Anak-anak
Cucu
5. List kombinasi dari varian-varian tersebut.
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 16 of 42
Operasi-operasi pada List Sirkuler
a. Kunjungan pada tiap elemen
Procedure PlrListSirkuler (var Kepala : List);
Begin
If (Kepala <> Nil) then
Begin
P:= Kepala;
Repeat
Proses (P);
P:= P^. Berikut;
Until P = Kepala;
End;
End;
b. Sisipkan elemen baru
Sebagai elemen pertama :
Procedure SisipPtmSirkuler (var Kepala : List);
Var
Q : List;
Begin
If (Kepala = Nil) then
Begin
Kepala := P;
P^. Berikut := Kepala ; {menunjuk dirinya sendiri}
End
Else
Begin
Q := Kepala;
While (Q^. Berikut <> Kepala) Do {menunjuk kepala / link
Q := Q^.Berikut; sirkulernya}
P^. Berikut := Kepala;
Q^. Berikut := P;
Kepala := P;
End;
End;
Sebagai elemen terakhir :
Procedure SisipAkrSirkuler (var Kepala : List; P : List);
Var
Q : List;
Begin
If (Kepala = Nil) Then
Kepala := P
Else
Begin
Q := Kepala;
While (Q ^. Berikut <> Kepala) do {menunjuk Kepala / Link
Q := Q^. Berikut; sirkulernya}
Q^. Berikut := P;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 17 of 42
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;
Dispose (P);
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 18 of 42
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 :
- Pointer Sebelum tidak digunakan.
- Algoritma sama dengan Linked List pointer tunggal
b. Penyisipan sebagai elemen pertama
Procedure SisipAwListGanda (var Kepala : List; P : List);
Begin
P^. Berikut := Kepala;
If Kepala <> Nil Then
Kepala^. Sebelum := P;
Kepala := P;
P^. Sebelum := Nil;
End;
c. Penyisipan sebagai elemen terakhir :
Procedure SisipAkListGanda (Var Kepala : List; P : List);
Begin
PencElemenAkhir (Kepala, Q); {Pemanggilan Prosedur PencElemen Akhir}
P^. Berikut := Nil;
P^. Sebelum := Q; {Q : Alamat elemen terakhir atau Nil}
If (Q <> Nil) then
Q^. Berikut := P;
End;
d. Penyisipan sebagai suksesor dari Q
Procedure SisipSesudahListGanda (var P : List; Q : List);
Begin
P^. Berikut := Q^. Berikut;
P^. Sebelum := Q;
If (Q^. Berikut <> Nil) Then
Q^. Berikut^. Sebelum := P;
Q^. Berikut := P;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 19 of 42
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;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 20 of 42
A
B
C
D
E
F
TOP
BOTTOM
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:
1.1 Representasi Stack
Representasi stack dapat dibuat dengan struktur data Array maupun List berkait.
Dalam modul ini akan direpresentasikan dengan menggunakan struktur data Array.
Deklarasi untuk stack:
const maxstack = 100;
type stack = record
item:array[1..maxstack] of char;
top:0...maxstack
end;
var s:stack;
1.2 Operasi-operasi dalam stack
1.2.1 Operasi Penyisipan (PUSH)
Operasi ini dilakukan untuk menyisipkan data pada stack yang dikenal
dengan operasi PUSH. Berikut procedure untuk operasi stack:
procedure push(var s:stack; x:integer);
begin
if s.top=maxstack then error(‘stack overflow’)
else
begin
s.top:=s.top+1;
s.item[s.top]:=x;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 21 of 42
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^*/-
Berikut ini procedure dan function untuk operasi polish notation.
function valensi(op:char):integer;
begin
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;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 22 of 42
A B C D
Front
Rear
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;
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:
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 23 of 42
2.1 Representasi Queue
Representasi Queue dapat menggunakan struktur data Array maupun list
berkait. Dalam modul ini akan direpresentasikan menggunakan struktur data list
berkait. Berikut deklarasi queue:
type
Pqueue = ↑queue;
queue = record
items: integer;
next:pqueue;
end;
var
front,rear:Pqueue;
procedure init_queue(var front,rear:pqueue);
begin
front:=nil;
rear:=nil;
end;
2.2 Operasi-operasi queue
2.2.1 Operasi Insert
Operasi ini digunakan untuk menyisipkan elemen dalam queue, yang
dilakukan pada sisi belakang (rear). Berikut procedure untuk operasi insert:
procedure insert(var front,rear:pqueue; x:integer);
var p:pqueue;
begin
new(p);
p↑.items:=x;
if empty(front) then
begin
p↑.next:=front;
front:=p
rear:=p;
end
else
begin
rear↑.next:=p;
p↑.next:=nil;
rear:=p;
end;
end;
2.2.2 Operasi Remove
Operasi ini digunakan untuk mengambil atau melayani elemen yang ada
dalam antrian(queue). Berikut ini procedure untuk remove queue:
procedure remove(var front,rear:pqueue);
var p:pqueue;
begin
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 24 of 42
if empty(front) then error(‘queue underflow’)
else
begin
p:=front;
front:=front↑.next;
if front=nil then rear:=nil;
dispose(p);
end;
end;
empy(q) merupakan fungsi untuk mengetahui bahwa antrian kosong atau
tidak. Berikut ini fungsi untuk empty(q):
function empty(q:pqueue):boolean;
begin
if front=nil then
empty:=true {queue adalah kosong}
else
empty:=false; {queue adalah tidak kosong}
end;
Latihan.
1. Buatlah program untuk mengkonversikan dari notasi infix ke postfix. gunakanlah
procedure dan function yang telah dibuat!
2. Buatlah program berdasarkan proses-proses dibawah ini untuk
mengimplementasikan queue, gunakanlah procedure dan function yang telah
dibuat!
insert(front,rear,A);
insert(front,rear,B);
insert(front,rear,C);
insert(front,rear,D)
remove(front,rear);
remove(front,rear)
insert(front,rear,E);
insert(front,rear,F);
remove(front,rear);
kemudian tampilkan hasil akhir dari proses tersebut!
Tugas.
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;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 25 of 42
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.
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 26 of 42
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
endwhile
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 27 of 42
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Bubble Sort!
25 27 10 8 76 21
1 2 3 4 5 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 27 10 8 76 21
1 2 3 4 5 6
SELECTION SORT
Selection Sort merupakan metoda pengurutan data secara pemilihan langsung.
Dasarnya : cari nilai paling tinggi/rendah lalu tempatkan dibagian ujung array
Ada dua jenis algoritma pemgurutan seleksi ditinjau dari pemilihan elemen
maksimum/minimum, yaitu:
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 28 of 42
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 27 10 8 76 21
1 2 3 4 5 6
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 29 of 42
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 :=1 {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[imaks] 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 27 10 8 76 21
1 2 3 4 5 6
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 30 of 42
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[1…N]}
{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
k 0
while ((k<N) and (L[k]!=X)) Do
K k+1
endwhile
if (L[k]=x) then
ketemu true
else
ketemu false
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 31 of 42
endif
CONTOH PENCARIAN BERUNTUN
13 16 14 21 76 15
0 1 2 3 4 5
Misalkan nilai yang dicari adalah X=21
Elemen yang dibandingkan : 13,16,14,21 (ditemukan)
Indeks Array yang dikembalikan:IDX = 3
Misalkan nilai yang dicari adalah X =13;
Elemen yang dibandingkan:13 (ditemukan)
Indeks Array yang dikembalikan:IDX=0
Misalkan nilai yang dicari adalah X=17;
Elemen yang dibandingkan:13,16,14,21,76,15 (tidak ditemukan)
Indeks array yang dikembalikan : IDX = -1
PENCARIAN BAGI DUA (BINARY SEARCH)
Adalah proses mencari data dengan membagi data atas dua bagian secara terus
menerus sampai elemen yang dicari ditemukan, atau indeks kiri lebih besar dari
indeks kanan.
Metoda ini lebih efisien dari metoda pencarian beruntun apabila data telah terurut.
ALGORITMA
Function BinSearch(input L:LarikInt, input N:Integer, input X:integer) integer
{Mencari keberadaan nilai X didalam larik[1…N]}
{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
i,j :integer
k :integer {indeks larik}
ketemu :boolean {flag apabila X ketemu}
DESKRIPSI
i 1
j N
ketemu false
while ((not ketemu) and (i<=j)) Do
k (i+j) div 2
if (L[k]=X) then
ketemu true
else
if (L[k]<X) then
i k+1 {batas kiri diubah}
else
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 32 of 42
j k-1 {batas kanan diubah}
endif
endif
endwhile
if (ketemu) then
retun k
else
return -1
endif
CONTOH PENCARIAN BAGI DUA
7 10 13 16 18 21 76 81
1 2 3 4 5 6 7 8
Misalkan nilai yand dicari adalah X=21
i=1 j=8
k=(i+j) div 2=(1+8) div 2 = 4
L[4]=21? Tidak! Harus diputuskan apakah pencarian dilakukan di bagian kiri
atau bagian kanan
L[4] < 21? Ya! Lakukan pencarian di sebelah kanan
i=k+1 = 4+1=5
j=8
k=(i+j) div 2=(5+8) div 2=6
L[6]=21? Ya, Proses pencarian selesai.
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 33 of 42
A
CB
D
I
E
J K
F G H
L M
N O
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
1. Pohon Biner
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)
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 34 of 42
Contoh pohon biner
2. Deklarasi Pada Pohon Biner
Representasi pada pohon biner akan dideklarasikan dengan menggunakan struktur
data list berkait (linked-list)
Type nodeptr=↑nodetype
nodetype=record
info:integer;
left:nodeptr;
right:nodeptr;
father:nodeptr;
end;
Berikut ini akan diberikan fungsi atau procedure yang terlibat untuk
merepresentasikan pohon biner:
{*fungsi ini digunakan untuk membuat/mengalokasikan node dan men-set dalam
root dalam single node binary tree*}
function maketree(x:integer):nodeptr;
var p:nodeptr;
begin{function maketree}
new(p);
p↑.info:=x;
p↑.left:=nil;
p↑.right:=nil;
p↑.father:=nil;
maketree:=p;
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);
A
CB
D
I
E
J K
F H
L M
N O
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 35 of 42
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 terlibat dalam pohon biner adalah operasi
penelusuran(traverse):
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
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 36 of 42
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 sering disebut dengan symetric-order,
menggunakan urutan:
- kunjungi cabang kiri.
- Cetak isi simpul yang dikunjungi.
- Kunjungi cabang kanan.
{*procedure yang digunakan menggunakan procedure secara recursive*}
procedure inorder(tree:nodeptr);
begin
if tree <>nil then
with tree↑ do
begin
inorder(left);{kunjungi left subtree}
writeln(info);{kunjungi dan cetak info}
inorder(right);{kunjungi right subtree}
end;{with begin}
end;
Kunjungan secara post-order menggunkan urutan:
- kunjungan cabang kiri
- kunjungi cabang kanan.
- Cetak isi simpul yang dikunjungi.
{*procedure yang digunakan menggunakan procedure secara recursive*}
procedure inorder(tree:nodeptr);
begin
if tree <>nil then
with tree↑ do
begin
postorder(left);{kunjungi left subtree}
postorder(right);{kunjungi right subtree}
writeln(info);{kunjungi dan cetak info}
end;{with begin}
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
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 37 of 42
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.
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 38 of 42
A
B
C
D
F
E G
H
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.
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);
begin
adj[node1,node2]:=true;
end;
procedure remv(var adj:adjmatrix;node1,node2:nodeptr);
begin
adj[node1,node2]:=false;
end;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 39 of 42
function adjacent(adj:adjmatrix;node1,node2:nodeptr):boolean
begin
if adj[node1,node2] then
adjacent:=true
else
adjacent:=false;
end;
contoh:
2. Penelusuran Graph (Graph Traversal)
Penelusuran Graph dibagi menjadi 2 metoda:
Sebelumnya kita deklarasikan terlebih dahulu struktur datanya:
const maxvertex=50;
type
nodeptr=0…maxvertex;
queue = record
front,rear:nodeptr;
entry:array[nodeptr] of nodeptr;
end;
2.1 Algoritma Depth-First
Teknik ini menggunakan rountine dftraverse(s) yang digunakan untuk
mengunjungi semua nodes yang dapat diraih oleh variabel s. Berikut algoritma-
algoritma penunjang untuk depth-first:
procedure DepthFirst(var s:nodeptr;procedure visit(var v:nodeptr));
var
nd:integer;
visited=array[nodeptr] of boolean;
begin
for nd:=0 to maxvertex do visited[nd]:=false;
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;
1 2
4 3
Adjacent sets
vertex Set
1
2
3
4
{2,3}
{3,4}
0
{1,2,3}
Adjacent Table
1 2 3 4
1
2
3
4
0 1 1 0
0 0 1 1
0 0 0 0
1 1 1 0
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 40 of 42
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;
repeat
i:=i+1;
if i > maxvertex then
begin
finished:=true;
yptr:=0;
ynode:=0;
end
else
if adj(x,i) then
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 41 of 42
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);
while (nd<>0) do
begin
if not visited(nd) then
begin
visit(nd);
insert(ndqueue,nd);
end;
nextsucc(x,yptr,nd)
end;
end;
Struktur Data
Yuda Syahidin,ST
[email:yudasy@yahoo.com]
[http://www.yudasy.web.id] Page 42 of 42
s:=select;
end;
end;
2.3 Algoritma Greedy untuk mencari lintasan terpendek(shortest Path)
Shortest path adalah mencari lintasan terpendek yang menghubungkan 2
buah node dalam graph. Berikut ini procedure untuk mencari shortest path:
const maxnodes=…;
type nodeptr = 1..maxnodes;
weightmatrix=array[nodeptr,nodeptr] of integer;
nodeset=set of nodeptr;
nodearray=array[nodeptr] of nodeptr;
procedure shortpath(var weight:weightmatrix;s,t:nodeptr;
var d:integer;var precede:nodearray);
var distance : array[nodeptr] of integer;
current, i,k:nodeptr;
perm:nodeset;
smalldist, newdist,dc,d:integer;
begin
{inisialisasi}
perm:=[s];
for i:=1 to maxnodes do distance[i]:=maxint;
distance[s]:=0;
current :=s;
while (current <>t) do
begin
smalldist:=maxint;
dc:=distance[current];
for i:=1 to maxnodes do
begin
if not (I in perm) then
begin
newdist:=dc+weight[current,i];
if newdist<distance[i] then
begin
distance[i]:=newdist;
precede[i]:=current;
end;
if distance[i]<smalldist then
begin
smalldist:=distance[i];
k:=i;
end;
end;
end;
current:=k;
perm:=perm+[current]
end;
d:=distance[t];
end;

More Related Content

What's hot

Operasi larik
Operasi larikOperasi larik
Operasi larikMuhishaq1
 
Materi Kisi Kisi Pada Pembelajaran Evaluasi
Materi Kisi Kisi Pada Pembelajaran EvaluasiMateri Kisi Kisi Pada Pembelajaran Evaluasi
Materi Kisi Kisi Pada Pembelajaran EvaluasiPutri Viona
 
Penyajian dan pengolahan data kelas 6 sd
Penyajian dan pengolahan data kelas 6 sdPenyajian dan pengolahan data kelas 6 sd
Penyajian dan pengolahan data kelas 6 sdLutpiatul Hikmah
 
Ppt singkat Pengantar Statistika kelompok 4
Ppt singkat Pengantar Statistika kelompok 4Ppt singkat Pengantar Statistika kelompok 4
Ppt singkat Pengantar Statistika kelompok 4Maysy Maysy
 
6 Algoritma Pengurutan Data
6 Algoritma Pengurutan Data6 Algoritma Pengurutan Data
6 Algoritma Pengurutan DataSimon Patabang
 
Materi Matriks
Materi Matriks Materi Matriks
Materi Matriks Abu Isral
 
Materi MATRIKS
Materi MATRIKSMateri MATRIKS
Materi MATRIKSAbu Isral
 
03.33 JAVA SE_multidimensional arays
03.33 JAVA SE_multidimensional arays03.33 JAVA SE_multidimensional arays
03.33 JAVA SE_multidimensional araysJefri Fahrian
 
Ppt singkat kel 8 pengantar statistika
Ppt singkat kel 8 pengantar statistikaPpt singkat kel 8 pengantar statistika
Ppt singkat kel 8 pengantar statistikasintia 67
 

What's hot (11)

Operasi larik
Operasi larikOperasi larik
Operasi larik
 
Materi Kisi Kisi Pada Pembelajaran Evaluasi
Materi Kisi Kisi Pada Pembelajaran EvaluasiMateri Kisi Kisi Pada Pembelajaran Evaluasi
Materi Kisi Kisi Pada Pembelajaran Evaluasi
 
08 bab7
08 bab708 bab7
08 bab7
 
3. matriks
3. matriks3. matriks
3. matriks
 
Penyajian dan pengolahan data kelas 6 sd
Penyajian dan pengolahan data kelas 6 sdPenyajian dan pengolahan data kelas 6 sd
Penyajian dan pengolahan data kelas 6 sd
 
Ppt singkat Pengantar Statistika kelompok 4
Ppt singkat Pengantar Statistika kelompok 4Ppt singkat Pengantar Statistika kelompok 4
Ppt singkat Pengantar Statistika kelompok 4
 
6 Algoritma Pengurutan Data
6 Algoritma Pengurutan Data6 Algoritma Pengurutan Data
6 Algoritma Pengurutan Data
 
Materi Matriks
Materi Matriks Materi Matriks
Materi Matriks
 
Materi MATRIKS
Materi MATRIKSMateri MATRIKS
Materi MATRIKS
 
03.33 JAVA SE_multidimensional arays
03.33 JAVA SE_multidimensional arays03.33 JAVA SE_multidimensional arays
03.33 JAVA SE_multidimensional arays
 
Ppt singkat kel 8 pengantar statistika
Ppt singkat kel 8 pengantar statistikaPpt singkat kel 8 pengantar statistika
Ppt singkat kel 8 pengantar statistika
 

Viewers also liked (20)

Plano Plurianual: Aspectos legais e constitucionais
Plano Plurianual: Aspectos legais e constitucionaisPlano Plurianual: Aspectos legais e constitucionais
Plano Plurianual: Aspectos legais e constitucionais
 
Quimica
QuimicaQuimica
Quimica
 
Набиуллина Аделина
Набиуллина АделинаНабиуллина Аделина
Набиуллина Аделина
 
Ponente grupo 7 3
Ponente grupo 7 3 Ponente grupo 7 3
Ponente grupo 7 3
 
Plantilla y contenido presentaciones educa regional 20140
Plantilla y contenido presentaciones educa regional 20140Plantilla y contenido presentaciones educa regional 20140
Plantilla y contenido presentaciones educa regional 20140
 
empresa y calidad total
empresa y calidad totalempresa y calidad total
empresa y calidad total
 
Сайфеева Алсу
Сайфеева АлсуСайфеева Алсу
Сайфеева Алсу
 
Ap m5 ak kliring
Ap m5 ak kliringAp m5 ak kliring
Ap m5 ak kliring
 
Intervin. Divino (Bulgaria), enero 2012
Intervin. Divino (Bulgaria), enero 2012Intervin. Divino (Bulgaria), enero 2012
Intervin. Divino (Bulgaria), enero 2012
 
Ap m7 ak komitmen
Ap m7 ak komitmenAp m7 ak komitmen
Ap m7 ak komitmen
 
Como empezar una wiki
Como empezar una wikiComo empezar una wiki
Como empezar una wiki
 
Practica 3 pp lida y uru
Practica 3 pp lida y uruPractica 3 pp lida y uru
Practica 3 pp lida y uru
 
So manajemen proses_komplit.hhhhh
So manajemen proses_komplit.hhhhhSo manajemen proses_komplit.hhhhh
So manajemen proses_komplit.hhhhh
 
Blogging seri1
Blogging seri1Blogging seri1
Blogging seri1
 
Bosques encantados de gran bretaña
Bosques encantados de gran bretañaBosques encantados de gran bretaña
Bosques encantados de gran bretaña
 
08 recepta
08 recepta 08 recepta
08 recepta
 
snl
snlsnl
snl
 
Affif struk data(tugas-hal.54)
Affif struk data(tugas-hal.54)Affif struk data(tugas-hal.54)
Affif struk data(tugas-hal.54)
 
Spanish study
Spanish studySpanish study
Spanish study
 
INTERNET
INTERNETINTERNET
INTERNET
 

Similar to Struktur Data

Minggu 09 - Array dan Tipe Bentukan.ppsx
Minggu 09 -  Array dan Tipe Bentukan.ppsxMinggu 09 -  Array dan Tipe Bentukan.ppsx
Minggu 09 - Array dan Tipe Bentukan.ppsxIndraWahyu33
 
Pertemuan vi
Pertemuan viPertemuan vi
Pertemuan viwindi1
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPrasetyo Adi
 
Struktuk data array
Struktuk data arrayStruktuk data array
Struktuk data arraylutchum
 
Laporan praktikum modul v
Laporan praktikum modul vLaporan praktikum modul v
Laporan praktikum modul vDevi Apriansyah
 
Kontrak Perkuliahan
Kontrak PerkuliahanKontrak Perkuliahan
Kontrak Perkuliahanformatik
 
Kontrak Perkuliahan
Kontrak PerkuliahanKontrak Perkuliahan
Kontrak Perkuliahanformatik
 
Bab ii keg pembel 6 array
Bab ii keg pembel 6  arrayBab ii keg pembel 6  array
Bab ii keg pembel 6 array087dwi
 
Tugas2
Tugas2Tugas2
Tugas2Av Ri
 
Materi 3 - Pengantar Pengolahan Obyek.pdf
Materi 3 - Pengantar Pengolahan Obyek.pdfMateri 3 - Pengantar Pengolahan Obyek.pdf
Materi 3 - Pengantar Pengolahan Obyek.pdfriky58
 
Array 2 Dimensi.pptx
Array 2 Dimensi.pptxArray 2 Dimensi.pptx
Array 2 Dimensi.pptxLPKIATUGAS
 

Similar to Struktur Data (20)

Minggu 09 - Array dan Tipe Bentukan.ppsx
Minggu 09 -  Array dan Tipe Bentukan.ppsxMinggu 09 -  Array dan Tipe Bentukan.ppsx
Minggu 09 - Array dan Tipe Bentukan.ppsx
 
207 p09
207 p09207 p09
207 p09
 
Pertemuan V
Pertemuan VPertemuan V
Pertemuan V
 
Pertemuan IV Teori
Pertemuan IV TeoriPertemuan IV Teori
Pertemuan IV Teori
 
Pertemuan vi
Pertemuan viPertemuan vi
Pertemuan vi
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
 
Struktuk data array
Struktuk data arrayStruktuk data array
Struktuk data array
 
Laporan praktikum modul v
Laporan praktikum modul vLaporan praktikum modul v
Laporan praktikum modul v
 
Kontrak Perkuliahan
Kontrak PerkuliahanKontrak Perkuliahan
Kontrak Perkuliahan
 
Kontrak Perkuliahan
Kontrak PerkuliahanKontrak Perkuliahan
Kontrak Perkuliahan
 
Pert.3 array
Pert.3  arrayPert.3  array
Pert.3 array
 
Bab ii keg pembel 6 array
Bab ii keg pembel 6  arrayBab ii keg pembel 6  array
Bab ii keg pembel 6 array
 
Tugas2
Tugas2Tugas2
Tugas2
 
Array
ArrayArray
Array
 
Tistrukdat1
Tistrukdat1Tistrukdat1
Tistrukdat1
 
Panduan excel 2007
Panduan excel 2007Panduan excel 2007
Panduan excel 2007
 
tugas algoritma
tugas algoritmatugas algoritma
tugas algoritma
 
Materi 3 - Pengantar Pengolahan Obyek.pdf
Materi 3 - Pengantar Pengolahan Obyek.pdfMateri 3 - Pengantar Pengolahan Obyek.pdf
Materi 3 - Pengantar Pengolahan Obyek.pdf
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
Array 2 Dimensi.pptx
Array 2 Dimensi.pptxArray 2 Dimensi.pptx
Array 2 Dimensi.pptx
 

Recently uploaded

Fisika Dasar Usaha dan Energi Fisika.pptx
Fisika Dasar Usaha dan Energi Fisika.pptxFisika Dasar Usaha dan Energi Fisika.pptx
Fisika Dasar Usaha dan Energi Fisika.pptxPutriAriatna
 
Sistem Bilangan Riil (Pertidaksamaan linier)
Sistem Bilangan Riil (Pertidaksamaan linier)Sistem Bilangan Riil (Pertidaksamaan linier)
Sistem Bilangan Riil (Pertidaksamaan linier)ratnawijayanti31
 
Materi Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptxMateri Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptxIKLASSENJAYA
 
Dampak Bioteknologi di Bidang Pertanian.pdf
Dampak Bioteknologi di Bidang Pertanian.pdfDampak Bioteknologi di Bidang Pertanian.pdf
Dampak Bioteknologi di Bidang Pertanian.pdfssuser4743df
 
Power Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptxPower Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptxSitiRukmanah5
 
Konsep Agribisnis adalah suatu kesatuan kegiatan meliputi salah satu atau ...
Konsep	Agribisnis	adalah	suatu	kesatuan	kegiatan  meliputi		salah	satu	atau		...Konsep	Agribisnis	adalah	suatu	kesatuan	kegiatan  meliputi		salah	satu	atau		...
Konsep Agribisnis adalah suatu kesatuan kegiatan meliputi salah satu atau ...laila16682
 
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannyaModul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannyaAnggrianiTulle
 
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptxCASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptxresidentcardio13usk
 
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdfmateri+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdfkaramitha
 
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptxPPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptxSDN1Wayhalom
 
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptxTEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptxSyabilAfandi
 
kekeruhan tss, kecerahan warna sgh pada laboratprium
kekeruhan tss, kecerahan warna sgh pada laboratpriumkekeruhan tss, kecerahan warna sgh pada laboratprium
kekeruhan tss, kecerahan warna sgh pada laboratpriumfebrie2
 

Recently uploaded (12)

Fisika Dasar Usaha dan Energi Fisika.pptx
Fisika Dasar Usaha dan Energi Fisika.pptxFisika Dasar Usaha dan Energi Fisika.pptx
Fisika Dasar Usaha dan Energi Fisika.pptx
 
Sistem Bilangan Riil (Pertidaksamaan linier)
Sistem Bilangan Riil (Pertidaksamaan linier)Sistem Bilangan Riil (Pertidaksamaan linier)
Sistem Bilangan Riil (Pertidaksamaan linier)
 
Materi Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptxMateri Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptx
 
Dampak Bioteknologi di Bidang Pertanian.pdf
Dampak Bioteknologi di Bidang Pertanian.pdfDampak Bioteknologi di Bidang Pertanian.pdf
Dampak Bioteknologi di Bidang Pertanian.pdf
 
Power Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptxPower Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptx
 
Konsep Agribisnis adalah suatu kesatuan kegiatan meliputi salah satu atau ...
Konsep	Agribisnis	adalah	suatu	kesatuan	kegiatan  meliputi		salah	satu	atau		...Konsep	Agribisnis	adalah	suatu	kesatuan	kegiatan  meliputi		salah	satu	atau		...
Konsep Agribisnis adalah suatu kesatuan kegiatan meliputi salah satu atau ...
 
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannyaModul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannya
 
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptxCASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
 
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdfmateri+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
 
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptxPPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
 
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptxTEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
 
kekeruhan tss, kecerahan warna sgh pada laboratprium
kekeruhan tss, kecerahan warna sgh pada laboratpriumkekeruhan tss, kecerahan warna sgh pada laboratprium
kekeruhan tss, kecerahan warna sgh pada laboratprium
 

Struktur Data

  • 1. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 1 of 42 MATERI 1 PENGANTAR STRUKTUR DATA Tujuan : • Mengetahui dan memahami tentang Struktur Data • Memahami mengenai tipe data standard 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 TIPE DATA STANDAR Tipe data standar merupakan tipe data yang tersedia pada kebanyakan komputer sebagai built-in features. Tipe data standar yaitu : - Integer - Real
  • 2. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 2 of 42 - 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 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
  • 3. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 3 of 42 – n, sebanyak jum karakter. 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.
  • 4. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 4 of 42 MATERI 2 ARRAY Tujuan: • Mengetahui dan memahami struktur data statis • Memahami operasi-operasi array Array adalah sekumpulan memori untuk suatu nama yang memiliki elemen- elemen 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] 2. Representasi array 2 dimensi, contoh : matriks. A[1,1] A[1,2] A[1,N] A[1,1] A[1,N] A[2,1] A[2,N] A[N,1] A[N,N] Pendeklarasian array di Pascal : - Untuk array 1 dimensi : Const IdxAwal = 1; IdxAkhir = 100; {Pendeklarasian pada bagian type} Type TipeInfo = …; TabInfo = Array [IdxAwal .. IdxAkhir] of TipeInfo; {Pendeklarasian pada bagian variabel} Var <identifikasi_variabel> : TabInfo; Kategori operasi-operasi dasar terhadap tabel array : 1. Traversal 2. Searching 3. Sorting
  • 5. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 5 of 42 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 Begin Write (‘Elemen ke-‘,i,’ = ‘); Writeln ( TI [ i ] ); End;
  • 6. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 6 of 42 End; MATRIKS Merupakan array 2 dimensi, setiap elemen Matriks diidentifikasi oleh nama, indeks baris dan indeks kolom. 1 2 ↓ N1 1 2 → N2 Pendeklarasian Matriks (array 2 dimensi) : Const Idxawal = 1; Idxakhir = 100; Type TipeInfo = …; TabInfo = Array [ Idxawal .. Idxakhir, Idxawal .. Idxakhir] of TipeInfo; Var <identifikasi_variabel> : TabInfo; Proses – proses/operasi terhadap Matriks : 1. Pengisian elemen matriks dari fil 2. Pengisian elemen matriks khusus dengan assignment 3. Penulisan elemen matriks 4. Penjumlahan matriks 5. Perkalian matriks Algoritma-algoritma Operasi Matriks : 1. Pengisian elemen matriks dari fil Read N1, N2 {N1 : jumlah baris, N2 : jumlah kolom} I ← 1 While I <= N1 do J ← 1 While J <= N2 do Read M [I,J] J ← J+1 EndWhile I ← I+1 EndWhile 2. Pengisian elemen matriks khusus dengan assignment a. Matriks N1 x N2 yang semua elemennya 1 : I ← 1 While I <= N1 do J ← 1 While J <= N2 do
  • 7. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 7 of 42 M [I,J] ← 1 J ← J+1 EndWhile I ← I+1 EndWhile b. Matriks identitas ordo N Read N I ← 1 While I <= N do J ← 1 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 I ← 1 While I <= N1 do J ← 1 While J <= N2 do Write M[I,J] J ← J+1 EndWhile I ← I+1 EndWhile 4. Penjumlahan matriks I ← 1 While I <= N1 do J ← 1 While J <= N2 do C[I,J] ← A[I,J] + B[I,J] J ← J+1 EndWhile I ← I+1 EndWhile 5. Perkalian matriks I ← 1 While I <= N1 do {N1 = baris Matriks A} J ← 1 While J <= N2 do {N2 = baris Matriks B} C[I,J] ← 0 K ← 1
  • 8. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 8 of 42 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 I ← I + 1 EndWhile 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!
  • 9. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 9 of 42 MATERI 3 STRUKTUR DATA DINAMIS ( POINTER ) Tujuan: • Mengetahui dan memahami struktur data dinamis • Memahami operasi-operasi dasar dari Linked List Pointer adalah variabel yang berisi alamat dari suatu lokasi struktur data. 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 : Mengakses data pada elemen yang beralamat di P P^. Berikut : Mengakses alamat elemen sesudah P Pendefinisian dalam Pascal adalah sebagai berikut : Type Info_Type = Integer; List = ^ElmList; ElmList = Record Info : Info_Type; Berikut : List; End;
  • 10. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 10 of 42 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) : Membuat node baru dari memori komputer lalu menyimpan alamat di P. RELEASE (P) atau DISPOSE (P) : Membebaskan memori komputer dari suatu node yang alamatnya ditunjuk oleh P. Inisialisasi List Inisialisasi adalah pemberian nilai awal terhadap variabel list (pointer). Procedure Inisialisasi (Var Kepala : List); 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;
  • 11. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 11 of 42 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 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); {Bila masih kosong}
  • 12. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 12 of 42 Else Begin Akhir := Kepala; While (Akhir <> Nil) Do Akhir := Akhir^. Berikut; P^. Berikut := Nil; Akhir^. Berikut := P; End; End; c. Penyisipan sesudah elemen P Procedure SisipSesudah (Var Prec : List; P : List); Begin Prec^. Berikut := P^. Berikut; P^. Berikut := Prec; End; Penghapusan List / Deletion Deletion adalah proses penghapusan list yang dianggap tidak diperlukan lagi. Penghapusan dilakukan dengan tahapan : - Lepaskan elemen dari rantai Linked-List. - Bebaskan memori yang digunakan dengan DISPOSE atau RELEASE. a. Penghapusan elemen pertama Procedure HapusElemenPertama (Var Kepala : List); Begin If Kepala <> Nil Then Begin P := Kepala; Kepala := Kepala^. Berikut; {Kepala maju untuk menuju Dispose (P); elemen berikutnya} 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;
  • 13. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 13 of 42 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;
  • 14. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 14 of 42 MATERI 4 OPERASI – OPERASI DASAR II PADA LINKED LIST Tujuan: • Memahami mengenai operasi khusus dari list berkait • Memahami algoritma dan operasi khusus list berkait Operasi – operasi dasar yang akan dibahas pada modul ini adalah operasi penggabungan, operasi-operasi khusus pada varian Linked list. Penggabungan List Dua linked list yang terpisah dapat digabungkan menjadi list tunggal dengan algoritma merging. Untuk penggabungan 2 list, dimana elemen pertama list II adalah elemen berikutnya dari elemen terakhir list I, algoritmanya : Kepala 1 List Pertama : a b c d Kepala 2 List Kedua : x y z Hasil Gabungan : Kepala 1 a b c d x y z Procedure GabungListAkhir (var Kepala1, Kepala2 : List); Begin PencElemenAkhir (Kepala1, P); If P <> Nil then P^. Berikut := Kepala2 Else Kepala1 := Kepala2; End;
  • 15. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 15 of 42 Varian Linked List Varian Linked List adalah Linked List yang tidak sesederhana representasi di atas. 1. List Berkait dengan kepala dan ekor. Kepala = Ekor = Nil → untuk List Kosong Kepala = Ekor <> Nil → List beranggotakan 1 elemen Kepala Ekor 2. List Sirkuler. 3. List dengan pointer ganda (Double Linked List). 4. List beranak bertingkat (menggunakan field pointer tambahan untuk kepala ke list anak). Kepala Anak-anak Cucu 5. List kombinasi dari varian-varian tersebut.
  • 16. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 16 of 42 Operasi-operasi pada List Sirkuler a. Kunjungan pada tiap elemen Procedure PlrListSirkuler (var Kepala : List); Begin If (Kepala <> Nil) then Begin P:= Kepala; Repeat Proses (P); P:= P^. Berikut; Until P = Kepala; End; End; b. Sisipkan elemen baru Sebagai elemen pertama : Procedure SisipPtmSirkuler (var Kepala : List); Var Q : List; Begin If (Kepala = Nil) then Begin Kepala := P; P^. Berikut := Kepala ; {menunjuk dirinya sendiri} End Else Begin Q := Kepala; While (Q^. Berikut <> Kepala) Do {menunjuk kepala / link Q := Q^.Berikut; sirkulernya} P^. Berikut := Kepala; Q^. Berikut := P; Kepala := P; End; End; Sebagai elemen terakhir : Procedure SisipAkrSirkuler (var Kepala : List; P : List); Var Q : List; Begin If (Kepala = Nil) Then Kepala := P Else Begin Q := Kepala; While (Q ^. Berikut <> Kepala) do {menunjuk Kepala / Link Q := Q^. Berikut; sirkulernya} Q^. Berikut := P;
  • 17. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 17 of 42 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; Dispose (P);
  • 18. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 18 of 42 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 : - Pointer Sebelum tidak digunakan. - Algoritma sama dengan Linked List pointer tunggal b. Penyisipan sebagai elemen pertama Procedure SisipAwListGanda (var Kepala : List; P : List); Begin P^. Berikut := Kepala; If Kepala <> Nil Then Kepala^. Sebelum := P; Kepala := P; P^. Sebelum := Nil; End; c. Penyisipan sebagai elemen terakhir : Procedure SisipAkListGanda (Var Kepala : List; P : List); Begin PencElemenAkhir (Kepala, Q); {Pemanggilan Prosedur PencElemen Akhir} P^. Berikut := Nil; P^. Sebelum := Q; {Q : Alamat elemen terakhir atau Nil} If (Q <> Nil) then Q^. Berikut := P; End; d. Penyisipan sebagai suksesor dari Q Procedure SisipSesudahListGanda (var P : List; Q : List); Begin P^. Berikut := Q^. Berikut; P^. Sebelum := Q; If (Q^. Berikut <> Nil) Then Q^. Berikut^. Sebelum := P; Q^. Berikut := P;
  • 19. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 19 of 42 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;
  • 20. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 20 of 42 A B C D E F TOP BOTTOM 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: 1.1 Representasi Stack Representasi stack dapat dibuat dengan struktur data Array maupun List berkait. Dalam modul ini akan direpresentasikan dengan menggunakan struktur data Array. Deklarasi untuk stack: const maxstack = 100; type stack = record item:array[1..maxstack] of char; top:0...maxstack end; var s:stack; 1.2 Operasi-operasi dalam stack 1.2.1 Operasi Penyisipan (PUSH) Operasi ini dilakukan untuk menyisipkan data pada stack yang dikenal dengan operasi PUSH. Berikut procedure untuk operasi stack: procedure push(var s:stack; x:integer); begin if s.top=maxstack then error(‘stack overflow’) else begin s.top:=s.top+1; s.item[s.top]:=x;
  • 21. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 21 of 42 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^*/- Berikut ini procedure dan function untuk operasi polish notation. function valensi(op:char):integer; begin 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;
  • 22. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 22 of 42 A B C D Front Rear 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; 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:
  • 23. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 23 of 42 2.1 Representasi Queue Representasi Queue dapat menggunakan struktur data Array maupun list berkait. Dalam modul ini akan direpresentasikan menggunakan struktur data list berkait. Berikut deklarasi queue: type Pqueue = ↑queue; queue = record items: integer; next:pqueue; end; var front,rear:Pqueue; procedure init_queue(var front,rear:pqueue); begin front:=nil; rear:=nil; end; 2.2 Operasi-operasi queue 2.2.1 Operasi Insert Operasi ini digunakan untuk menyisipkan elemen dalam queue, yang dilakukan pada sisi belakang (rear). Berikut procedure untuk operasi insert: procedure insert(var front,rear:pqueue; x:integer); var p:pqueue; begin new(p); p↑.items:=x; if empty(front) then begin p↑.next:=front; front:=p rear:=p; end else begin rear↑.next:=p; p↑.next:=nil; rear:=p; end; end; 2.2.2 Operasi Remove Operasi ini digunakan untuk mengambil atau melayani elemen yang ada dalam antrian(queue). Berikut ini procedure untuk remove queue: procedure remove(var front,rear:pqueue); var p:pqueue; begin
  • 24. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 24 of 42 if empty(front) then error(‘queue underflow’) else begin p:=front; front:=front↑.next; if front=nil then rear:=nil; dispose(p); end; end; empy(q) merupakan fungsi untuk mengetahui bahwa antrian kosong atau tidak. Berikut ini fungsi untuk empty(q): function empty(q:pqueue):boolean; begin if front=nil then empty:=true {queue adalah kosong} else empty:=false; {queue adalah tidak kosong} end; Latihan. 1. Buatlah program untuk mengkonversikan dari notasi infix ke postfix. gunakanlah procedure dan function yang telah dibuat! 2. Buatlah program berdasarkan proses-proses dibawah ini untuk mengimplementasikan queue, gunakanlah procedure dan function yang telah dibuat! insert(front,rear,A); insert(front,rear,B); insert(front,rear,C); insert(front,rear,D) remove(front,rear); remove(front,rear) insert(front,rear,E); insert(front,rear,F); remove(front,rear); kemudian tampilkan hasil akhir dari proses tersebut! Tugas. 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;
  • 25. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 25 of 42 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.
  • 26. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 26 of 42 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 endwhile
  • 27. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 27 of 42 Latihan : Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang belum terurut, lakukanlah pengurutan berdasarkan metode Bubble Sort! 25 27 10 8 76 21 1 2 3 4 5 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 27 10 8 76 21 1 2 3 4 5 6 SELECTION SORT Selection Sort merupakan metoda pengurutan data secara pemilihan langsung. Dasarnya : cari nilai paling tinggi/rendah lalu tempatkan dibagian ujung array Ada dua jenis algoritma pemgurutan seleksi ditinjau dari pemilihan elemen maksimum/minimum, yaitu:
  • 28. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 28 of 42 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 27 10 8 76 21 1 2 3 4 5 6
  • 29. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 29 of 42 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 :=1 {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[imaks] 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 27 10 8 76 21 1 2 3 4 5 6
  • 30. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 30 of 42 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[1…N]} {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 k 0 while ((k<N) and (L[k]!=X)) Do K k+1 endwhile if (L[k]=x) then ketemu true else ketemu false
  • 31. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 31 of 42 endif CONTOH PENCARIAN BERUNTUN 13 16 14 21 76 15 0 1 2 3 4 5 Misalkan nilai yang dicari adalah X=21 Elemen yang dibandingkan : 13,16,14,21 (ditemukan) Indeks Array yang dikembalikan:IDX = 3 Misalkan nilai yang dicari adalah X =13; Elemen yang dibandingkan:13 (ditemukan) Indeks Array yang dikembalikan:IDX=0 Misalkan nilai yang dicari adalah X=17; Elemen yang dibandingkan:13,16,14,21,76,15 (tidak ditemukan) Indeks array yang dikembalikan : IDX = -1 PENCARIAN BAGI DUA (BINARY SEARCH) Adalah proses mencari data dengan membagi data atas dua bagian secara terus menerus sampai elemen yang dicari ditemukan, atau indeks kiri lebih besar dari indeks kanan. Metoda ini lebih efisien dari metoda pencarian beruntun apabila data telah terurut. ALGORITMA Function BinSearch(input L:LarikInt, input N:Integer, input X:integer) integer {Mencari keberadaan nilai X didalam larik[1…N]} {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 i,j :integer k :integer {indeks larik} ketemu :boolean {flag apabila X ketemu} DESKRIPSI i 1 j N ketemu false while ((not ketemu) and (i<=j)) Do k (i+j) div 2 if (L[k]=X) then ketemu true else if (L[k]<X) then i k+1 {batas kiri diubah} else
  • 32. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 32 of 42 j k-1 {batas kanan diubah} endif endif endwhile if (ketemu) then retun k else return -1 endif CONTOH PENCARIAN BAGI DUA 7 10 13 16 18 21 76 81 1 2 3 4 5 6 7 8 Misalkan nilai yand dicari adalah X=21 i=1 j=8 k=(i+j) div 2=(1+8) div 2 = 4 L[4]=21? Tidak! Harus diputuskan apakah pencarian dilakukan di bagian kiri atau bagian kanan L[4] < 21? Ya! Lakukan pencarian di sebelah kanan i=k+1 = 4+1=5 j=8 k=(i+j) div 2=(5+8) div 2=6 L[6]=21? Ya, Proses pencarian selesai.
  • 33. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 33 of 42 A CB D I E J K F G H L M N O 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 1. Pohon Biner 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)
  • 34. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 34 of 42 Contoh pohon biner 2. Deklarasi Pada Pohon Biner Representasi pada pohon biner akan dideklarasikan dengan menggunakan struktur data list berkait (linked-list) Type nodeptr=↑nodetype nodetype=record info:integer; left:nodeptr; right:nodeptr; father:nodeptr; end; Berikut ini akan diberikan fungsi atau procedure yang terlibat untuk merepresentasikan pohon biner: {*fungsi ini digunakan untuk membuat/mengalokasikan node dan men-set dalam root dalam single node binary tree*} function maketree(x:integer):nodeptr; var p:nodeptr; begin{function maketree} new(p); p↑.info:=x; p↑.left:=nil; p↑.right:=nil; p↑.father:=nil; maketree:=p; 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); A CB D I E J K F H L M N O
  • 35. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 35 of 42 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 terlibat dalam pohon biner adalah operasi penelusuran(traverse): 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
  • 36. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 36 of 42 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 sering disebut dengan symetric-order, menggunakan urutan: - kunjungi cabang kiri. - Cetak isi simpul yang dikunjungi. - Kunjungi cabang kanan. {*procedure yang digunakan menggunakan procedure secara recursive*} procedure inorder(tree:nodeptr); begin if tree <>nil then with tree↑ do begin inorder(left);{kunjungi left subtree} writeln(info);{kunjungi dan cetak info} inorder(right);{kunjungi right subtree} end;{with begin} end; Kunjungan secara post-order menggunkan urutan: - kunjungan cabang kiri - kunjungi cabang kanan. - Cetak isi simpul yang dikunjungi. {*procedure yang digunakan menggunakan procedure secara recursive*} procedure inorder(tree:nodeptr); begin if tree <>nil then with tree↑ do begin postorder(left);{kunjungi left subtree} postorder(right);{kunjungi right subtree} writeln(info);{kunjungi dan cetak info} end;{with begin} 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
  • 37. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 37 of 42 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.
  • 38. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 38 of 42 A B C D F E G H 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. 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); begin adj[node1,node2]:=true; end; procedure remv(var adj:adjmatrix;node1,node2:nodeptr); begin adj[node1,node2]:=false; end;
  • 39. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 39 of 42 function adjacent(adj:adjmatrix;node1,node2:nodeptr):boolean begin if adj[node1,node2] then adjacent:=true else adjacent:=false; end; contoh: 2. Penelusuran Graph (Graph Traversal) Penelusuran Graph dibagi menjadi 2 metoda: Sebelumnya kita deklarasikan terlebih dahulu struktur datanya: const maxvertex=50; type nodeptr=0…maxvertex; queue = record front,rear:nodeptr; entry:array[nodeptr] of nodeptr; end; 2.1 Algoritma Depth-First Teknik ini menggunakan rountine dftraverse(s) yang digunakan untuk mengunjungi semua nodes yang dapat diraih oleh variabel s. Berikut algoritma- algoritma penunjang untuk depth-first: procedure DepthFirst(var s:nodeptr;procedure visit(var v:nodeptr)); var nd:integer; visited=array[nodeptr] of boolean; begin for nd:=0 to maxvertex do visited[nd]:=false; 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; 1 2 4 3 Adjacent sets vertex Set 1 2 3 4 {2,3} {3,4} 0 {1,2,3} Adjacent Table 1 2 3 4 1 2 3 4 0 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0
  • 40. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 40 of 42 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; repeat i:=i+1; if i > maxvertex then begin finished:=true; yptr:=0; ynode:=0; end else if adj(x,i) then
  • 41. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 41 of 42 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); while (nd<>0) do begin if not visited(nd) then begin visit(nd); insert(ndqueue,nd); end; nextsucc(x,yptr,nd) end; end;
  • 42. Struktur Data Yuda Syahidin,ST [email:yudasy@yahoo.com] [http://www.yudasy.web.id] Page 42 of 42 s:=select; end; end; 2.3 Algoritma Greedy untuk mencari lintasan terpendek(shortest Path) Shortest path adalah mencari lintasan terpendek yang menghubungkan 2 buah node dalam graph. Berikut ini procedure untuk mencari shortest path: const maxnodes=…; type nodeptr = 1..maxnodes; weightmatrix=array[nodeptr,nodeptr] of integer; nodeset=set of nodeptr; nodearray=array[nodeptr] of nodeptr; procedure shortpath(var weight:weightmatrix;s,t:nodeptr; var d:integer;var precede:nodearray); var distance : array[nodeptr] of integer; current, i,k:nodeptr; perm:nodeset; smalldist, newdist,dc,d:integer; begin {inisialisasi} perm:=[s]; for i:=1 to maxnodes do distance[i]:=maxint; distance[s]:=0; current :=s; while (current <>t) do begin smalldist:=maxint; dc:=distance[current]; for i:=1 to maxnodes do begin if not (I in perm) then begin newdist:=dc+weight[current,i]; if newdist<distance[i] then begin distance[i]:=newdist; precede[i]:=current; end; if distance[i]<smalldist then begin smalldist:=distance[i]; k:=i; end; end; end; current:=k; perm:=perm+[current] end; d:=distance[t]; end;