DAFTAR ISI…..................................................................................................................... 0
1.5. Struktur….…………….................................................................................................. 5
1.6. Kesimpulan………...….................................................................................................. 6
DAFTAR ISTILAH.............................................................................................................. 69
DAFTAR RUJUKAN.......................................................................................................... 69
0
BAB I
Pengenalan Struktur Data dan Algoritma
Tujuan:
Struktur data adalah sebuah skema organisasi, seperti struktur dan array, yang diterapkan
pada data sehingga data dapat diinterprestasikan dan sehingga operasioperasi spesifik
Contoh: Perkalian
Output: a * b
Algoritma perkalian:
1
1.3 Pengenalan Array
Array adalah organisasi kumpulan data homogen yang ukuran atau jumlah elemen
maksimumnya telah diketahui dari awal. Array umumnya disimpan di memori komputer
int A[5]; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe integer.
masing-masing posisi elemen dapat diambil dan dapat disimpan tanpa melewati posisi
lain.
Contoh:
1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu
2
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen elemen
3. Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga,
Array mempunyai fleksibilitas rendah, karena array mempunyai batasan sebagai berikut:
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen
adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain
1.4 Pointer
Misalnya kita ingin membuat beberapa penunjuk ke blok penyimpan yang berisi integer.
int *IntegerPointer;
Tanda asterik (*) yang berada sebelum nama variable IntegerPointer menandakan ‘pointer
pada suatu int’. Jadi deklarasi diatas berarti ‘definisikan sebuah tipe yang terdiri dari
integer :
3
IntegerPointer A, B;
Berarti kompiler C akan berisi nilai dari variable A dan B yang ‘menunjuk ke integer’.
Untuk membuat beberapa penunjuk ke beberapa penyimpan integer yang kosong dan
untuk membuat A dan B menunjuk tempat tersebut, digunakan prosedur dinamis untuk
A:
A:
B:
Misalnya kita akan menyimpan integer 5 pada blok penyimpan yang ditunjuk pointer pada
variable A. Untuk menuimpan angka 5 pada blok penyimpan integer itu melalui pointer A,
digunakan pernyataan :
*A = 5;
A:
B:
Linked list adalah salah satu struktur data yang paling fundamental. Linked list terdiri dari
sejumlah kelompok elemen (linked) dengan urutan tertentu. Linked list sangat berguna
untuk memelihara sekelompok data, semacam array, tetapi linked list lebih
menguntungkan dalam beberapa kasus. Linked list lebih efisien dalam proses penyisipan
penyimpan secara dinamis, dimana penyimpan dialokasikan pada saat waktu berjalan
(runtime).
4
1.5 Struktur
Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama, dengan sifat
setiap variabel dapat memiliki tipe yang berlainan. Struktur biasa dipakai untuk
Contoh sebuah struktur adalah informasi data tanggal, yang berisi: tanggal, bulan dan
tahun.
struct data_tanggal
int tanggal;
int bulan;
int tahun;
};
yang mendefinisikan tipe struktur bernama data_tanggal, yang terdiri dari tiga buah
struct data_tanggal
int tanggal;
int bulan;
int tahun;
} tgl_lahir;
5
Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah sebagai berikut
struct nama_tipe_struktur
tipe field1;
tipe field2;
tipe fieldn;
dideklarasikan bisa lebih dari satu. Jika ada lebih dari satu variabel, antara variabel
variabel_struktur.nama_field
anggota struktur). Contoh berikut merupakan instruksi untuk mengisikan data pada field
tanggal
tgl_lahir.tanggal = 30;
1.6 Kesimpulan
1. Struktur data adalah sebuah skema organisasi yang diterapkan pada data sehingga
6
2. Apabila kita membuat program dengan data yang sudah kita ketahui batasnya, maka
kita bisa menggunakan array (tipe data statis), namun apabila data kita belum kita
3. Untuk sekumpulan data dengan tipe data yang berlainan, namun merupakan satu-
1.7 Latihan
a. Penambahan
b. Pengurangan
c. Perkalian
d. Turunan
3. Bilangan kompleks berbentuk a + bi, dimana a dan b adalah bilangan nyata dan i2 = -1.
Tulis program yang membaca dua bilangan kompleks dan simbol operasi yang perlu
7
Objektif
pemrograman
b) Mengetahui operasi yang terkait dengan struktur data dan metode pemrograman
c) Mengetahui metode dan notasi yang digunakan untuk menspesifikasi apa-apa yang
perlu dikerjakan oleh program dan bagaimana program ini melakukan pekerjaan
tersebut.
� Alfabet : a .. z, A .. Z
� Angka : 0 .. 9
8
b) Boolean (logika), terdiri dari :
� True
� False
c) Identifier
� Identifier akan merupakan konstanta jika ia selalu dikaitkan dengan nilai data yang
sama
� Identifier akan merupakan variabel jika nilai datanya yang terkait bisa berubah
� Literal, nilai data yang tertera dalam program namun bukan sebagai identifier
d) Deklarasi Data
� Jenis data konstanta dan variabel harus didefinisikan dalam program sehingga :
� Beberapa contoh program (pendeklarasian data) yang akan diberikan ditulis dalam
pseudo-code
Contoh
Constants
pi = 3.141592654
Variables
i, qty : integer
status : boolean
nama : character(25)
9
Struktur Data
� Kelompok item data yang terorganisasi yang dianggap sebagai suatu unit
� Disebut juga sebagai jenis data kompleks (complex data type) atau data aggregates
� Array (larik)
� String
� Record
� List (daftar)
� Tree
Array (Larik)
� Set item data yang disusun secara baik menjadi rangkaian dan diacu atau ditunjuk oleh
satu identifier
� Item data individual dalam array bisa ditunjuk secara terpisah dengan menyatakan
� Nilai(1) menunjuk 56
� Nilai(2) menunjuk 42
� Bilangan yang ditulis dalam tanda kurung menandakan posisi item individual dalam
Array (Larik)
� Matriks
� Array yang hanya berisi bilangan dan tidak ada data alfabetisnya
10
� Klasifikasi Array
� Array 1 dimensi
� Mempunyai elemen-elemen yang disusun ke dalam baris dan kolom dan digunakan
� Contoh : Nilai ujian dari mahasiswa satu kelas untuk beberapa mata kuliah bisa
A(1,2) = 44
A(2,2) = 36
A(3,2) = 73
A(4,2) = 86
A(5,2) = 51
A(1,1) = 56
A(2,1) = 42
A(3,1) = 89
A(4,1) = 65
A(5,1) = 48
A=
1 56 44
2 42 36
3 89 73
4 65 86
5 48 51
Deklarasi Array
11
� Array 1 dimensi
� Array 2 dimensi
Variables
Variables
Penanganan Array
� Buble sort
� Linear search
Penanganan Array
� Contoh : Nilai ujian mahasiswa akan dibaca dalam array. Kemudian akan ditampilkan
nilai terbesar, nilai terkecil, nilai rata-rata, nilai total, dan jumlah nilai di bawah rata-rata.
12
� Menampilkan hasilnya (output)
String
� A = “Universitas”
� B = “LambungMangkurat”
String
� Mempunyai jumlah tempat karakter yang tetap yang tersedia (bisa digunakan) untuk
penyimpanan data
� Fixed-length string
� Variable-length string
posisi karakter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
isi A N D R I A M R I I N A J O K O D E D I
posisi karakter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
isi A N D R I * A M R I * I N A * J O K O * A L *
Deklarasi String
� Fixed-length string
13
� Variable-length string
Variables
nama : string[5]
Variables
nama : string
� Concatenation
�Contoh :
A = “Universitas”
B = “LambungMangkurat”
C=A+B
maka
C = “UniversitasLambungMangkurat”
� Substring
�Contoh A = “Universitas”
B = “LambungMangkurat”
C = Left(A, 3)
D = Right(B, 5)
E = Substr(A, 4, 5)
maka
C = “Uni”
D = “darma”
E = “versi”
14
Record
� Item data berurutan yang ada dalam record bisa mempunyai jenis yang berbeda
� Contoh : Mengorganisasikan 3 item data yang berbeda ke dalam struktur data tunggal
� NIP : string(8)
� Nilai : real
� Lulus : boolean
Deklarasi Record
mahasiswa : record
NIP : string(8)
Nilai : real
Lulus : boolean
end record
� Notasi “with”
Begin
mahasiswa.NIM := ‘20151234’
mahasiswa.Nilai := 90.5
mahasiswa.Lulus := True
End
Begin
with mahasiswa
15
do
NIM := ‘20151234’
Nilai := 90.5
Lulus := True
end with
End
Variable
NIP : string(8)
Nilai : real
Lulus : boolean
End record
List
� Memberikan cara yang fleksibel untuk penanganan item data secara urut
a) Contoh : Kalimat "Abdoel does not like computer game" dituliskan sebagai suatu list,
b) Beberapa istilah
� POINTER : penunjuk yang menyambungkan item data satu dengan yang lain
� NODE / elemen : elemen dari suatu list yang terbentuk dari datum dan pointer
16
� TERMINATOR : pointer terakhir dari list
menuju
Deklarasi List
Variable
Datum : string
Next : integer
End record
78
67
Last datum; -1 is a
terminator
5 “cake” -1
Pointer to Comment
Next
Datum
Row Datum
Number
Start
17
Pointer
Free
storage
Pointer
� Ketika elemen suatu list dihapus, tempat penyimpanan yang telah dikosongkan dapat
digunakan lagi
Tree
Beberapa Istilah :
� Setiap node memiliki (sedikitnya) dua pointer yaitu left pointer dan right pointer
Catatan :
18
BAB II
STRUKTUR DATA
Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer
agar bisa dipakai secara efisien Sedangkan data adalah representasi dari fakta dunia
nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau
a. Type data sederhana tunggal, misalnya: Integer, real, boolean dan karakter
Pemakaian struktur data yang tepat di dalam proses pemrograman akan menghasilkan
algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan
Struktur data yang ″standar″ yang biasanya digunakan dibidang informatika adalah:
� Multilist
� Tree (Pohon)
� Graph (Graf)
19
2.2 Review Record (Rekaman)
Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau
dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan
oleh pemrogram.
Contoh :
jika P dideklarasikan sebagai Titik maka mengacu field pada P adalah P.x dan P.y.
2. Didefinisikan tipe terstruktur yang mewakili Jam yang dinyatakan sebagai jam (hh),
menit (mm) dan detik (ss), maka cara menulis type Jam adalah :
mm : integer, {0…59}
ss : integer {0…59}
>
Jika J adalah peubah (variabel) bertipe Jam, maka cara mengacu tiap field adalah J.hh,
J.mm
dan J.ss
diterjemahkan menjadi :
float y;
} Titik;
20
mm : integer, {0…59}
ss : integer {0…59}
>
Diterjemahkan menjadi :
typedef struct
} Jam;
Pendahuluan
� Larik adalah struktur data statik yang menyimpan sekumpulan elemen yang bertipe
sama.
� Indeks larik harus tipe data yang menyatakan keterurutan misalnya integer atau
karakter.
� Tipe elemen larik dapat berupa tipe sederhana, tipe terstruktur atau tipe larik lain.
1. Sebagai Peubah
Contoh :
L : array[1..50] of integer
Contoh :
21
type LarikInt : array[1..100] of integer
P : LarikInt
Contoh :
P : LarikInt
Larikint P;
Menginisialisasi Larik
� menginisialisasi elemen larik adalah memberikan harga awal untuk seluruh elemen
22
nilainya terdefinisi}
Deklarasi :
K : integer
Deskripsi :
for k � 1 to N do
A[k] � 0
endfor
� Elemen larik dapat diisi dengan nilai yang dibaca dari piranti masukan seperti contoh di
bawah ini :
{mengisi elemen larik A[1..N] dengan nilai yang dibaca dari piranti masukan}
{K. Akhir : seluruh elemen larik A berisi nilai-nilai yang dibaca dari piranti masukan}
Deklarasi :
K : integer
Deskripsi :
for k � 1 to N do
read (A[k])
endfor
Larik tidak hanya dapat berisi data bertype tunggal, tapi dapat juga berisi data yang
bertipe terstruktur
Contoh :
23
type Mahasiswa : record
<nim : integer,
nama_mhs : string,
KodeMK : string,
Halaman 21
1. TabMhs[2].Nim
2. Write(TabMhs[k].KodeMK)
1.Definisikan sebuah type terstruktur untuk menyatakan data nasabah disebuah bank.
Data nasabah terdiri atas field Nomor Account, Nama Nasabah, Alamat Nasabah, Kota
2.Dari soal nomor 1 buatlah program dalam bahasa pemrograman berbasis bahasa C,
untuk memasukkan data nasabah sebanyak N, dengan N diinputkan dari papan ketik,
Tugas dikumpulkan pada pertemuan berikutnya disertai listing program dan contoh
keluarannya
24
BAB III
ADT (ABSTRACT DATA TYPE)
� ADT adalah definisi type dan sekumpulan primitif (operasi dasar) terhadap type
tersebut.
bersangkutan, misalnya menjadi record dalam Pascal/Ada dan Struct dalam bahasa
prosedur.
2. Selektor, untuk mengakses komponen type. Biasanya namanya diawali dengan Get.
4. Validator komponen type, yang dipakai untuk mengetes apakah dapat membentuk type
sesuai batasan.
penyimpannya
7. Operator Relasional terhadap type tersebut untuk mendefinisikan lebih besar, lebih
25
ADT biasanya diimplementasi menjadi dua buah modul, yaitu :
- Spesifikasi dari primitif sesuai dengan kaidah dalam konteks prosedural, yaitu :
2. Body/realisasi dari primitif, berupa kode program dalam bahasa yang bersangkutan.
3. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan Selektor dan
Konstruktor
Definisi
List linier adalah sekumpulan elemen bertype sama, yang mempunyai keterurutan
Dengan Info Type adalah sebuah type terdefenisi yang menyimpan informasi sebuah
Dengan demikian, jika didefinisikan First adalah alamt elemen pertama list, maka elemen
� elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut : First
� alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen ,
yang
26
� setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu.Untuk
mengacu sebuah elemen , alamat harus terdefenisi . Dengan alamat tersebut Informasi
Jika L adalah list , dan P adalah address; Alamat elemen pertama list L dapat diacu
dengan notasi :
First (L)
Info(P)
Next(P)
Beberapa defenisi :
2. Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last) =Nil
List terdiri dari sekumpulan elemen. Seringkali diperlukan untuk memproses setiap
elemen list dengan cara yang sama. Karena itu salah primitif operasi konsultasi dasar
pada struktur list adalah traversal, yaitu “mengunjungi” setiap elemen list untuk diproses.
Karena Urutan akses adalah dari elemen pertama sampai dengan elemen terakhir, maka
traversal list secara natural dilakukan dari elemen pertama,suksesornya, dan seterusnya
{Proses : Traversal sebuah list linier. Dengan MARK, tanpa pemrosesan khusus pada list
kosong}
27
Deklarasi
Deklarasi :
Deskripsi :
Inisialisasi
While ( P ≠Nil ) do
Proses ( P )
endwhile
Terminasi
List )
{ Proses : Transversal sebuah list linier yang diidentifikasi oleh elemen pertama L ,
Deklarasi :
Deklarasi
Deskripsi
else
Halaman 40
Insialisasi
28
P ← First ( L ) { First Element }
Repeat
Proses ( P )
until P=Nil
Terminasi
Selain traversal, proses pencarian suatu elemen list adalah primitif yang sering kali
didefinisikan pada struktur list. Pencarian dapat berdasarkan nilai, atau berdasarkan
alamat.
Search ini sering dipakai untuk mengenali suatu elemen list berdasarkan nilai informasi
yang disimpan pada elemen yang dicari. Biasanya dengan alamat yang ditemukan, akan
X : InfoType, Output P :
tidak ketemu, Found berharga true jika harga X yang dicari ketemu, false jika tidak }
{Proses : Sequential Search harga X pada sebuah list linier L, Semua elemen diperiksa
Deklarasi
Deskripsi
P ← First ( L )
29
Found ← false
Found ←True
else
P ← Next (P)
endif
{Jika Found maka P adalah address dimana harga yang dicari diketemukan}
{K. Awal : List linier L sudah terdefinisi dan siap dikonsultasi, X terdefenisi }
{K.Akhir : Jika ada elemen list beralamat P, Found berharga true, Jika tidak ada elemen
list
{Proses : Sequential Search @ P pada sebuah list linier L, Semua elemen diperiksa
Deklarasi
Pt : address
Deskripsi
Pt ← First ( L )
Found ← false
if Pt = P then
Found ← true
else
30
Pt ← Next (Pt)
endif
Secara fungsional, pada sebuah list linier biasanya dilakukan pembuatan, penambahan
Jika diberikan L, L1 dan L2 adalah list linier dengan elemen ElmtList, maka operasi yang
dapat dilakukan :
Pemeriksaan apakah sebuah list kosong sangat penting, karena Keadaan Awal dan
Keadaan Akhir beberapa prosedur harus didefinisikan berdasarkan keadaan list. Operasi
pada list kosong sering kali membutuhkan penanganan khusus. Realisasi algoritmik dari
Deklarasi
Deskripsi
Pembuatan sebuah list berarti membuat sebuat list KOSONG, yang selanjutnya siap
diproses (ditambah elemennya, dsb). Realisasi algoritmik dari defenisi funfsional ini
31
Procedure CreateList( Output L : List )
Deklarasi
Deskripsi
Halaman 52
Fungsi insert (penyisipan) harus dijabarkan lebih rinci, karena dapat menjadi penyisipan
sebagai elemen pertama, setelah sebuah address P atau penyisipan menjadi elemen
terakhir atau bahkan menjadi elemen ditengah Penyisipan sebuah elemen dapat
dilakukan terhadap sebuah elemen yang sudah dialokasi (diketahui address-nya ), atau
sebuah elemen yang hanya diketahui nilai Info-nya (berarti belum dialokasi).
Menambahkan sebuah elemen yang diketahui alamatnya sebagai elemen pertama list.
P: address)
{Proses : Insert sebuah elemen beralamat P sebagai elemen pertama list linier L yang
mungkin kosong}
Deklarasi
Deskripsi
32
Next (P) ← First (L)
First (L) ← P
INSERT-First (Nilai)
Menambahkan sebuah elemen yang diketahui nilainya sebagai elemen pertama list.
{ K. Akhir : Sebuah elemen dialokasikan dan menjadi elemen pertama list L, jika alokasi
Deklarasi
P : address
Deskripsi
Alokasi (P)
If P ≠ Nil then
Info (P) ← E
First (L) ← P
Halaman 55
INSERT-AFTER
Menyisipkan sebuah elemen beralamat P sebagai suksesor dari sebuah elemen list linier
yang beralamat
Prec
{K. Awal : Prec adalah elemen list, prec ≠ Nil, P sudah dialokasikan, P ≠ Nil, Next (P) = Nil
33
Proses : Insert sebuah elemen beralamat P pada List linier L}
Deklarasi
Deskripsi
Next (Prec) ← P
INSERT – Last
Menyisipkan sebuah elemen beralamat P sebagai elemen terakhir sebuah list linier. Ada
Proses : Insert sebuah elemen beralamat P sbg elemen terakhir dari list linier L yg
mungkin kosong }
Deklarasi
Deskripsi
InsertFirst(L, P)
Else
34
insert P after last }
endif
P ≠ Nil, Next(P)=Nil
Proses : Insert sebuah elemen beralamat P sebagai elemen terakhir dari list linier L yang
mungkin kosong }
Deklarasi
Deskripsi
Alokasi (P)
If (P ≠ Nil) then
Info(P) ←E
InsertLast@(L,P)
Perbedaan ini melehirkan 3 operasi dasar penghapusan elemen list yang diturunkan dari
mengakibatkan list kosong, jika list semula hanya terdiri dari satu elemen.
35
P : address)
{K. Awal : List L tidak kosong, minimal 1 elemen pertama pasti ada }
P adalah @ elemen pertama L sebelum penghapusan, L yang baru adalah Next (L)
Deklarasi
Deskripsi
P ← First (L)
Halaman 61
InfoType)
{K. Awal : List L tidak kosong, minimal 1 elemen pertama pasti ada }
E adalah Nilai elemen pertama L sebelum penghapusan, L yang baru adalah Next (L)
Deklarasi
Deskripsi
P ← First (L)
E ← Info (P)
Dealokasi (P)
Delete After :
P : address )
36
, Next (Prec) ≠ Nil } Prec ≠elemen terakhir
(Prec) yang baru adalah suksesor dari suksesor Prec sebelum penghapusan }
Deklarasi
Deskripsi
P ← Next (Prec)
Halaman 63
Dengan primitip ini, maka penghapusan sebuah beralamat P dapat dilakukan dengan :
P : address )
L K. Akhir : Menghapus P dari list, P mungkin elemen pertama, “tengah” atau terakhir }
Deklarasi
Deskripsi
{ Cari predesesor P }
satu elemen }
DeleteFirst (L,P)
else
While (Next(Prec) ≠ P ) do
37
endwhile { Next (Prec) = P , hapus P }
DeleteAfter (Prec , P)
endif
DELETELast :
Menghapus elemen terakhir list dapat dilakukan jika alamat dari elemen sebelum elemen
terakhir diketahui. Persoalan selanjutnya menjadi persoalan DeleteAfter, kalau last bukan
satu- satunya elemen list linier. Ada dua kasus, yaitu list menjadi kosong atau tidak.
K. Akhir : menghapus elemen terakhir dari list, list mungkin menjadi kosong
Deklarasi
Deskripsi
P ← Last
First(L) ← Nil
38
Else
endif
Concat adalah menggabungkan dua list. Dalam contoh berikut list kedua disambungkan
ke list pertama. Jadi Last (L1) menjadi predesesor First (L2). Realisasi algoritma adalah
L3 : List )
K. Akhir : L3 adalah hasil konkatenasi (menyambung) dua buah list linier, L2 ditaruh
dibelakang
L1 }
Deklarasi
Deskripsi
39
Next(Last1) ← First (L2)}
endif
Deklarasi
<Info : InfoType,
L : List
P : Address
Soal-Soal Latihan
I. Apakah perbedaan struktur data list linier ditinjau dari sudut pandang operasinya, jika
II. Untuk data yang bagaimanakah yang dapat direpresentasikan dengan menggunakan
III. Diketahui sebuah list linier dengan elemen bertipe integer, buatlah :
3. Prosedur untuk menghitung banyaknya elemen list yang positif (lebih besar dari nol)
IV. Diketahui sebuah list dengan elemen bertype integer terurut membesar, buatlah :
40
3. Fungsi untuk menghitung banyaknya elemen yang lebih besar dari 100
Definisi
Karena aturan penyisipan dan penghapusan semacam itu, TOP adalah satu-satunya
alamat tempat terjadi operasi. Elemen yang ditambahkan paling akhir akan menjadi
elemen yang akan dihapus.Dikatakan bahwa elemen Stack akan tersusun secara LIFO
Maka secara lojik, sebuah STACK dapat digambarkan sebagai list linier yang setiap
elemennya adalah
<Info : InfoType,
dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap
Selain itu alamat elemen terbaru (TOP) dicatat, sedangkan alamat elemen yang paling
TOP adalah elemen pertama list, supaya penambahan dan penghapusan dengan mudah
dan efisien dapat dilakukan. Sehingga jika S adalah sebuah Stack, dan P adalah address
maka
dilakukan.
41
� Info (P) adalah informasi yang disimpan pada alamat P
� Stack kosong adalah Stack dengan Top (S) = Nil ( tidak terdefinisi )
Deklarasi
<Info : InfoType,
S : Stack
P : Address
Pada stack, jarang sekali dilakukan traversal, karena keunikan Stack justru pada operasi
yang hanya menyangkut elemen TOP. Namun dibutuhkan traversal misalnya untuk
Pada stack, elemen yang diproses hanyalah elemen pada TOP. Maka hampir tidak
42
Mengetahui bahwa stack kosong atau tidak sangat penting, sebab semua operasi akan
dilakukan berdasarkan kosong atau tidaknya suatu Stack. Realisasi algoritma dari definisi
fungsional ini adalah sebuah fungsi yang melakukan test terhadap Stack sebagai berikut:
Boolean
{ TEST stack kosong : Mengirim true, jika tumpukan kosong, false jika tumpukan tidak
kosong}
Deklarasi
Deskripsi
Membuat Stack kosong diperlukan untuk memulai memakai stack. Realisasi algoritma dari
definisi fungsional ini adalah sebuah prosedur yang melakukan inisialisasi stack sebagai
berikut
terdefinisi
Deklarasi
Deskripsi
Penambahan selalu dilakukan pada TOP, dan karena alamat TOP diketahui maka
prosesnya sederhana. Berikut ini akan diberikan skema prosedur penyisipan tersebut.
Realisasi algoritma dari definisi fungsional ini adalah salah satu dari dua buah prosedur
43
yang melakukan penambahan elemen stack sebagai berikut. Prosedur pertama
menambahkan suatu ElmtS yang diketahui alamatnya dan yang kedua menambahkan
address)
{Menambahkan sebuah elemen baru pada TOP sebuah stack, dengan elemen yang
diketahui alamatnya}
{K.Awal : Stack mungkin kosong, P terdefinisi (berarti terdefinisi informasinya, Next (P) =
Nil}
Deklarasi
Deskripsi
TOP (S) ← P
{ Menambahkan sebuah elemen baru pada TOP sebuah stack, dengan elemen yang
diketahui informasinya }
Deklarasi
P : address
Deskripsi
Info(P) ← E
44
Next(P) ← TOP(S)
TOP(S) ← P
Halaman 84
STACK (Pop)
a) Penghapusan elemen Stack selalu dilakukan pada TOP, hanya saja harus
penghapusan. Jika Stack menjadi kosong, maka harga TOP harus diganti. Realisasi
algoritma dari definisi funsional ini adalah salah satu dari dua buah prosedur yang
b) Prosedur pertama mengambil suatu Elmts dengan menyimpan alamatnya dan yang
kedua mengambil nilai , dan membebaskan alamat (dealokasi) yang tadinya dipakai
Output P : address)
K.Akhir : Alamat elemen Top (S) disimpan pada P, sehingga informasinya dapat diakses
melalui P
Proses : Menghapus elemen stack, stack tidak boleh kosong dan mungkin menjadi
kosong }
Deklarasi
Deskripsi
P ← TOP (S)
Output E : InfoType)
45
K.Akhir : Alamat elemen Top (S) disimpan pada
Deklarasi
P : address
Deskripsi
P ← TOP (S)
E ← Info(P)
Dealokasi (P)
Soal-Soal Latihan
1. Mengapa cara penyusunan elemen pada Stack sering disebut tersusun secara LIFO?
3. Penghapusan elemen pada Stack selalu dilakukan pada elemen yang paling atas,
4. Buatlah sebuah fungsi untuk menghitung jumlah elemen stack yang genap, jika
6. Buatlah juga fungsi untuk menghitung rata-rata elemen Stack yang genap
8. Buatlah sebuah fungsi untuk mengirimkan elemen Stack yang maksimum jika diketahui
46
3.4 Queue (Antrian)
Definisi
3. Satu elemen dengan elemen lain dapat diakses melalui informasi Next
Struktur data ini banyak dipakai dalam informatika misalnya untuk merepresentasi :
Maka secara lojik, sebuah Queue dapat digambarkan sebagai list linier yang setiap
elemennya adalah :
<Info : InfoType,
dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap
Selain itu alamat elemen Pertama (Head) dan elemen terakhir (Tail) dicatat.
Maka jika Q adalah Queue dan P adalah Address, penulisan untuk Queue adalah :
Head(Q)
Tail(Q)
Next(P)
Info(P)
Deklarasi
47
type InfoType = … {Sebuah type terdefinisi}
<Info : InfoType,
Tail : Address>
Q : Queue
P : Address
Pada queue, jarang sekali dilakukan traversal, karena keunikan Queue justru pada
operasi yang hanya menyangkut elemen pertama dan terakhir. Namun dibutuhkan
Pada Queue, elemen yang diproses hanyalah elemen pada pertama dan terakhir. Maka
Mengetahui bahwa Queue kosong atau tidak sangat penting, sebab semua operasi akan
dilakukan berdasarkan kosong atau tidaknya suatu Queue. Realisasi algoritma dari
definisi fungsional ini adalah sebuah fungsi yang melakukan test terhadap Queue sebagai
berikut :
{ TEST Queue kosong : Mengirim true, jika antrian kosong, false jika antrian tidak kosong}
Deklarasi
48
Deskripsi
Membuat Queue kosong diperlukan untuk memulai memakai Queue. Realisasi algoritma
dari definisi fungsional ini adalah sebuah prosedur yang melakukan inisialisasi Queue
sebagai berikut :
Deklarasi
Deskripsi
Head(Q) ← Nil
Tail(Q) ← Nil
Penambahan selalu dilakukan pada ekor, dan karena alamat ekor diketahui maka
prosesnya sederhana, yaitu hanya InsertLast. Berikut ini akan diberikan skema prosedur
penyisipan tersebut. Realisasi algoritma dari definisi fungsional ini adalah salah satu dari
dua buah prosedur yang melakukan penambahan elemen Queue sebagai berikut :
Prosedur pertama menambahkan suatu Elemen Queue yang diketahui alamatnya dan
yang kedua menambahkan suatu nilai Elemen queue yang diberikan. procedure
Input P : address)
(P) = Nil
K.Akhir : P menjadi elemen Tail dari Q dan Tail yang baru adalah P
49
Proses : Insert sebuah elemen beralamat P pada Tail dari antrian Q }
Deklarasi
Deskripsi
If IsQEmpty(Q) then
Head(Q) ← P
Tail(Q) ← P
else
Next(Tail(Q)) ← P
Tail(Q) ← P
endif
Input E : InfoType)
terdefinisi
Deklarasi
Deskripsi
Alokasi (P)
Info (P) ← E
If IsQEmpty(Q) then
Head(Q) ← P
Tail(Q) ← P
else
Next(Tail(Q)) ← P
50
Tail(Q) ← P
endif
Penghapusan elemen pada queue selalu dilakukan pada elemen pertama, hanya saja
penghapusan. Jika queue menjadi kosong, maka harga Tail harus diganti. Jika akibat
ElmtQ yang berada di Head danyang dicatat adalah alamatnya, yaitu P. Prosedur yang
kedua menghapus elemen Head dari queue dan menyimpannya pada suatu elmtQ serta
Output P : address)
Next(P) = Nil
Proses : Menghapus elemen Head dari antrian, antrian tidak boleh kosong dan mungkin
menjadi kosong }
Deklarasi
Deskripsi
P ← Head(Q)
Head(Q) ← Next(Head(Q))
Tail(Q) ← Nil
endif
Next(P) ← Nil
51
procedure DeleteQ(Input/Output Q : Queue
Output E : InfoType)
Next(P) = Nil
Proses : Menghapus elemen Head dari antrian, antrian tidak boleh kosong dan mungkin
menjadi kosong }
Deklarasi
Deskripsi
P ← Head(Q)
E ← Info(Head(Q))
Head(Q) ← Next(Head(Q))
Tail(Q) ← Nil
endif
Next(P) ← Nil
Dealokasi(P)
1. Mengapa cara penyusunan elemen pada Queue Sering disebut tersusun secara FIFO?
3. Penghapusan elemen pada Queue selalu dilakukan pada elemen yang paling depan,
4. Buatlah sebuah fungsi untuk menghitung jumlah elemen queue yang ganjil, jika
52
5. Buatlah fungsi/prosedur untuk mencetak elemen queue yang genap
6. Buatlah juga fungsi untuk menghitung rata-rata elemen queue yang ganjil
8. Buatlah sebuah fungsi untuk mengirimkan elemen queue yang maksimum jika diketahui
53
BAB IV
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) dibagi bagi menjadi beberapa sub himpunan yang
disjoint dan masing-masing sub himpunan tersebut adalah pohon yang disebut sebagai
Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan
hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree
bias didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut
Root. Node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan
satu sama lain (disebut Subtree). Untuk lebih jelasnya, di bawah akan diuraikan istilah
Ancestor Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang
sama
Descendant Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur
yang sama
54
Sibling Node-node yang memiliki parent yang sama dengan suatu node
Subtree Bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki
predecessor
Jenis-jenis Tree
Binary Tree
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal
dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut
tiap node dalam binary tree hanya boleh memiliki paling banyak dua child.
Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki dua child dan tiap subtree harus
Jenis ini mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path
yang berbeda dan setiap node kecuali leaf hanya boleh memiliki 2 child.
Skewed Binary Tree adalah Binary Tree yang semua nodenya (kecuali leaf) hanya
55
Binary tree dapat diimplementasikan dalam C++ dengan menggunakan double linkedlist.
Beberapa Istilah
1. Hutan
2. Simpul (Node)
Simpul adalah elemen dari pohon yang memungkinkan akses pada sub pohon dimana
3. Cabang
4. Ayah
5. Anak
6. Saudara
7. Daun
Daun adalah simpul terminal dari pohon. Semua simpul selain Daun adalah simpul bukan
terminal
8. Jalan (Path)
9. Derajat
Derajat sebuah pohon adalah banyaknya anak dari dari pohon tersebut.
56
Level pohon adalah panjangnya jalan dari Akar sampai dengan simpul yang
bersangkutan. Panjang dari jalan adalah banyaknya simpul yang dikandung pada jalan
tersebut. Akar mempunyai tingkat sama dengan 1. Dua buah simpul disebut sebagai
Kedalaman (Tinggi) dari pohon adalah nilai maksimum dari tingkat simpul yang ada pada
pohon tersebut. Kedalaman adalah panjang maksimum jalan dari Akar menuju ke sebuah
daun
12. Lebar
Lebar sebuah Pohon adalah maksimum banyaknya simpul yang ada pada suatu Tingkat
(Level)
Definisi
� Terdiri dari sebuah simpul yang disebut sebagai Akar dan dua buah himpunan lain yang
disjoint yang merupakan pohon biner yang disebut sebagai Sub Pohon Kiri (Left) dan Sub
Pohon biner merupakan tipe yang sangat penting dari struktur data dan banyak dijumpai
dalam berbagai terapan. Karakteristik yang dimiliki oleh pohon biner adalah bahwa setiap
simpul paling banyak hanya memiliki dua buah anak, dan mungkin tidak punya anak.
Istilah-istilah yang digunakan sama dengan istilah pada pohon secara umum.
1. Notasi Prefiks
57
2. Notasi Infiks
3. Notasi Posfiks
Rekonstruksi Algoritma
{Deklarasi Type}
Left : address,
{Primitif}
{ Test apakah sebuah pohon kosong, mengirimkan True jika kosong dan False jika tidak}
{ K. Awal : sembarang
58
Halaman 125
{Traversal}
{Search}
{fungsi lain}
{ Mengirimkan True jika pohon biner tidak kosong P adalah pohon unerleft yaitu hanya
59
function IsUnerRight(P : BinTree) →boolean
{ Mengirimkan True jika pohon biner tidak kosong P adalah pohon unerright yaitu hanya
{ Mengirimkan True jika pohon biner tidak kosong P adalah pohon biner yaitu mempunyai
{ Mengirimkan level dari node X yang merupakan salah satu simpul dari pohon biner P}
{Operasi Lain}
input X: infotype)
{K. AWAL : P tidak boleh kosong, X adalah salah satu daun pohon Biner P
K. AKHIR : P bertambah simpulnya, dengan Y adalah anak kiri X (jika kiri) atau
Procedure DelDaunTerkiri(input/output
60
{K. AWAL : P tidak kosong
output X: infotype)
insert : sebagai root, left child, atau right child. Khusus insert
Find Mencari root, parent, left child, atau right child dari suatu node. (tree tidak boleh
kosong).
Update Mengubah isi dari node yang ditunjuk oleh pointer curret (Tree tidak boleh kosong)
Retrieve Mengetahui isi dari node yang ditunjuk oleh pointer current (Tree tidak boleh
kosong)
ditunjuk current. Tree tidak boleh kosong. Setelah itu, pointer current dakan berpindah ke
Characteristic Mengetahui karakteristik dari suatu tree, yakni: size, height, serta average
61
Traverse Mengunjungi seluruh node-node pada tree, masing-masing sekali. Hasilnya
adalah urutan informasi secara linear yang tersimpan dalam tree. Ada tiga cara
traverse,yaitu PreOrder,
Langkah-langkah Tranverse :
· PreOrder : cetak isi node yang dikunjungi, kunjungi Left Child, kunjungi Right Child
· InOrder : kunjungi Left Child, cetak isi node yang dikunjungi, kunjungi Right Child
· PostOrder : kunjungi Left Child, kunjungi Right Child cetak isi node yang dikunjungi.
Binary Tree ini memiliki sifat dimana semua left child harus lebih kecil dari pada right child
dan parentnya. Semua right child juga harus lebih besar dari left child serta parentnya.
Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu
Pada dasarnya operasi dalam Binary Search Tree sama dengan Binary Tree biasa,
Insert
Pada Binary Search Tree insert dilakukan setelah lokasi yang tepat ditemukan (lokasi
Update
Update ini seperti yang ada pada Binary Tree biasa, namun di sini update akan
berpengaruh pada posisi node tersebut selanjutnya. Bila update mengakibatkan tree
tersebut bukan Binary Search Tree lagi, harus dilakukan perubahan pada tree dengan
Delete
Seperti halnya update, delete dalam Binary Search Tree juga turut mempengaruhi struktur
62
AVL Tree
AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1
antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan
Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat
Selain AVL Tree, terdapat pula Height Balanced n Tree, yakni Binary Search Tree yang
memiliki perbedaan level antara subtree kiri dan subtree kanan maksimal adalah n
sehingga dengan kata lain AVL Tree adalah Height Balanced 1 Tree.
- (tanda minus) : digunakan apabila Subtree kiri lebih panjang dari Subtree kanan.
+ (tanda plus) : digunakan apabila Subtree kanan lebih panjang dari Subtree kiri.
4.5 Graph
Materi
Prinsip
63
Komponen penyusun :
a. Vertices (node)
Jenis :
Traversal (penelusuran) :
64
DAFTAR ISTILAH-ISTILAH
dan berurutan
Animasi : Gambar yang tampak bergerak, terdiri dari banyak gambar gambar tunggal
(disebut frame) yang ditampilkan satu per satu secara bergantian dengan cepat sehingga
objek dalam
Array : Struktur data yang memiliki banyak elemen di dalamnya, dengan masing-masing
elemen.
Console : Istilah dalam komputer yang menunjuk pada antarmuka antara pemakai
dengan komputer yang berbasiskan teks. Cara kerja konsol sangat sederhana yaitu
menggunakan standar input untuk membaca input dari keyboard dan standar output untuk
Data : Informasi yang disimpan komputer, dapat berbentuk teks, gambar, suara, video,
dan sebagainya.
Deret geometric : Deretan bilangan yang setiap bilangan merupakan hasil kali bilangan
Destruktor : Metode khusus dalam sebuah kelas untuk menghapus objek hasil instansiasi
kelas tersebut
Dimensi : Jumlah indek yang diperlukan untuk menyatakan sebuah elemen dalam array
65
Elemen : Sebuah data tunggal yang paling kecil dari sebuah array atau list. Data tunggal
disini tidak perlu data sederhana, melainkan bisa berupa kumpulan data atau list yang
lain.
Fibonacci : Barisan bilangan yang setiap bilangan merupakan jumlah dari dua bilangan
sebelumnya.
FIFO : First In First Out sifat suatu kumpulan data. jika sebuah elemen A dimasukkan
FPB : Faktor Persekutuan terbesar, faktor yang paling besar jika sejumlah bilangan
Full : Keadaan di mana list penuh, tidak boleh menerima data lagi
Fungsi : Suatu modul atau bagian program yang mengerjakan suatu program tertentu.
Indeks : Bilangan yang digunakan untuk menyatakan posisi suatu elemen dalam array
atau list.
Input : Data masukkan, dalam fungsi berarti parameter yang dimasukkan, sedangkan
dalam program secara keseluruhan berarti data yang dimasukkan pemakai, bisa melalui
Insert : Memasukkan sebuah elemen baru ke dalam list. Biasanya insert dilakukan baik di
Kelas : Suatu struktur yang digunakan sebagai template bagi objekobjek yang sama
sifatnya.
66
Kompilasi : Proses menerjemahkan bahasa sumber (source code) ke dalam bahasa lain,
biasanya bahasa mesin, untuk dapat dijalankan langsung oleh computer melalui system
operasi.
Konstruktor : Metode khusus yang dimiliki suatu kelas untuk membentuk suatu objek
Library : Kumpulan fungsi, makro, template, dan kelas yang disediakan bersama compiler
C++.
LIFO : Last In Fisrt Out, sifat kumpulan data, kebalikan dari FIFO
Linked List : List yang didesain dengan cara mendefinisikan sebuah elemen yang
memiliki hubungan atau link dengan elemen lain yang dihubungkan dengan elemen yang
lain lagi.
Matriks : Dalam matematika berarti kumpulan bilangan yang disusun dalam bentuk kolom
dan baris.
Objek : Struktur data yang terdiri dari data yang lebih sederhana yang disebut field yang
Pointer : Type data khusus yang pada umumnya berukuran 32 bit yang berfungsi untuk
Pop : Mengeluarkan satu elemen dari dalam list dengan cara menyalin data elemen
tersebut, kemudian menghapus elemen tersebut dari list biasanya digunakan untuk stack.
Prima : Bilangan yang tidak memiliki faktor selain 1 dan bilangan itu sendiri.
Queue : Struktur list dengan sifat FIFO, cara kerjanya seperti antrian manusia.
67
Record : Struktur data yang terdiri dari satu atau lebih elemen yang tipe data bisa
berbeda.
Rekursi : Jenis perulangan yang tidak menggunakan struktur perulangan, tetapi dengan
Source Code : Program yang ditulis menggunakan bahasa pemrograman tertentu. Kode
sumber belum dapat dijalankan oleh komputer dan perlu menjalani proses kompilasi
Stack : List yang memiliki sifar LIFO. Data yang hendak di keluarkan dari stack haruslah
STL : Standar Templete Library merupakan kumpulan yang disertakan dalam setiap
compiler C++ yang memenuhi standar ANSI C++ yang menyediakan berbagai struktur
Stream : Aliran merupakan konsep dalam C++ untuk input dan ouput data tanpa
Teks : Data yang terdiri dari karakter-karakter yang dapat dibaca (huruf bilangan, tanda
baca).
Tree : Suatu struktur data yang setiap elemen terhubung sedemikian rupa sehingga
Contoh Program:
Output:
68
DAFTAR RUJUKAN
Heriyanto, Imam, Budi Raharjo (2003). Pemrograman Borland C++ Builder. Informatika
Bandung..
Informasi.
Lidya, Leoni, rinaldi Munir (2002). Algoritama dan Pemrograman dalam Bahas Pascal dan
C.
Informatika Bandung.
Sanjaya, Dwi (2005). Asyiknya Belajar Struktur Data di Planet C++. Elex Media
Komputindo.
69