Pengajar
Jaidan Jauhari, MT
Alamat Email
jaidan_j@ilkom.unsri.ac.id
jaidan_j@yahoo.com
Disarikan Dari Berbagai Sumber, Terutama Dari Diktat Struktur Data Informatika
ITB Karangan Dr. Inggriani Liem
Halaman
Halaman
BUKU SUMBER
1.
2.
3.
4.
5.
6.
Halaman
Komponen Penilaian
z
z
z
z
z
Tugas
20%
Ujian 1 20 %
(Pertemuan ke-4)
Ujian 2 20%
(Pertemuan ke-8)
Ujian 3 20%
(Pertemuan ke-12)
Ujian Akhir Semester 20%
Halaman
fakta dunia
Halaman
Halaman
10
11
12
13
z
z
z
Halaman
14
15
16
17
Menginisialisasi Larik
z
Halaman
18
Deklarasi :
K : integer
Deskripsi :
for k 1 to N do
read (A[k])
endfor
Halaman
19
20
Halaman
21
Tugas 1
Buatlah dalam notasi algoritma atau bahasa C :
1.Definisikan sebuah type terstruktur untuk
menyatakan data nasabah disebuah bank. Data
nasabah terdiri atas field Nomor Account, Nama
Nasabah, Alamat Nasabah, Kota Nasabah, dan
Nomor Telpon Nasabah.
Untuk setiap field definisikan type data yang cocok
Halaman
22
23
Halaman
24
25
26
27
Halaman
28
29
30
31
32
Beberapa defenisi :
1. List L adalah List kosong , jika First (L) = Nil
2. Elemen terakhir dikenali, dengan salah satu
cara adalah karena Next(Last) =Nil
Halaman
33
34
Halaman
35
Halaman
36
Deklarasi :
P : address { address untuk traversal , type
terdefenisi }
Deskripsi :
Inisialisasi
P First ( L )
While ( P Nil ) do
Proses ( P )
P Next ( P )
endwhile
Terminasi
{ First Element }
{ Next element }
Halaman
37
38
Deklarasi
P : address { address untuk traversal , type
terdefenisi }
Deskripsi
If (First ( L ) = Nil) then
Write ( List kosong )
else
Halaman
39
Insialisasi
P First ( L )
Repeat
Proses ( P )
P Next ( P )
until P=Nil
Terminasi
Halaman
{ First Element }
{ Next element }
40
42
Halaman
43
P First ( L )
Found false
While ( P Nil ) and ( not found ) do
if X = Info (P) then
Found True
else
P Next (P)
endif
endwhile { P = Nil or Found}
{Jika Found maka P adalah address dimana
harga yang dicari diketemukan}
Halaman
44
45
Deklarasi
Pt : address
Deskripsi
Pt First ( L )
Found false
While ( Pt Nil ) and ( not found ) do
if Pt = P then
Found true
else
Pt Next (Pt)
endif
endwhile { Pt = Nil or Found}
{ Jika Found maka P adalah elemen list}
Halaman
46
47
48
Halaman
49
Halaman
50
Halaman
51
52
Deklarasi
Deskripsi
Next (P) First (L)
First (L) P
Halaman
53
54
IV.2.2. INSERT-AFTER
Menyisipkan sebuah elemen beralamat P sebagai
suksesor dari sebuah elemen list linier yang beralamat
Prec
Procedure InsertAfter ( Input P, Prec: address )
{K. Awal : Prec adalah elemen list, prec Nil, P sudah
dialokasikan, P Nil, Next (P) = Nil
K. Akhir : P menjadi suksesor Prec
Proses : Insert sebuah elemen beralamat P pada List
linier L}
Deklarasi
Deskripsi
Next (P) Next (Prec)
Next (Prec) P
Halaman
55
56
Deklarasi
Last : address
Deskripsi
If
Else
{ Traversal list sampai address terakhir}
Last First (L)
While (Next (Last ) Nil ) do
Last Next (Last )
endwhile {Next ( Last) = Nil, Last adalah elemen terakhir;
insert P after last }
InsertAfter (P, Last)
endif
Halaman
57
Deklarasi
Last : address
Deskripsi
Alokasi (P)
If (P Nil) then
Info(P) E
InsertLast@(L,P)
Halaman
58
59
60
Deklarasi
Deskripsi
P First (L)
E Info (P)
First (L) Next ( First (L) )
Dealokasi (P)
Halaman
61
Deklarasi
Deskripsi
P Next (Prec)
Next (Prec) Next (Next (Prec))
Halaman
62
Deklarasi
Prec : address
{ alamat predesesor }
Deskripsi
Halaman
63
{ Cari predesesor P }
if (P = First (L) then {Delete list dengan
satu elemen }
DeleteFirst (L,P)
else
Prec First (L)
While (Next(Prec) P ) do
Prec Next (Prec)
endwhile { Next (Prec) = P , hapus P }
DeleteAfter (Prec , P)
endif
Halaman
64
65
Deklarasi
Last , preclast :address
Deskripsi
{ Find last dan address sebelum last }
Last First (L)
Preclast Nil
{ predesesor dari L tak terdefenisi }
While ( Next ( Last ) Nil do { Traversal list sampai @ terakhir
}
Preclast Last ; Last Next ( last )
endwhile { Next ( Last ) = Nil, Last adalah elemen terakhir;
preclast = sebelum last }
P Last
If Preclast = Nil then { list dg 1 elemen, jadi kosong }
First(L) Nil
Else
Next ( preclast ) Nil
endif
Halaman
66
67
Deklarasi
Last1 : address { alamat elemen terakhir list pertama }
Deskripsi
Cratelist (L3)
{inisialisasi list hasil }
If Fist (L1) = Nil then
First (L3) First (L2)
Else { Traversal list 1 sampai address terakhir,
Hubungkan last dengan Fisrt 2}
First (L3) First (L1)
Last1 First (L1)
While ( Next (Last 1 ) Nil ) do
Last1 Next (Last 1)
endwhile
{Next ( Last 1) First (L2)}
Next(Last1) First (L2)}
endif
Halaman
68
69
Soal-Soal Latihan
I.
70
71
5. Stack (Tumpukan)
5.1. Definisi
STACK (Tumpukan) adalah list linier yang :
1. Dikenali elemen puncaknya (TOP)
2. Aturan penyisipan dan penghapusan
elemennya tertentu :
-Penyisipan selalu dilakukan di atas TOP
-Penghapusan selalu dilakukan pada TOP
Halaman
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Soal-Soal Latihan
1. Mengapa cara penyusunan elemen pada
Stack sering disebut tersusun secara
LIFO?
2. Mengapa pada Stack Traversal dan Search
jarang dilakukan?
3. Penghapusan elemen pada Stack selalu
dilakukan pada elemen yang paling atas,
bagaimana jika terpaksa harus menghapus
elemen yang paling bawah?
Halaman
87
88
6. Queue (Antrian)
6.1. Definisi
Queue (Antrian) adalah list linier yang :
1. Dikenali elemen pertama (Head) dan elemen
terakhirnya (Tail)
2. Aturan penyisipan dan penghapusan elemennya
disefinisikan sebagai berikut :
- Penyisipan selalu dilakukan setelah elemen
terakhir
- Penghapusan selalu dilakukan pada elemen
pertama
3. Satu elemen dengan elemen lain dapat diakses
melalui informasi Next
Halaman
89
90
91
92
93
94
Halaman
95
96
Halaman
97
98
99
Deskripsi
If IsQEmpty(Q) then
Head(Q) P
Tail(Q) P
else
Next(Tail(Q)) P
Tail(Q) P
endif
Halaman
100
101
Deskripsi
Alokasi (P)
Info (P) E
If IsQEmpty(Q) then
Head(Q) P
Tail(Q) P
else
Next(Tail(Q)) P
Tail(Q) P
endif
Halaman
102
Halaman
103
Halaman
104
105
P Head(Q)
Head(Q) Next(Head(Q))
if (Head(Q) = Nil) then
Tail(Q) Nil
endif
Next(P) Nil
Halaman
106
107
P Head(Q)
E Info(Head(Q))
Head(Q) Next(Head(Q))
if (Head(Q) = Nil) then
Tail(Q) Nil
endif
Next(P) Nil
Dealokasi(P)
Halaman
108
Soal-Soal
1. Mengapa cara penyusunan elemen pada
Queue Sering disebut tersusun secara
FIFO?
2. Mengapa pada Queue Traversal dan
Search jarang dilakukan?
3. Penghapusan elemen pada Queue selalu
dilakukan pada elemen yang paling depan,
bagaimana jika terpaksa harus menghapus
elemen yang paling belakang?
Halaman
109
110
7. Pohon (Tree)
7.1. Definisi Rekurens Dari Pohon
Sebuah pohon adalah himpunan terbatas tidak
kosong, dengan elemen yang dibedakan
sebagai berikut :
1. Sebuah elemen yang dibedakan dari yang
lain yang disebut sebagai AKAR (root) dari
pohon
2. Elemen yang lain (jika masih ada) dibagibagi menjadi beberapa sub himpunan yang
disjoint dan masing-masing sub himpunan
tersebut adalah pohon yang disebut sebagai
sub pohon dari pohon tersebut.
Halaman
111
Beberapa Istilah
1. Hutan
Hutan adalah sequence (list) dari pohon
2. Simpul (Node)
Simpul adalah elemen dari pohon yang
memungkinkan akses pada sub pohon dimana
simpul tersebut berfungsi sebagai Akar
3. Cabang
Cabang adalah hubungan antara Akar dengan
sub pohon
Halaman
112
4. Ayah
Akar dari sebuah pohon adalah Ayah dari
sub pohon
5. Anak
Anak dari sebuah pohon adalah Sub pohon
6. Saudara
Saudara adalah simpul-simpul yang
mempunyai Ayah yang sama
7. Daun
Daun adalah simpul terminal dari pohon.
Semua simpul selain Daun adalah simpul
bukan terminal
Halaman
113
8. Jalan (Path)
Jalan adalah suatu urutan tertentu dari
Cabang
9. Derajat
Derajat sebuah pohon adalah banyaknya
anak dari dari pohon tersebut.
Jika sebuah simpul berderajat N disebut
pohon N-aire
1 disebut pohon 1-aire/uner
2 disebut pohon 2-aire/biner
Halaman
114
115
116
117
Halaman
118
Halaman
119
2. Notasi Infiks
Notasi ini ditulis dengan cara mengikuti alur
sebagai berikut :
Halaman
120
3. Notasi Posfiks
Notasi ini ditulis dengan cara mengikuti alur
sebagai berikut :
Halaman
121
Rekonstruksi Algoritma
{Deklarasi Type}
Type Infotype = {terdefinisi}
Type node = record <Info : infotype,
Left : address,
Right: address >
Type BinTree : address
{Primitif}
Halaman
122
Halaman
123
124
{Traversal}
Procedur PreOrder(input P : BinTree)
{K. AWAL
: P terdefinisi
K. AKHIR
: Semua simpul P sudah
diproses secara preorder}
Procedure InOrder(input P : BinTree)
{K. AWAL
: P terdefinisi
K. AKHIR
: Semua simpul P sudah
diproses secara inorder}
Halaman
125
Halaman
126
{Search}
function Search(P : BinTree, X : infotype)boolean
{Mengirimkan True jika ada node P bernilai X, false
jika tidak}
{fungsi lain}
function NbElmt(P : BinTree)integer
{Mengirimkan banyaknya elemen (node) pohon
biner P}
Halaman
127
128
129
Halaman
130
131
Procedure DelDaunTerkiri(input/output
P:BinTree, output X: infotype)
{K. AWAL : P tidak kosong
K. AKHIR: P dihapus daun terkirinya dan
didealokasi, dengan X adalah info
yang semula disimpan pada daun
terkiri yang dihapus}
Procedure DelDaun(input/output P:BinTree,
output X: infotype)
{K. AWAL : P tidak kosong, X adalah salah satu
daun
K. AKHIR : X dihapus dari P}
Halaman
132