-
Struktur Data
Teknik Informatika
1
PENDAHULUAN
Masalah yang harus diselesaikan komputer semakin kompleks.
Pembuatan program
menjadi lebih sederhana jika masalah dipecah menjadi
submasalah-submasalah. Penyelesaian
masalah dengan komputer menyangkut empat hal:
Pemahaman secara menyeluruh keterhubungan elemen-elemen data
yang relevan terhadap solusi masalah
Pembuatan keputusan operasi-operasi yang dilakukan terhadap
elemen-elemen data Perancangan metode representasi elemen-elemen
data di memori sehingga memenuhi
keterhubungan lojik antara elemen-elemen data dan
operasi-operasi terhadap elemen-elemen
data dapat dilakukan secara dan efisien.
I. Struktur Data Tiap bahasa pemrograman mempunyai kumpulan tipe
data built-in sehingga:
Memungkinkan deklarasi variabel bertipe itu Menyediakan kumpulan
operasi untuk memanipulasi variabel bertipe itu
Objek Data
Objek data mengacu kumpulan elemen, D (domain)
Misal: objek data integer mengacu domain
D={...,-3,-2,-1,0,1,2,3,...}
Struktur Data
Untuk membuat struktur data kita harus melakukan aktivitas
terhadap objek data, yaitu:
Mendeskripsikan kumpulan operasi sah yang diterapkan ke
elemen-elemen objek
Data dan menunjukkan mekanisme kerja operasi-operasi.
Contoh:
Struktur data: integer
Konstanta: -2424,-56, 0, 3
1
-
Struktur Data
Teknik Informatika
2
Fungsi/operasi: +,-,*,/, mod, dll
Struktur data=objek data + {operasi manipulasi}
Formal
Struktur data berbeda dengan objek data karena struktur data
mendeskripsikan:
Kumpulan objek data Operasi-operasi dasar terhadap objek data
Hubungan (relasi) antar objek data
Struktur data dapat dinyatakan sebagai triple(D,F,A), disingkat
d, yaitu
1. Domain D, d D 2. Kumpulan fungsi F, yaitu kumpulan operasi
terhadap anggota domain D
3. Kumpulan aksiom A, yaitu kumpulan relasi atau invarian yang
dipenuhi oleh anggota
di domain D.
Triple (D,F,A) juga disebut tipe data abstrak (abstract data
type) karena implementasinya
tersembunyi dari pemakai. Tidak hanya implementasi tipe data
yang tersembunyi, tetapi juga
implementasi operasi terhadap tipe data itu.
Tipe data abstrak merupakan pemodelan matematik terhadap objek
data dengan kumpulan
operasi yang didefinisikan pada model itu. TDA merupakan
generalisasi tipe data primitif.
Tujuan pembuatan struktur data adalah sebagai information hiding
atau encapsulation:
Perubahan implementasi SD tidak mengubah teks program yang
menggunakan SD jika SD dirancang secara bagus
Pemakaian dan pembuatan SD dapat dilakukan secara terpisah, yang
perlu ada kesepakatan mengenai antar muka pemakain SD
SD merupakan sarana pemrograman modular dan menjadi landasan
terbentuknya tim pemrograman.
-
Struktur Data
Teknik Informatika
3
II. Pembuatan Struktur Data Tahap pembuatan SD:
Spesifikasi : dapat secara formal atau informal Implementasi:
cara penerapan struktur data dengan struktur data yang telah ada
Pemrograman: penerjemahan menjadi pernyataan di bahasa pemrograman
tertentu
Praktis
Pembuatan struktur data melibatkan pendefinisian komponen:
Deklarasi SD dengan tipe data yang telah ada Operasi-operasi
terhadap tipe data
Pembuatan SD adalah pembentukan tipe data lengkap yang mempunyai
empat properti:
Nama Domain Penyebutan anggota-anggota Operasi-operasi terhadap
tipe itu.
Contoh: buatlah struktur data bernama BILBULAT dan operasi yang
dapat diterapkan adalah:
perkalian, pengurangan, dan penjumlahan. Untuk itu buatlah
prosedur/fungsi KALI,KURANG,
TAMBAH untuk mengimplementasikan operasi tersebut.
Deklarasi:
Type BILBULAT=integer;
Procedure KALI(input BIL1,BIL2: bilbulat, output hasilkali:
bilbulat)
Deklarasi
{tidak ada}
Deskripsi
Hasilkalibil1*bil2
-
Struktur Data
Teknik Informatika
4
Procedure KURANG(input BIL1,BIL2: bilbulat, output hasilkurang:
bilbulat)
Deklarasi
{tidak ada}
Deskripsi
Hasilkalibil1-bil2
Procedure TAMBAH(input BIL1,BIL2: bilbulat, output hasiltambah:
bilbulat)
Deklarasi
{tidak ada}
Deskripsi
Hasiltambahbil1+bil2 Latihan
Untuk lebih memperjelas pengertian tipe data abstrak maka
buatlah UNIT dalam bahasa Pascal
untuk tipe bilangan bulat yang sudah dibuat di atas.
III. Unit Unit adalah kumpulan prosedur dan fungsi yang siap
untuk kita pakai dengan hanya
mendeklarasikan nama unitnya di awal program. Dengan adanya unit
ini maka kode program yang
telah dibuat dalam unit dapat dipakai oleh program-program lain
yang berbeda hanya dengan
menyebutkan nama unit tersebut di awal program.
Unit mempunyai struktur yang terdiri dari beberapa bagian,
yaitu:
- Unit header
- Interface section
- Implementation section
- Initialization section
Setelah semua bagian tersebut diisi, harus diakhiri dengan kata
baku END.
Contoh:
unit BULAT;
interface
type
BILBULAT=integer;
procedure KALI(bil1,bil2:bilbulat;var hasilkali:bilbulat);
-
Struktur Data
Teknik Informatika
5
Implementation
procedure KALI(bil1,bil2:bilbulat;var hasilkali:bilbulat);
begin
hasilkali:=bil1*bil2;
end;
END.
Saran:
Sebaiknya nama file unit sama dengan nama unitnya. Misal jika
unit namanya BULAT, simpan program pascal yang telah ditulis dengan
nama BULAT juga.
Lakukan kompilasi terhadap kode program anda yang telah anda
simpan, otomatis unit akan terbentuk.
Di bawah ini adalah contoh program yang menggunakan unit
BULAT
program coba;
uses wincrt,bulat;
var
A,B,hasil: bilbulat;
begin
readln(A);
readln(B);
KALI(A,B,hasil);
write(hasil);
end.
-
Struktur Data
Teknik Informatika
6
IV. Statement Kendali Statement kendali digunakan untuk memilih
bagian program yang akan dikerjakan sesuai dengan
kondisi yang diberikan. Statement kendali terdiri dari :
1. Statement If
Keterangan : untuk memeriksa benar salahnya suatu kondisi,
kemudian akan
dilakukan aksi sesuai nilai kondisinya
Bentuk umum : if kondisi then aksi1 ;
If bersarang : if kondisi1 then
if kondisi2 then
aksi1
;
2. Statement Case
Keterangan : digunakan dalam memilih satu aksi dalam
sederetan
kemungkinan aksi yang diberikan
Bentuk umum : case var_pilih of
konstanta1 : aksi1;
konstanta2 : aksi2;
konstanta3 : aksi3;
;
end;
V. Statement Perulangan Statement perulangan (repetitive
statement) digunakan untuk melakukan proses berulang terhadap
suatu aksi yang sederhana maupun majemuk selama memenuhi batas
kondisi tertentu. Statement
perulangan terdiri dari :
-
Struktur Data
Teknik Informatika
7
1. Statement repeat .. untill
Keterangan : statement ini memiliki kendali yang disimpan di
akhir (setelah
aksi yang akan diulang) sehingga dengan menggunakan
statement ini aksi akan dilakukan minimal satu kali.
Bentuk umum : repeat aksi until kondisi
Contoh : X := 1;
Repeat
Writeln(Pascal):
X := X+1;
Until x>10;
2. Statement while
Keterangan : batasan kondisi untuk melakukan proses aksi
disimpan di awal
proses perulangan sehingga aksi mungkin saja tidak dilakukan
sama sekali.
Bentuk umum : while kondisi do aksi;
Contoh : X :=1;
While x
-
Struktur Data
Teknik Informatika
8
VI. Array Array adalah sekelompok data yang bertipe sama yang
disimpan ke dalam variabel dengan nama
yang sama dan variabel ini berindeks. Array dapat memiliki lebih
dari 1 indeks.
Deklarasi : Var
M : array [1..100] of integer;
{variabel M terdiri dari 100 buah elemen yang dapat
menampung data}
N : array [1..100,1..100] of char;
{variabel N memiliki 2 indeks, indeks pertama
menunjukkan baris dan indeks kedua menunjukkan
kolom}
Contoh : X:=1;
While X
-
Struktur Data
Teknik Informatika
9
N! = N x (N-1)!
Secara pemrograman perhitungan di atas bisa ditulis :
Faktorial(0) = 1
Faktorial(N) = N x Faktorial(N-1)
Function faktorial(N : integer):integer;
Begin
If N=0 then
faktorial :=1
else
faktorial := N * faktorial(N-1)
End;
Penjelasan program diatas dengan ilustrasi :
Latihan
1. Buatlah deklarasi untuk matriks dengan menggunakan array.
2. Buatlah program penambahan dan pengurangan untuk matriks
dengan menggunakan array.
Faktorial
Faktorial
Faktorial
Faktorial
Faktorial
4
3
2
1
24
6
2
1
10
-
Struktur Data
Teknik Informatika
10
Kesimpulan
Perancangan metode representasi elemen-elemen data yang
menggunakan struktur data akan memenuhi kriteria: keterhubungan
lojik antara elemen-elemen data dan operasi-operasi
terhadap elemen-elemen data dapat dilakukan secara dan
efisien.
Dengan struktur data dapat dibuat tipe-tipe data abstrak yang
dapat mempermudah dalam pemrograman, dan dengan didukung oleh
statement perulangan, statement kendali dan rekursi.
-
Struktur Data
Teknik Informatika
11
POINTER
Pointer adalah suatu tipe data yang digunakan untuk
mengalokasikan dan mendealokasikan
tempat untuk variabel penyimpan data.
Pointer disebut juga sebagai perubah dinamis, nilai yang
dimilikinya bukan data melainkan nilai
yang menunjuk ke lokasi lain (alamat) yang berisi data
sesungguhnya yang akan diproses.
Contoh perubah statis adalah array (larik), dimana lokasi-lokasi
data sudah ditentukan dan tidak
bisa diubah selama program dieksekusi. Kerugiannya menggunakan
array adalah bahwa banyaknya
data yang bisa diolah menjadi terbatas sesuai dengan kapasitas
arraynya.
I. Deklarasi Pointer
Bentuk umum deklarasi pointer adalah :
Type pengenal = ^simpul;
Simpul = tipe;
Contoh :
Type teks = string(20);
Poin= ^data;
Data = record
Nama : teks;
Alamat : teks;
Pekerjaan : teks;
End;
Var
P1, P2 : Point;
A, B, C : teks;
2
-
Struktur Data
Teknik Informatika
12
Pada saat dikompilasi P1 dan P2 akan menempati lokasi tertentu
dan belum menunjuk ke suatu
simpul tertentu, nilainya dinyatakan dengan nil.
Untuk mengalokasikan simpul dalam pengingat, statement yang
digunakan adalah new dengan
bentuk umum :
New(P1);
Bila statement ini digunakan berulang kali maka nilai P1 yang
lama akan terhapus, dengan
demikian simpulnya tidak dapat ditunjuk oleh pointer manapun dan
tidak terhubung kemanapun.
Agar simpul aktif dan sifatnya menjadi dinamis maka kita harus
mendeklarasikan sejumlah lokasi
tertentu dengan menggunakan satu pointer saja.
Ilustrasinya :
Untuk membentuk simpul-simpul yang membentuk list di atas maka
deklarasinya menjadi :
Type perubah = ^simpul;
simpul = record
info : tipe;
next : perubah;
End;
Contoh pendeklarasian data :
Type teks = string(20);
Poin= ^data;
Data = record
Nama : teks;
Alamat : teks;
Pekerjaan : teks;
Next : point;
End;
Var
P1
-
Struktur Data
Teknik Informatika
13
P1, P2 : Point;
Maka setelah statemen :
New(P1);
Akan terbentuk simpul seperti ini :
II. Operasi Pointer
Perhatikan deklarasi tipe pointer berikut :
Type teks = string(20);
Simpul= ^data;
Data = record
Nama : teks;
Alamat : teks;
Next : simpul;
End;
Var T1, T2 : Point;
Sehingga kita mempunyai dua simpul yaitu :
Jika kita isi :
T1.nama := Micky;
T1.alamat := Disneyland;
Maka simpulnya menjadi :
? ?T1 ? ?T2
Micky DisneylandT1
? ?T2
? ? ?P1 ? ? ?P2
-
Struktur Data
Teknik Informatika
14
Operasi-operasi yang dapat dilakukan dengan pointer antara lain
:
1. Mengcopy pointer sehingga sebuah simpul dapat ditunjuk oleh
pointer yang berbeda.
Syaratnya kedua pointer memiliki deklarasi yang sama.
Dari deklarasi di atas mengcopy pointer dilakukan dengan
memberikan statemen :
T2 := T1;
Gambarnya menjadi :
2. Mengcopy isi simpul sehingga dua pointer yang berbeda
memiliki data simpul yang sama.
Syaratnya kedua pointer memiliki deklarasi yang sama.
Dari deklarasi di atas mengcopy isi simpul dilakukan dengan
memberikan statemen :
T2^ := T1^;
Gambarnya menjadi :
3. Menghapus pointer.
Deklarasi untuk menghapus pointer adalah :
Dispose(perubah);
Contohnya :
Dispose(T1);
Latihan
Buatlah dengan menggunakan deklarasi pointer untuk tipe data
yang digunakan dalam sistem
registrasi mahasiswa pada suatu semester.
Micky DisneylandT1
? ?T2
Micky DisneylandT1
Micky DisneylandT2
-
Struktur Data
Teknik Informatika
15
Kesimpulan
- Dengan pointer memory tempat penyimpanan data dapat digunakan
dengan efisien.
- Pointer memiliki operasi copy pointer, copy simpul dan hapus
pointer
-
Struktur Data
Teknik Informatika
16
LINKED LIST
Linked list merupakan salah satu struktur data yang dinamis,
keuntungannya dibandingkan dengan
larik (array) linked list adalah pada linked list dapat
diketahui pasti kapan penambahan atau
penghapusan data berakhir.
Linked list adalah kumpulan komponen yang disusun berurutan
dengan bantuan pointer, masing-
masing komponen disebut simpul (node), tiap node terdiri dari
bagian informasi (data) dan bagian
linked sebagai alamat ke node selanjutnya.
Elemen terakhir dari sebuah linked list dikenali dengan
last^.next = nil.
Ilustrasi
info Next
Istilah
First : Pointer penunjuk lokasi simpul pertama linked list
Nill / Null : Tidak bernilai
Linked list
kosong
: Linked list dengan first = nil
Next : Alamat yang penunjuk ke simpul selanjutnya
I. Single Linked List Single linked list adalah linked list
dengan simpul yang memiliki satu link/pointer yang mengacu ke
simpul berikutnya.
Ilustrasi
Simpul :
Info /
3
-
Struktur Data
Teknik Informatika
17
First :
Linked list kosong :
First
List dengan 4 elemen :
Contoh lain :
Nama Link
MI 1 Kiki 8
9 2 Toni 6
3 Agam 1
4 Via 0
LB 5
3 6 Mira 4
7 Helmi 0
8 Iyan 7
9 Shila 2
Disajikan dalam single linked list :
First
info
A DCB
First
Shila 2 ViaMira 4Toni 6
9MI
-
Struktur Data
Teknik Informatika
18
Deklarasi linked list :
Type node = ^data
data = record
info : char; {tipe data info}
next : node;
end;
var element : char; {tipe data element}
awal, akhir, baru : node;
linkedlist = record
first : node
end;
II. Operasi Pada Single Linked List Operasi-operasi yang dapat
dilakukan pada single linked list antara lain :
1. Pembuatan dan penghapusan node
2. Inisialisasi dan fungsi cek list kosong
3. Penyisipan simpul ke list
- Sebagai simpul pertama
- Setelah simpul tertentu
- Sebagai simpul terakhir
- Sebelum simpul tertentu
4. Penghapusan simpul dalam list
- Di simpul pertama
- Menghapus setelah simpul tertentu
- Di akhir simpul
5. Penelusuran list
6. Pencarian simpul
Berikut ini skema dan procedure masing-masing operasi :
Agam 1 HelmiIyan 7Kiki 8
3LB
-
Struktur Data
Teknik Informatika
19
1. Pembuatan dan penghapusan node
Function createlist(x:data_type):node;
Var p:node;
Begin
New(P);
P^.data := x;
P^.next := nil;
End;
Procedure destroylist(var p:node);
Begin
Dispose(P);
End;
2. Inisialisasi dan fungsi memeriksa list kosong
Procedure initL(var L:linkedlist)
Begin
L^.first:=nil;
End;
Function isEmpty(L : linkedlist):boolean;
Begin
IsEmpty:=(L.first=nil);
End;
-
Struktur Data
Teknik Informatika
20
3. Penyisipan simpul ke list - Sebagai simpul pertama
Skema :
Procedure InsertFirst(var L:linkedlist;p:node);
Begin
P^.next := L.first;
L.first := P;
End;
B C
First
D
A
B C
First
D
A
B C
First
DA
P
P
P
-
Struktur Data
Teknik Informatika
21
- Setelah simpul tertentu
Skema :
Procedure InsertAfter(var prec:node;r:node);
Begin
r^.next := prec^.next;
prec^.next := r;
End;
B C
First
D
A
B C
First
D
A
C A
First
DB
r
r
-
Struktur Data
Teknik Informatika
22
- Sebagai simpul terakhir
Skema :
Procedure InsertLast(var L:linkedlist;p:node);
Var Last : node;
Begin
If (L.first=nil) then
InsertFirst(L,P)
Else
Begin
Last := L.first;
While (Last^.nextnil) do
Last:=last^.next;
InsertAfter(Last,P);
End;
End;
B C
First
D
A
B C
First
D
A
C D
First
AB
P
P
-
Struktur Data
Teknik Informatika
23
- Sebelum simpul tertentu
Skema :
Procedure InsertBefore(var L:linkedlist;x:data_type);
Var p,precP : node;
Found : boolean;
Begin
Found := false;
PrecP :=nil;
P :=L.first;
While(pnil) and (not found) do
If p^.key = k then
Found :=true
Else
Begin
PrecP := p;
P := p^.next;
End;
End;
B C
First
D
A
B C
First
D
A
A C
First
DB
PprecP
-
Struktur Data
Teknik Informatika
24
4. Penghapusan simpul dalam list - Di simpul pertama
Skema :
Procedure deleteFirst(var L:linkedlist);
Var p: node;
Begin
If (L.first nil) then
Begin
P:=L.first; L.first := L.first^.next;
Dispose(p);
End;
End;
B C
First
D
B C
First
D
C D
First
P
-
Struktur Data
Teknik Informatika
25
- Hapus Setelah Simpul Tertentu
Skema :
Procedure deleteAfter(var prec:node);
Var p: node;
Begin
If (prec^.next nil) then
Begin
P:= prec^.next;
prec^.next:= prec^.next^.next;
Dispose(p);
End;
End;
B C
First
DA
P
B
C
First
DA
P
B
First
DA
-
Struktur Data
Teknik Informatika
26
- Di akhir simpul
Skema :
Procedure deleteLast(var L:linkedlist);
Var Last, precLast: node;
Begin
If (L.first nil) then
Begin
Last :=L.first;
PrecLast :=nil;
While (Last^.nextnil) do
Begin
PrecLast :=Last;
Last :=Last^.next;
End;
P:=last;
If (precLast=nil) then L.first=nil
Else precLast^.next :=nil;
Dispose(p);
End; End;
B C
First
D
B C
First
D
B C
First
P
-
Struktur Data
Teknik Informatika
27
5. Penelusuran list Procedure ListTraversal(L:linkedlist);
Var p:node;
Begin
Init;P:=L.first;
While (Pnil) do
Begin
Visit(P);
P := P^.next
End;
Terminate;
End;
6. Pencarian Simpul Function ListSearch(element:char;
awal:node):boolean;
Var Found :boolean;
Begin
Found:=false;
Repeat
If awal^.info = element then
Found := true
Else
Awal := Awal^.next
Until Found or (Awal=nil)
ListSearch:=Found;
End;
Latihan
1. Buat skema dan procedure dalam bahasa pascal/turbo C untuk
penghapusan simpul tertentu.
2. Buat program untuk mencatat pemesanan kereta api, yang
didalamnya memuat info nama,
alamat, tujuan , no kereta dan jam keberangkatan. Dan outputnya
berupa cetakan daftar tiket
yang dipesan.
-
Struktur Data
Teknik Informatika
28
3. Buat program untuk melakukan operasi pengurangan dan
penambahan pada polinom. Misalkan
:
Input :
Polinom ke-1 : x + 9
Polinom ke-2 : x2 + 1
Output: Penambahan : x2 + x + 1 Pengurangan : -x2 + x + 8
4. Deklarasikan variabel-variabel untuk list berikut :
a. List bernama L
b. List bernama LList
5. Buat representasi dalam list serta deklarasi tipenya.
Address nim nama Next
1 0001 A 3
2 0002 B 8
3 0003 C 0
4 0004 D 1
5 0005 E 0
6 0006 F 5
7 0007 G 6
8 0008 H 4
6. Buatlah fungsi untuk memeriksa apakah suatu data info
terdapat dalam list atau tidak.
Sasha
First
BudiAmir
Sisi
First
Budi1 3
2
7
MI
LB
-
Struktur Data
Teknik Informatika
29
III. Varian Linked List
Selain single linked list, jenis varian linked list yang harus
dikenal yaitu :
1. Singly Linked List
- Singly Linked List dasar (sudah dipelajari sebelumnya)
- Headed Linked List
- Singly Linked List dengan Last
2. Circular Linked List
3. Doubly Linked List
III.1 Singly Linked List
III.1.1 Headed Linked List
Ada kalanya kita membutuhkan sebuah simpul sebagai simpul
pertama dari linked list
untuk maksud-maksud tertentu. Simpul ini tidak berisi informasi
tapi keberadaannya sangat
diperlukan untuk mempercepat proses eksekusi.
Skema
Procedure Awalan(var head:node);
Begin
New(Head);
Head^.next := nil;
End;
III.1.2 Singly Linked List dengan Last
1. Deklarasi
Type
Tipe_data : .;
Node = ^data
Data = record
Info : tipe_data;
A B C
Head
-
Struktur Data
Teknik Informatika
30
Next : node;
End;
List = record
First : node;
Last : node;
End;
2. Inisialisasi
Procedure InitL(var L:list);
Begin
L.first := nil;L.last:= nil;
End;
3. Penyisipan sebagai simpul pertama
Procedure InsertFirst(var L:List; P:node)
Begin
If L.first = nil then
L.last:=P;
P:=L.First;
L.First:=P;
End;
4. Penyisipan sebagai simpul terakhir
Procedure InsertLast(var L:List; P:node)
Begin
If L.first = nil then
InserFirst(L,P);
Else
Begin
L.last^.next := P;
L.last := P;
End;
-
Struktur Data
Teknik Informatika
31
End;
5. Penghapusan simpul pertama
Procedure DeleteFirst(var L:List)
Var P : node;
Begin
If L.first nil then
Begin
P:=L.First;
L.First:= L.First^.next;
If L.First = nil then
L.Last := nil;
Dispose(P)
End;
End;
6. Penghapusan simpul terakhir
Procedure DeleteLast(var L:List)
Var P, PrecLast : node;
Begin
If (L.Firstnil) then
Begin
P := L.Last;
PrecLast := L.first ;
While (PrecLast^.next Last) do
PrecLast := PrecLast^.next;
If PrecLast^.next = L.first then
Begin
L.First := nil;
L.Last := nil;
End;
-
Struktur Data
Teknik Informatika
32
Else
Begin
PrecLast^.next := nil;
L.Last := PrecLast;
End;
Dispose(P)
End;
End;
7. Penghapusan simpul setelah simpul tertentu
Procedure DeleteAfter(var prec:node);
Begin
If (Prec^.next nil) then
Begin
P := Prec^.next;
If Prec^.next L.Last then
Prec^.next := Prec^.next^.next;
Else
L.Last := prec;
Dispose(P);
End;
End;
IV. Circular Linked List Perbedaan antara single linked list
dengan circular linked list adalah simpul terakhir pada
circular yang tidak bernilai nil tetapi mengacu ke simpul
pertama dalam list sehingga
membentuk lingkaran.
Deklarasi untuk circular linked list :
Type
Tipe_data = ;
Node = ^data;
Data = record
Info : tipe_data;
-
Struktur Data
Teknik Informatika
33
Next : node;
End;
CList = record
First : node;
Head : node; {optional : bila circular menggunakan head}
Last : node; {optional : bila circular menggunakan last}
End;
Skema untuk penambahan simpul di akhir pada circular linked list
dengan head :
Procedure add_last(head:node;elemen:char);
Var baru,bantu : node;
Begin
New(Baru);
Baru^.info := Elemen;
If Head^.next = Head then {list masih kosong}
Begin
Baru^.next := Head;
A B C
Head
A B C
Head
A B C
Head
Baru
BaruBantu
Baru
-
Struktur Data
Teknik Informatika
34
Head^.next := Baru
Bantu := Baru;
End;
Else {list tidak kosong}
Begin
Bantu := Head^.next;
While bantu^.next Head do
Bantu := Bantu^.next;
Baru^.next := Kepala;
Bantu^.next := Baru;
End;
End;
V. Doubly Linked List Deklarasi untuk doubly linked list :
Type
Tipe_data = ;
Node = ^data;
Data = record
Info : tipe_data;
Kanan : node;
Kiri : node;
End;
DList = record
First : node;
Head : node; {optional : bila list menggunakan head}
Last : node; {optional : bila list menggunakan last}
End;
-
Struktur Data
Teknik Informatika
35
Prosedur untuk penambahan simpul baru pada doubly linked list
dengan posisi setelah head
digambarkan sebagai berikut :
- Kondisi awal : Masukan head ke dalam variabel :
Bantu := Head;
Langkah 1 : Baru^.kanan := Bantu^.kanan;
Langkah 2 : Baru^.kiri := Bantu;
Head
A B
G
Baru
Head
A B
G
Baru
Head
A B
GBaru
-
Struktur Data
Teknik Informatika
36
Langkah 3 : Bantu^.kanan^.kiri := Baru;
Langkah 4 : Bantu^.Kanan := Baru;
Kondisi akhir
Secara lengkap prosedur penambahan simpul baru pada doubly
linked list setelah head :
Procedure AddNode(var head:node; elemen:char);
Var baru,bantu : node;
Begin
New(Baru);
Baru^.Info := Elemen;
Baru^.kiri := nil;
Baru^.kanan := nil;
Head
A B
GBaru
Head
A B
GBaru
Head
BAG
-
Struktur Data
Teknik Informatika
37
Bantu := head;
while Bantu^.kanan^.info < elemen do
Bantu := Bantu^.kanan;
If Bantu^.kanannil then
Begin
Baru^.kanan := Bantu^.kanan;
Bantu^.kanan^.kiri := Baru;
End;
Bantu^.kanan := Baru;
Baru^.kiri := Bantu;
End;
Kesimpulan
Linked list terdiri dari beberapa jenis yaitu :
1. Single linked list, sngle linked list ber head dan ber tail
atau kombinasi dengan last
2. Circular linked list
3. Doubly linked list
Setiap tipe list memiliki operasi penyisipan (diawal, akhir,
sebelum atau sesudah simpul tertentu),
operasi penghapusan (diawal, akhir, sebelum atau sesudah simpul
tertentu) dan operasi pencarian.
Optional : Digunakan untuk penyisipan pada doubly list yang
-
Struktur Data
Teknik Informatika
38
STACK
Bentuk struktur data selain list dalam ilmu komputer adalah
tumpukan (stack). Tumpukan dapat
diartikan sebagai suatu kumpulan data yang seolah-olah ada data
yang diletakan di atas data yang
lain dan kita dapat menambahkan (menyisipkan) dan mengambil
(menghapus) data seperti operasi
pada bentuk struktur data yang lain, bedanya pada stack semuanya
dilakukan melalui ujung atas
tumpukan yang selanjutnya akan kita sebut TOP.
Stack dapat diilustrasikan sebagai berikut :
I. Penyajian Stack Ada beberapa cara untuk menyajikan sebuah
stack dalam pemrograman yaitu dengan :
1. Array Stack adalah sekumpulan data, maka dengan adanya tipe
data terstruktur yang disebut
array, bisa kita gunakan untuk menyajikan stack. Tapi akan kita
temukan bahwa
penggunaan array untuk stack kurang tepat, karena banyaknya
elemen dalam array sudah
tertentu (statis) sedangnya jumlah elemen dalam stack bisa
sangat bervariasi.
Dengan demikian akan kita gunakan array untuk penyajian satck
dengan asumsi bahwa
jumlah elemen stack lebih kecil dari batas maksimum array. Jika
pada saat ukuran array
dan stack sudah sama dan kita masih menambah data maka akan
terjadi overflow,
sehingga dibutuhkan suatu variabel pencatat posisi ujung
tumpukan.
Deklarasi stack dengan menggunakan array :
Const Max = 255;
FEDCBA
Atas
A B C D E F
Atas
ABCDEF Atas
4
-
Struktur Data
Teknik Informatika
39
Type tumpukan = record
Isi : array [1..max] of integer;
Atas : 0..max;
End;
Var T : tumpukan;
Operasi pada stack :
- Operasi Push
Operasi push adalah operasi menumpuk/menyisipkan data,
implementasinya :
Procedure Push(var T:tumpukan; x:integer);
{procedure dengan memeriksa apakah array sudah penuh atau
belum}
Begin
If T.atas = max then
Writeln(Stack sudah penuh);
Else
Begin
T.atas : =T.atas + 1;
T.isi[T.atas]:=x;
End;
End;
Procedure Push(var T:tumpukan;var penuh:boolean; x:integer);
{procedure dengan menghasilkan pesan bertipe boolean}
Begin
If T.atas = max then
Penuh := true;
Else
Begin
Penuh := false;
T.atas : =inc(T.atas);
T.isi[T.atas]:=x;
End;
End;
-
Struktur Data
Teknik Informatika
40
- Operasi Pop
Operasi pop adalah operasi untuk menghapus elemen yang terletak
pada posisi
paling atas dari sebuah stack. Implementasinya :
Procedure pop(var T:tumpukan);
Begin
If T.atas = 0 then
Writeln(Stack sudah kosong);
Else T.atas := T.atas 1;
End;
2. List Stack dapat disajikan dalam bentuk senarai berantai
(linked list). Elemen pertama dalam
linked list diperlakukan sebagai elemen teratas dari stack
(top). Berikut ini deklarasi tipe
data dan procedure untuk operasi stack dengan menggunakan singe
linked list berkepala.
Type Stc = ^.data
Type data = record
Info : char;
Next : stc;
End;
Var atas : stc;
Karena kita menggunakan linked list berkepala maka terlebih
dahulu dilakukan
inisialisasi tumpukan untuk menentukan simpul kepala. Jika
linked list hanya berisi
simpul kepala maka artinya tumpukan masih kosong.
Procedure inisialisasi_stack(var t:stc);
Begin
New(atas);
Atas^.next := nil;
End;
-
Struktur Data
Teknik Informatika
41
Procedure push(atas:tumpukan; elm:char);
{procedure untuk mempush elemen ke dalam stack}
var baru : stc;
begin
new(baru);
baru^.info:=elm;
baru^.next:=nil;
if atas^.next nil then {artinya stack sudah berisi}
begin
baru^.next := atas^.next;
atas^.next := baru;
end;
else
atas^.next := baru;
end;
Procedure Pop(atas:stc; var kosong:boolean;elm:char);
{procedure untuk mengambil elemen teratas pada stack}
Var bantu:stc;
Begin
Kosong := false;
If atas^.next = nil then {stack kosong}
Kosong := true;
Else
Begin
Bantu := Atas^.next;
Elm := Bantu^.info;
Atas^.next := Bantu^.next;
Dispose(Bantu);
End;
End;
-
Struktur Data
Teknik Informatika
42
II. Contoh Pemakaian Stack Untuk lebih memahami operasi yang
terjadi pada tumpukan, berikut diberikan contoh kasus.
1. Kasus konversi infiks ke postfiks tanpa tanda kurung
Jenis-jenis operator :
- Operator aritmatika dasar : +, -, *, /, ^, minus, plus, mod,
ceil dan floor
- Operator relasi : , =, =,
Aturan penggunaan ekspresi menggunakan well form formula (WLL)
:
- Setiap variable tunggal / satu bilangan bulat tak negatif
adalah ekspresi infiks
valid.
- Jika A dan B adalah ekspresi infiks valid maka (A+B), (A+-),
(A*B) DAN
(A/B) adalah ekspresi infiks valid.
- Hanya ekspresi-ekspresi yang didefinisikan pada dua poin di
atas yang
merupakan ekspresi infiks valid.
Mekanisme konversi infiks tanpa tanda kurung menjadi postfiks
:
- Satu stack diinisialisasi kosong
- String infiks ekspresi infiks tak bertanda kurung valid -
String postfiks diinisialisasi dengan (null string) untuk menampung
hasil
konversi
- Tabel tingkat kekuatan symbol
Tkt Kekuatan Nama Simbol
5 Variable, konstanta A,B, .. ,Z, 0 .. 9
4 Sign +, -
3 Pangkat ^
2 Kali, bagi *, /
1 Tambah, kurang +, -
-
Struktur Data
Teknik Informatika
43
Langkah-langkah konversi :
- Baca symbol ekspresi dari kiri ke kanan (scan)
- Lakukan pop dari stack jika tingkat kekuatan >= tingkat
kekuatan symbol yang
sedang discan, jika tidak lakukan push
- Simbol yang di pop disambung ke string postfiks
- Jika ditemui akhir string infiks, lakukan pop dari stack dan
sambungkan ke string
postfix
Latihan
1. Buatlah program dengan inputan sebuah kata, untuk memeriksa
apakah kata tersebut palindrom
(kata yang bersifat palindrom adalah kata yang dibaca dari kanan
atau kiri, pembacaannya sama,
contohnya: ada, malam, katak). Gunakan operasi stak baik dengan
array maupun dengan
menggunakan list.
2. Buatlah program dengan menggunakan stack untuk menghasilkan
konversi angka yang berbasis 10
ke basis 2.
Kesimpulan
Stack adalah salah satu bentuk struktur data dengan sifat Last
In First Out, penyajiannya dapat
menggunakan array maupun list dan operasi yang dimiliki yaitu
POP untuk menghapus elemen dan
PUSH untuk menyimpan elemen di stack.
-
Struktur Data
Teknik Informatika
44
QUEUE
Prinsip yg digunakan antrian adalah FIFO, untuk penambahan
elemen hanya bisa dilakukan
pada suatu ujung belakang (rear/tail) dan untuk penghapusan
dilakukan lewat ujung depan
(front/head). Sehingga urutan keluar elemen akan sama dengan
urutan masuknya. Contoh: antrian
mobil di pintu jalan tol ketika membeli tiket.
I. Karakteristik Queue
Karakteristik penting Queue adalah:
1. Elemen antrian, yaitu item/item data yg terdapat di elemen
antrian
2. Elemen terdepan dari antrian (front)
3. Elemen terakhir dari antrian (Tail)
4. Jumlah elemen pada antrian (count)
5. Status antrian
Kondisi Queue yang menjadi perhatian adalah:
Penuh, bila elemen pada antrian mencapai kapasitas maksimum
antrian. Pada kondisi ini, tidak mungkin dilakukan penambahan ke
antian, karena akan menyebabkan kondisi
kesalahan yg disebut dengan overflow.
Kosong, bila tidak ada elemen pada antrian. Pada kondisi ini,
tidak mungkin dilakukan pengambilan elemen dari antrian, karena
akan menyebabkan kondisi kesalahan yang
disebut dengan underflow.
5
-
Struktur Data
Teknik Informatika
45
II. Implementasi Queue Contoh Array linear: Nilai Awal Head dan
Tail adalah 0 (nol)
1 2 3 4 5 6
Head = 0
Tail = 0
1 2 3 4 5 6
Head = 1
Tail = 4
1 2 3 4 5 6
Head = 3
Tail = 4
1 2 3 4 5 6
Head = 3
Tail = 6
Keterangan:
- Nilai awal untuk head dan tail adalah nol
- Antrian kosong jika tail
-
Struktur Data
Teknik Informatika
46
Deklarasi antrian menggunakan array :
Const max = 100;
Type antri = array [1max] of integer;
Var
Antrian : antri;
Depan, belakang : integer;
Dalam deklarasi ini elemen antrian dinyatakan dalam tipe
integer, depan adalah peubah yang
menunjukkan posisi elemen pertama dan belakang adalah peubah
yang menunjukkan posisi elemen
terakhir dalam array.
Prosedur untuk menambah elemen baru pada sebuah antrian :
Procedure tambah (var q:antri; x:integer);
Begin
If belakang := max then belakang:=1
Else belakang := belakang +1;
If depan = belakang then
Writeln(antrian sudah penuh)
Else q[belakang] := x;
End;
Fungsi untuk mengecek keadaan antrian :
Function kosong(q:antri):boolean;
Begin
Kosong:=(depan=belakang);
End;
Fungsi untuk menghapus elemen :
Function hapus(var q:antri):char;
Begin
If kosong (q) then
Writeln(Antrian kosong );
Else
-
Struktur Data
Teknik Informatika
47
Begin
Hapus := q[depan];
If depan = max then
Depan:=1;
Else
Depan:=depan+1;
End;
End;
Impelementasi antrian dengan pointer dapat menggunakan circular
single linked list dengan head
(senarai berantai tunggal berkepala dan memutar), dengan
deklarasi :
Type antri = ^simpul;
Simpul = record
Info : char;
Next : antri;
End;
Var head,tail : antri;
Prosedur inisialisasi antrian :
Procedure init(var head,tail:antri);
Begin
New(head);
Head^.info := chr(0);
Head^.next := head;
Tail := head;
End;
Procedur menambah elemen baru menggunakan pointer :
Procedure tambah_elemen(var ekor:antri;elmnt:char);
Var baru : antri;
Begin
New(baru);
-
Struktur Data
Teknik Informatika
48
Baru^.info := elmnt;
Baru^.next := head;
Tail := baru;
End;
Fungsi untuk mengecek keadaan antrian menggunakan pointer:
Function antriankosong(head:antri):boolean;
Begin
antriankosong:=(head^.next=head);
End;
Prosedur untuk menghapus elemen antrian menggunakan pointer
:
Procedure hapusantrian(var head:antri);
Var hapus:antri;
Begin
If not(antriankosong(head)) then
Begin
Hapus:=head^next;
Head^.next:=hapus^.next;
Dispose(hapus);
End
Else
Writeln(Antrian dalam keadaan kosong ..);
End;
Latihan
- Buatlah semua function dan procedure queue ke dalam bahasa
pemrograman C.
- Buatlah simulasi tempat parkir dengan menggunakan queue
-
Struktur Data
Teknik Informatika
49
Kesimpulan
- Queue adalah salah satu bentuk struktur data yang merupakan
sekumpulan data yang memiliki
aturan first in first out, dengan kata lain urutan elemen yang
keluar sama dengan urutan elemen
yang masuk.
- Queue dapat diimplementasikan dengan menggunakan array maupun
list.
-
Struktur Data
Teknik Informatika
50
TREE
Struktur Tree digunakan untuk menggambarkan hubungan yg bersifat
hirarkis antara
elemen-elemen yg ada. Secara sederhana Tree bisa didefinisikan
sebagai kumpulan elemen yang
salah satu elemennya disebut dengan root, node, subtree.
Contoh pembentukkan Tree:
Node tunggal bernama N sebagai informasi :
Subtree bernama N1,N2,..Nk
Terdiri dari node N1,N2,Nk
Tree yg terbentuk dari Node N sebagai root :
N
NKN2N1 ........
N
NKN2N1 ........
6
-
Struktur Data
Teknik Informatika
51
Contoh Tree:
Keterangan :
- Jumlah level 4
- Degree:
- A mempunyai Degree 2
- C mempunyai Degree 3 dst
- Leaf/External Node : Node F,H,I,J,K,L,N,O dgn Degree 0
- Height/dept : A mempunyai tinggi atau kedalaman 4
- Ancestor dari simpul L adalah A,C,G
A
ON
KJI L M
HF GED
CB
-
Struktur Data
Teknik Informatika
52
Gambar Diagram Venn dari tree tsb, sbb:
Notasi kurung dari tree tersebut adalah sebagai berikut :
(A (B (D( I ),E (J,K), C(F,G(L,M(N,O)H)))
Notasi garis dari tree tersebut adalah sebagai berikut :
A B D I E J K C F G L M N O H Hilangkan garis pada gambar
diatas, untuk notasi tingkat
C
A B
D
F
H
G
L N
O
M
I J
K
-
Struktur Data
Teknik Informatika
53
I. Pohon Biner Karakteristik:
Setiap simpul paling banyak hanya mempunyai dua buah anak
(degree tertinggi setiap simpul adalah dua)
Dibedakan antara cabang kiri dan cabang kanan (maka termasuk
tree beraturan) Dimungkinkan tidak mempunyai simpul
Pohon biner dapat 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). Subpohon juga
disebut dengan istilah cabang.
Pohon biner merupakan tipe yang sangat penting dari struktur
pohon, dan banyak dijumpai dalam
berbagai terapan. Sesuai dengan definisi di atas, maka ada
karakteristik yang dimiliki oleh pohon
biner, yaitu bahwa setiap simpul paling banyak hanya mempunyai
dua buah anak. Dengan kata lain,
derajat tertinggi dari setiap simpul dalam pohon biner adalah
dua.
Dalam pohon biner, urutan antara cabang kiri dengan cabang kanan
sangat diperhatikan, sehingga
kedua pohon dapat dikatakan sama apabila kedua pohon identik
satu sama lain baik struktur pohon,
maupun isi simpul dan daun pohon.
Banyaknya simpul maksimal pada pohon biner lengkap tingkatan ke
N adalah :
Sebagai contoh misalnya pohon biner lengkap tingkat ke-4
mempunyai daun sebanyak 8 (23) dan
mempunyai simpul yang bukan daun (termasuk akar) sebanyak 7
(23-1).
Berikut ini akan diberikan algoritma program yang digunakan
untuk membuat pohon biner dengan
ketentuan bahwa informasi yang tersimpan pada cabang kiri selalu
lebih kecil dari simpul akar dan
informasi yang tersimpan dalam simpul akar selalu lebih kecil
dari pada simpul cabang kanan
(cabang kanan < akar < cabang kiri).
II. Kunjungan Pada Pohon Biner Terdiri dari :
1. Preorder :
cetak isi simpul yg dikunjungi kunjungi cabang kiri kunjungi
cabang kanan
-
Struktur Data
Teknik Informatika
54
2. Inorder:
Kunjungi cabang kiri Cetak isi simpul yg dikunjungi Kunjungi
cabang kanan
3. Postorder:
Kunjungi cabang kiri Kunjungi cabang kanan Cetak isi simpul yg
dikunjungi
4. Levelorder:
Kunjungi akar (tingkat 1) Cetak simpul yg dikunjungi Kunjungi
tingkat 2 dst
Contoh:
Preorder: HACDBKJL
Inorder: ABCDHJKL
Postorder:BDCAJLKH
Levelorder: HAKCJLBD
H
DB
LJC
KA
-
Struktur Data
Teknik Informatika
55
Latihan
Ujilah program pohon berikut ini dan buatlah algoritmanya.
program Pohon_Biner_dgn_senarai_berantai;
uses SysUtils;
const MaksChr = 30; { Jumlah karakter maksimum dalam string
}
type pohon = ^simpul;
simpul = record
Kiri : pohon;
Info : char;
Kanan : pohon
end;
str = string[MaksChr];
var root : pohon;
kalimat : str;
lagi : char;
{ prosedur untuk membuat simpul baru }
procedure SimpulBaru(var baru:pohon;hrf:char);
begin
new(baru);
with baru^ do
begin
Kiri:=nil;
Info:=hrf;
Kanan:=nil
end
end; { prosedur SimpulBaru }
{ prosedur untuk menyisipkan simpul non-rekursif }
procedure NR_SisipSimpul(var akar:pohon;hrf:char);
var baru,P,Q : pohon;
-
Struktur Data
Teknik Informatika
56
begin
{ Mengalokasi simpul baru }
SimpulBaru(baru,hrf);
if akar = nil then
{ Pohon masih kosong }
akar:=baru
else
{ Pohon sudah berisi simpul }
begin
Q:=akar;
P:=akar;
{ Mencari posisi yang tepat untuk menyisipkan simpul baru }
while (hrf P^.Info) and (Q nil) do
begin
P:=Q;
if hrf < P^.Info then
Q:=P^.Kiri { Mencari ke cabang kiri }
else
Q:=P^.Kanan { Mencari ke cabang kanan }
end;
if hrf = P^.Info then
{ Huruf sudah ada dalam pohon }
{ Tidak dilakukan apa-apa }
else if hrf < P^.Info then { Huruf baru }
P^.Kiri:=baru { Sebagai cabang kiri }
else
P^.Kanan:=baru { Sebagai cabang kanan }
end
end; { prosedur NR_SisipSimpul }
{ prosedur untuk membuat pohon dari potongan huruf-huruf dalam
string }
-
Struktur Data
Teknik Informatika
57
procedure BuatPohon(var akar:pohon;kal:str);
var i : integer;
hrf : char;
begin
i:=1;
repeat
{ Mengambil huruf satu per satu }
hrf:=kal[i];
if (hrf ' ') and (hrf '.') and (hrf ',') then
{ Menyisipkan karakter selain di atas ke dalam pohon }
NR_SisipSimpul(akar,hrf);
inc(i)
until (hrf = '.') or (i = MaksChr)
end; { prosedur BuatPohon }
{ prosedur kunjungan preorder LRO rekursif }
procedure R_PreLRO(akar:pohon);
begin
if akar nil then
begin
write(akar^.Info,' ');
R_PreLRO(akar^.Kiri);
R_PreLRO(akar^.Kanan)
end
end; { prosedur R_PreLRO }
{ prosedur kunjungan inorder LRO rekursif }
procedure R_InLRO(akar:pohon);
begin
if akar nil then
begin
-
Struktur Data
Teknik Informatika
58
R_InLRO(akar^.Kiri);
write(akar^.Info,' ');
R_InLRO(akar^.Kanan)
end
end; { prosedur R_InLRO }
{ prosedur kunjungan postorder LRO rekursif }
procedure R_PostLRO(akar:pohon);
begin
if akar nil then
begin
R_PostLRO(akar^.Kiri);
R_PostLRO(akar^.Kanan);
write(akar^.Info,' ')
end
end; { prosedur R_PostLRO }
{ prosedur kunjungan preorder RLO rekursif }
procedure R_PreRLO(akar:pohon);
begin
if akar nil then
begin
write(akar^.Info,' ');
R_PreRLO(akar^.Kanan);
R_PreRLO(akar^.Kiri)
end
end; { prosedur R_PreRLO }
{ prosedur kunjungan inorder RLO rekursif }
procedure R_InRLO(akar:pohon);
begin
-
Struktur Data
Teknik Informatika
59
if akar nil then
begin
R_InRLO(akar^.Kanan);
write(akar^.Info,' ');
R_InRLO(akar^.Kiri)
end
end; { prosedur R_InRLO }
{ prosedur kunjungan postorder RLO rekursif }
procedure R_PostRLO(akar:pohon);
begin
if akar nil then
begin
R_PostRLO(akar^.Kanan);
R_PostRLO(akar^.Kiri);
write(akar^.Info,' ');
end
end; { prosedur R_PostRLO }
{ program utama }
begin
lagi:='y';
repeat
writeln('Program Binary Tree');
writeln;
writeln('Masukkan string dan akhiri dengan titik.');
writeln('Maksimum ',MaksChr,' karakter termasuk titik');
repeat
write('Masukkan kata : ');
readln(kalimat);
writeln;
-
Struktur Data
Teknik Informatika
60
{ Memeriksa apakah string masukan valid }
if kalimat[length(kalimat)] '.' then
{ String tidak diakhiri dengan titik -------- }
{ atau lebih dari jumlah karakter maksimal -- }
{ dengan karakter ke-MaksChr bukan titik ---- }
begin
writeln('Akhiri kata anda dengan titik, ulangi lagi !');
end
else
{ Input string valid }
begin
{ Menyusun pohon biner }
BuatPohon(root,kalimat);
writeln;
writeln('Arah kiri ke kanan');
writeln('----------------------');
write('Preorder : ');
R_PreLRO(root);
writeln;
write('Inorder : ');
R_InLRO(root);
writeln;
write('Postorder : ');
R_PostLRO(root);
writeln;
writeln;
writeln('Arah kanan ke kiri');
writeln('----------------------');
write('Preorder : ');
R_PreRLO(root);
writeln;
write('Inorder : ');
-
Struktur Data
Teknik Informatika
61
R_InRLO(root);
writeln;
write('Postorder : ');
R_PostRLO(root);
writeln;
writeln;
root:=nil { Mengosongkan pointer root }
end
until kalimat[length(kalimat)] = '.';
write('Coba lagi (Y/N)? ');
readln(lagi)
until (lagi = 'n') or (lagi='N');
end.
Hasil
Contoh output program di atas bila benar :
Program Binary Tree
Masukkan string dan akhiri dengan titik.
Maksimum 30 karakter termasuk titik
Masukkan kata : mastris masih suka kamu.
Arah kiri ke kanan
----------------------
Preorder : m a i h k s r t u
Inorder : a h i k m r s t u
Postorder : h k i a r u t s m
Arah kanan ke kiri
----------------------
Preorder : m s t u r a i k h
Inorder : u t s r m k i h a
-
Struktur Data
Teknik Informatika
62
Postorder : u t r s k h i a m
Coba lagi (Y/N)?
Latihan
Buatlah pohon biner dengan urutan :
Inorder : M, L, O, N, Q, P, S, R, T, K, A, C, B, E, D, G, F, H,
I
Preorder : K, L, M, N, O, P, Q, R, S, T, H, G, E, C, A, B, D, F,
I
Buatlah pohon biner dengan urutan :
Inorder : 4, 3, 10, 8, 11, 7, 9, 6, 13, 12, 16, 15, 17, 14, 18,
5, 19, 2, 1, 20
Preorder : 1, 2, 20, 3, 4, 5, 6, 19, 7, 12, 8, 9, 13, 14, 10,
11, 15, 18, 16, 17
Kesimpulan
- Model data pohon/tree biner dapat dimodelkan dengan senarai
berantai.
- Dengan kunjungan dan arah yang beda maka menghasilkan nilai
yang beda pada kata yang
sama.
- Titik pada akhir kata dimaksudkan untuk tanda akhir dari
kalimat.
-
Struktur Data
Teknik Informatika
63
GRAPH
Graph adalah salah satu bentuk struktur data yang berbentuk
jaringan yang mempunyai ciri
sebagai berikut :
- minimal ada 2 elemen yang disebut node (vertices, titik,
point)
- antara dua node dihubungkan langsung dengan sebuah edge (garis
yang unik) yaitu
berupa ordinat antara 2 node
Diberikan contoh graph di bawah ini:
1
43
2
7
-
Struktur Data
Teknik Informatika
64
Penyajian (representasi) dalam komputer dapat disajikan dalam
beberapa cara berikut :
I. The Set Representation (representasi memakai himpunan)
Graph didefinisikan sebagai bentuk dari himpunan (set). Pertama,
terdapat sekumpulan
simpul, kedua terdapat sekumpulan busur yang menghubungkan
simpul-simpul.
Representasi memakai himpunan dapat diimplementasikan
menggunakan set (di dalam
bahasa Pascal terdapat tipe data set). Deklarasi dengan
menggunakan set adalah sebagai berikut:
Type
Simpul=1..maxsimpul; {nomor simpul dari 1 sampai jumsimpul}
Pencacah=0..maxsimpul; {jumlah simpul adalah 0 sampai dengan
jumsimpul}
Settetangga=set of simpul;
Graph=record
Ukuran:pencacah;
A:array[simpul] of set_tetangga
End;
Dalam implementasi ini, array A[v] adalah kumpulan semua simpul
yang bertetangga
dengan simpul v.
Adjacency sets (himpunan ketetanggaan)
Simpul Set(himpunan)
1 {2,3}
2 {3,4}
3 {}
4 {1,2,3}
-
Struktur Data
Teknik Informatika
65
II. Adjacency Tables (tabel ketetanggaan)
Tidak semua bahasa pemrograman menyediakan type constructor set
(tipe pembentuk set).
Array A pada deklarasi tipe graph dapat diubah dengan
menggunakan array of array, atau sering
disebut dengan array dua dimensi.
Type
Simpul=1..maxsimpul;
Pencacah=0..maxsimpul;
Tabeladjacency=array [simpul,simpul] of Boolean;
Graph=record
Ukuran:pencacah;
A:tabeladjacency
End;
Adjacency Table
1 2 3 4
1 F T T F
2 F F T T
3 F F F F
4 T T T F
III. Implementasi menggunakan Linked List
Fleksibilitas terbaik diperoleh jika implementasi menggunakan
linked list baik simpul
maupun adjacency list-nya.
Type
Pointsimpul=^simpul;
Pointbusur= ^busur;
Simpul=record
Busurpertama:pointbusur;
Simpulberikut:pointsimpul;
End;
-
Struktur Data
Teknik Informatika
66
Busur=record
Pointakhir:pointsimpul;
Busurberikut:pointbusur;
End;
Graph=pointsimpul;
Graph
simpul 1 busur(1,2)
simpul 4
simpul 3
simpul 2
busur(4,2)
busur(2,3)
busur(1,3)
busur(4,2)
busur(2,4)
busur(4,1)
-
Struktur Data
Teknik Informatika
67
IV. Implementasi Menggunakan List Kontigu (Contiguous List)
Pada adjacency list kontigu, akan dikelola sebuah pencacah.
Valence(valensi) simpul
adalah jumlah busur yang ada, atau jumlah simpul yang
bertetangga dengannya.
Type
Simpul=1..maxsimpul;
Pencacah=0..maxsimpul;
Adjacencylist=array[simpul] of simpul;
Graph=record
Ukuran:pencacah;
Valensi:array[simpul] of pencacah;
A:array[simpul] of adjacencylist
End;
Simpul Valensi Adjacency list
1 2 2 3 - - - - -
2 2 3 4 - - - - -
3 0 - - - - - - -
n=4 3 1 2 3 - - - -
5 - - - - - - - -
6 - - - - - - - -
Max=7 - - - - - - - -
V. Implementasi List Campuran (Mixed Lists)
Implementasi ini menggunakan list kontigu untuk simpul dan
linked storage untuk
adjacency lists.
Type
Simpul=1..maxsimpul;
Pencacah=0..maxsimpul;
Pointbusur=^busur;
Busur=record
Pointakhir:simpul;
Busurberikut:pointbusur;
-
Struktur Data
Teknik Informatika
68
End;
Graph=record
Ukuran:pencacah;
Busurpertama:array[simpul] of pointbusur;
End;
1
max=7
6
5
n=4
3
2
2 1
3
2 3
4
1
3
Latihan
Diketahui matrik berikut :
Gambarkan dan tuliskan deklarasikan dengan menggunakan array dan
list.
A
D C
B
-
Struktur Data
Teknik Informatika
69
Kesimpulan
Graph adalah sekumpulan titik dan garis, garis ini dapat
diwakili dengan koordinat pasangan antara
dua titik.
Penyajian graph dapat menggunakan array dan list, pada array
yang paling sering digunakan adalah
Matrik ketetanggaan dan Matrik Jalur.
Penyajian grap dengan menggunakan list memiliki kelemahan
misalnya sulit mengubah matrik
seandainya ada titik yang ditambah atau diubah, kemungkinan lain
adalah terbentuknya matrik
jarang (sparse matrik) yang memboroskan memori pada saat
implementasi.
-
Struktur Data
Teknik Informatika
70
Daftar Pustaka
1. Liem, Inggriani, Diktat Algoritma dan Pemrograman (Paradigma
Prosedural), Teknik
Informatika ITB, 1997
2. Munir, Rinaldi, Algoritma dan Pemrograman (buku 1),
Informatika, Bandung 2001.
3. Munir, Rinaldi dan Leony Lidya, Algoritma dan Pemrograman
(buku 2), Informatika,
Bandung 2001.
4. Wirth, Niklaus, Algorithm+Data Structure = Program, Prentice
Hall, 1976
5. Aho, Alfredd dkk, Data Structures and Algorithms,
Addison-Wesley Publising Company,
1987.
6. Kruse L. Robert, Data Structures and Program Design, third
edition, Prentice Hall,
Englewood Cliff, New Jersey 1994
7. Hariyanto, Bambang, Struktur Data, Informatika, Bandung,
2000.
8. Slamet, Sumantri, dkk, Pengantar Struktur Data, PT. Elex
Media Komputindo, Jakarta, 1990.
9. Santosa Insap, Struktur Data Menggunakan Turbo Pascal, Andi
Offset, Yogyakarta,1995.
10. Sanjaya, Dwi, Struktur Data, J&J Learning, Yogyakarta,
2001.