modul struktur data unikom
Post on 23-Nov-2015
157 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
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.
top related