PENDAHULUAN
1.1 Latar Belakang
Pemograman dalam struktur data ada beberapa macam. Salah satunya
adalah pemograman C++. Dalam pemograman ini biasanya menggunakan berbagai
variable misalnya Struktur data, pointer, Array, Linked List, stack, queue, tree,
pohon biner (binari tree) dan graph / matrik penjajian data.
Makalah ini akan membahas variabel tersebut dimana variable mempunyai
ciri dan umum yang berbeda sesuai dengan tipe file yang di gunakan pembaca.
Pemograman ini merupakan pemograman yang berbeda dari pemograman lainnya
misalnya VB, Delphi atau Pascal namun perbedaan juga tidak begitu signifikan
pada pemograman pascal.
BAB II
PEMBAHASAN
I. Konsep Dasar Struktur Data
A. Pengertian Data
Data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang
kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan,
suara, gambar, sinyal atau simbol.
Pengertian data ini menyiratkan suatu nilai yang bisa dinyatakan dalam bentuk
konstanta / variable.
Konstanta digunakan untuk menyatakan nilai tetap sedangkan variable
digunakan dalam program untuk menyatakan nilai yang dapat berubah-ubah selang
eksekusi berlangsung.
Ada empat istilah data, yaitu:
1. Tipe data adalah jenis atau macam data di dalam suatu variable dalam bahasa
pemrograman.
2. Objek data mengacu kumpulan elemen, D (domain).
3. Representasi data : Suatu mapping dari struktur data d ke suatu set ke
struktur data e (d===e) misal bolean di representasikan dalam 0 dan 1.
4. Struktur data biasa dipakai untuk mengelompokan beberapa informasi yang
terkait menjadi sebuah kesatuan.
Tipe data sederhana terbagi menjadi dua, yaitu:
1. Data sederhana tunggal. Misalnya : Integer, real / float, Boolean dan
character.
2. Data sederhana majemuk. Misalnya : String.
B. Pengertian Struktur Data
Struktur data adalah cara menyimpan atau merepresentasikan data didalam
komputer agar bisa dipakai secara efisien.
Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau keterangan
tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk
tulisan, suara, gambar, sinyal atau simbol.
Struktur data menyangkut susunan fisik data dalam komputer dan berfungsi
agar:
Struktur data
Struktur data sederhana (array dan record)
Struktur data majemuk
Linier
: Stack, Queue, serta List dan Multilist
Non Linier
: Pohon Biner dan Graph
Struktur data yang standar yang biasanya digunakan dibidang informatika adalah :
float * px;
Statement di atas mendeklarasikan variabel px yang merupakan pointer.
Penyebutan tipe data float berarti bahwa alamat memori yang ditunjuk oleh px
dimaksudkan untuk berisi data bertipe float.
Contoh Program:
1:
Output:
2.
Output:
3.
Output:
SELAMAT DATANG FACROROZI
III. ARRAY
1. Pengertian
Array adalah suatu struktur yang terdiri dari sejumlah elemen yang memiliki
tipe data yang sama. Elemen-elemen array tersusun secara sekuensial dalam memori
komputer. Array dapat berupa satu dimensi, dua dimensi, tiga dimensi ataupun
banyak dimensi (multi dimensi).
2. Array Satu Dimensi
Array Satu dimensi tidak lain adalah kumpulan elemen-elemen identik yang
tersusun dalam satu baris. Elemen-elemen tersebut memiliki tipe data yang sama,
tetapi isi dari elemen tersebut boleh berbeda.
Elemen keNilai
23
34
32
12
25
14
23
12
11
10
Bentuk umum:
<tipe data> NamaArray[n] = {elemen0, elemen1, elemen2,.....,n};
n = jumlah elemen
Contoh Program:
1.
Output:
Nilai maksimum
: 76
Nilai minimum
: 12
dan beberapa kolom elemen yang bertipe sama sehingga dapat digambarkan sebagai
berikut:
0
10
45
32
11
3
1
2
3
1
21
43
34
12
2
23
65
23
32
3
43
12
56
23
4
45
21
54
56
5
78
12
34
76
6
65
21
45
45
Bentuk umum:
<tipe data> NamaArray [m][n];
Atau
<tipe data> NamaArray [m][n] = { {a,b,..z},{1,2,...,n-1} };
Contoh:
double matrix[4][4];
bool papan[2][2] = { {true,false},{true,false} };
Pendeklarasian array dua dimensi hampir sama dengan pendeklarasian array satu dimensi,
kecuali bahwa array dua dimensi terdapat dua jumlah elemen yang terdapat di dalam kurung
siku dan keduanya boleh tidak sama.
Elemen array dua dimensi diakses dengan menuliskan kedua indeks elemennya dalam kurung
siku seperti pada contoh berikut:
//papan nama memiliki 2 baris dan 5 kolom
bool papan[2][5];
papan[0][0] = true;
papan[0][4] = false;
papan[1][2] = true;
papan[1][4] = false;
Contoh program: 1.
10
Output:
11
12
Output:
13
4. Array multidimensi
- Array multidimensi merupakan array yang mempunyai ukuran lebih dari dua.
Bentuk pendeklarasian array multidimensi sama saja dengan deklarasi array
dimensi satu maupun dimensi dua.
-
Deklarasi array :
Tipe_array nama_array [ukuran 1][ukuran 2] . . . [ukuran N]
Int nilai[10][5][5];
14
Operator *
Masing-masing data dalam Linked List disebut dengan node (simpul) yang
menempati alokasi memori secara dinamis dan biasanya berupa struct yang
terdiri dari beberapa field.
Pada gambar di atas tampak bahwa sebuah data terletak pada sebuah lokasi
memori area. Tempat yang disediakan pada satu area memori tertentu untuk
menyimpan data dikenal dengan sebutan node/simpul. Setiap node memiliki pointer
15
16
Jika linked list dibuat dengan metode FIFO, terjadi penambahan / Insert simpul
didepan.
2. Operasi Pada Single Linked List Insert
Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
Procedure dan Function Linked List Lainnya
Selain fungsi insert di atas, pada linked list juga terdapat fungsi-fungsi lainnya. Di
bawah ini diberikan fungsi-fungsi umum dalam aplikasi linked list.
Konstruktor
Fungsi ini membuat sebuah linked list yang baru dan masih kosong.
IsEmpty
Fungsi ini menentukan apakah linked list kosong atau tidak.
Find First
Fungsi ini mencari elemen pertama dari linked list
Find Next
Fungsi ini mencari elemen sesudah elemen yang ditunjuk now.
Retrieve
Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu
dikembalikan oleh fungsi.
Update
Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu.
Delete Now
Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah
elemen pertama dari linked list (head), head akan berpindah ke elemen berikut.
Delete Head
Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen
sesudahnya.
Clear
Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila
anda ingin mengakhiri program yang menggunakan linked list. Jika anda
melakukannya,
17
18
19
20
Output:
V. STACK
1. Definisi Stack
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO
(Last In First Out), benda yang terakhir masuk dalam stack akan menjadi benda
pertama yang dikeluarkan dari stack.
Pada gambar diatas, jika kita ingin mengambil sesuatu dari tumpukan maka
kita harus mengambil benda paling atas dahulu, yakni compo. Misalnya jika VCD
langsung diambil, compo akan jatuh. Prinsip stack ini bias diterapkan dalam
pemrograman. Di C++, ada dua cara penerapan prinsip stack, yakni dengan array dan
linked list. Setidaknya stack haruslah memiliki operasi-operasi sebagai berikut.
Push
Pop
Clear
IsEmpty
IsFull
Kelima operasi stack diatas akan dideklarasikan secara abstrak dalam kelas ini,
21
22
Tampak jelas bahwa sebuah array dapat dibagi untuk dua stack, stack 1 bergerak ke
atas dan stack 2 bergerak ke bawah. Jika Top1 (elemen teratas dari Stack 1) bertemu
dengan Top 2 (elemen teratas dari Stack 2) maka double stack telah penuh.
Implementasi double stack dengan array adalah dengan memanfaatkan operasioperasi yang tidak berbeda jauh dengan operasi single stack dengan array. Operasioperasi Double Stack Array Konstruktor
Fungsi ini membuat stack baru yang masih kosong. Top[0] diset dengan -1 dan
Top[1] diset dengan MAX_STACK.
IsFull
Fungsi ini memeriksa apakah double stack sudah penuh. Stack dianggap penuh jika
Top[0] dan Top[1] bersentuhan sehingga stack tida memiliki ruang kosong. Dengan
kata lain, (Top[0] + 1) > Top[1].
Push
Fungsi ini memasukkan sebuah elemen ke salah satu stack.
IsEmpty
Fungsi memeriksa apakah stack pertama atau stack kedua kosong. Stack pertama dianggap
kosong jika puncak stack bernilai kurang dari nol, sedangkan stack kedua dianggap kosong
jika puncak stack sama atau melebihi MAX_STACK.
Pop
Fungsi ini mengeluarkan elemen teratas dari salah satu stack
Clear
Fungsi ini mengosongkan salah satu stack.
23
istilah full, sebab biasanya program tidak menentukan jumlah elemen stack yang mungkin
ada (kecuali jika sudah dibatasi oleh pembuatnya). Namun demikian sebenarnya stack ini
pun memiliki batas kapasitas, yakni dibatasi oleh jumlah memori yang tersedia.
Operasi-operasi untuk Stack dengan Linked List
Konstruktor
Fungsi ini membuat stack baru yang kosong. Stack adalah kosong jika Top tidak menunjuk
apa pun (bernilai NULL).
IsEmpty
Fungsi memeriksa apakah stack yang adamasih kosong.
Push
Fungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan insert dalam
single linked list biasa.
Pop
Fungsi ini mengeluarkan elemen teratas dari stack.
Clear
Fungsi ini akan menghapus stack yang ada.
Contoh Program:
1. Menggunakan Borland C++ Builder 6
24
Output:
VI. QUEUE
1. Definisi Queue
Jika diartikan secara harafiah, queue berarti antrian, queue merupakan salah satu contoh
aplikasi dari pembuatan double linked list
kehiduypan sehari-hari, misalnya saat Anda mengantri di loket untuk membeli tiket. Istilah
yang cukup sering dipakai seseorang masuk dalam sebuah antrian adalah enqueue. Dalam
suatu antrian, yang dating terlebih dahulu akan dilayani lebih dahulu. Istilah yang sering
dipakai bila seseorang keluar dari antrian adalah dequeue. Walaupun berbeda
implementasi, struktur data queue setidaknya harus memiliki operasi-operasi sebagai
berikut :
EnQueue
DeQueue
Clear
IsEmpty
IsFull
25
26
QUEUE-1 untuk menunjukkan bahwa antrian masih kosong dan mengalokasikan data
sebanyak MAX-QUEUE yang ditunjuk oleh Data. destruktor akan mengosongkan antrian
kembali dan mendealokasikan memori yang digunakan oleh antrian.
Operasi-operasi Queue dengan Circular Array
Konstruktor
Konstruktor berguna untuk menciptakan queue yang baru dan kosong, yaitu dengan cara
memberikan nilai awal (head) dengan nol (0) dan nilai akhir (tail) dengan jumlah maksimal
data yang akan di tampung/array.
IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah Queue masih kosong atau sudah berisi. Hal
ini dilakukan dengan mengecek apakah tail masih terletak bersebelahan dengan head dan tail
lebih besar dari head atau tidak. Jika benar, maka queue masih kosong.
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bias
menampung data dengan cara mengecek apakah tempat yang masih kosong tinggal satu atau
tidak (untuk membedakan dengan empty dimana semua tempat kosong). Jika benar berarti
queue penuh.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue tail dan head
mula-mula bernilai nol (0).
DeQueue
DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan dengan
cara memindahkan posisi head satu langkah ke belakang.
27
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bias
menampung data dengan cara mengecek apakah Jumlah Queue sudah sama dengan
MAX_QUEUE atau belum. Jika benar maka queue sudah penuh.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail
mula-mula meunjukkan ke NULL).
DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan
dengan cara menghapus satu simpul yang terletak paling depan (head).
Contoh Program:
28
29
30
31
Output:
VII. TREE
1. Definisi Tree
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. Notde lainnya terbagi
menjadi himpunan-himpunan yang saling tak berhubungan satu sama lain (disebut Subtree).
Untuk lebih jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree.
Predecessor
Successor
Ancestor
Descendant
Parent
Child
Sibling
Subtree
Size
Height
Root
32
predecessor
Leaf
Degree
2. 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- Jenis Binary Tree :
Full Binary Tree
Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki dua child dan tiap subtree harus
mempunyai panjang path yang sama.
Complete Binary Tree
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
Skewed Binary Tree adalah Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki
satu child.
Implementasi Binary Tree
Binary tree dapat diimplementasikan dalam C++ dengan menggunakan double
linkedlist.
Size (ukuran): jumlah total node yang terdapat pada pohon biner tersebut.
33
Full Binary Tree (Pohon Biner Penuh) adalah pohon biner yang setiap
nodenya pasti memiliki 0 atau 2 node anak. Perfect Binary Tree (Pohon Biner
Sempurna) adalah pohon biner yang semua node leafnya berada pada
kedalaman yang sama dari node root. Juga disebut sebagai Complete Binary
Tree (Pohon Biner Lengkap) Almost Complete Binary Tree (Pohon Biner
Hampir Lengkap) adalah pohon biner yang setiap nodenya dapat memiliki 0
node anak, atau memiliki kiri, atau jika memiliki kanan harus memiliki kiri.
Tidak boleh memiliki kanan saja.
Ilustrasi Binary Tree: Contoh Binary Tree / Pohon Biner
Implementasi
Implementasi dalam pemrograman, dalam pokok bahasan ini akan dibicarakan untuk
pohon biner saja. Asumsi awal adalah data yang hendak dimasukkan ke dalam node,
bertipe data integer.
1. Deklarasi Tree
Karena tree tersusun oleh node-node, maka yang perlu kita deklarasikan adalah
komponen node itu sendiri. Dalam contoh dibawah, akan kita namai Node.
Sebelumnya perlu kita lihat bahwa untuk mewujudkan implementasi node ke
dalam bahasa pemrograman, diperlukan sebuah struktur yang memiliki susunan
berikut ini:
34
Variabel data digunakan untuk menyimpan nilai angka node tersebut, sedangkan
kiri dan kanan, bertipe pointer, masing-masing mewakili vektor yang akan
menunjuk ke node anak kiri dan kanan.
2. Inisialisasi Tree
Untuk pertama kali, saat kita akan membuat sebuah pohon biner, asumsi awal
adalah pohon itu belum bertumbuh, belum memiliki node sama sekali, sehingga
masih kosong. Oleh karena itu perlu kita tambahkan kode berikut pada baris awal
fungsi Main:
nama *pohon. Pointer ini ditujukan untuk menunjuk struktur bertipe Node, yang
telah dibuat pada bagian 1. Karena pohon tersebut sama sekali belum memiliki
node, maka pointer *pohon ditunjukkan ke NULL.
3. Menambahkan Node Pada Tree
Karena pohon yang kita buat merupakan sebuah pohon biner, maka untuk
menambahkan sebuah node, secara otomatis penambahan tersebut mengikuti
aturan penambahan node pada pohon biner:
1. Jika pohon kosong, maka node baru ditempatkan sebagai akar pohon.
2. Jika pohon tidak kosong, maka dimulai dari node akar, dilakukan proses
pengecekan berikut:
a. Jika nilai node baru lebih kecil dari nilai node yang sedang dicek, maka lihat
ke kiri node tersebut. Jika kiri node tersebut kosong (belum memiliki kiri),
maka node baru menjadi kiri node yang sedang dicek. Seandainya kiri node
sudah terisi, lakukan kembali pengecekan a dan b terhadap node kiri
tersebut. Pengecekan ini dilakukan seterusnya hingga node baru dapat
ditempatkan.
35
b. Jika nilai node baru lebih besar dari nilai node yang sedang dicek, maka
lihat ke kanan node tersebut. Jika kanan node tersebut kosong (belum
memiliki kanan), maka node baru menjadi kanan node yang sedang dicek.
Seandainya kanan node sudah terisi, lakukan kembali
pengecekan a dan b terhadap node kanan tersebut. Pengecekan ini dilakukan
seterusnya hingga node baru dapat ditempatkan.
Proses penambahan ini diimplementasikan secara rekursif pada fungsi berikut:
Variabel **root menunjukkan node mana yang sedang dicek saat ini, untuk itu
saat pemanggilan fungsi ini, variabel **root kita beri nilai pointer yang menunjuk
ke node akar, yaitu pohon.
tambah( Jipohon, data)
Untuk selengkapnya dapat dilihat pada bagian 5, kode program lengkap.
4. Membaca dan Menampilkan Node Pada Tree
Untuk membaca dan menampilkan seluruh node yang terdapat pada pohon biner,
terdapat 3 macam cara, atau yang biasa disebut kunjungan (visit). Semua
kunjungan diawali dengan mengunjungi akar pohon. Karena proses kunjungan ini
memerlukan perulangan proses yang sama namun untuk depth (kedalaman) yang
berbeda, maka ketiganya diimplementasikan dengan fungsi rekursif.
36
a.
Kunjungan Pre-Order.
Kunjungan pre-order dilakukan mulai dari akar pohon, dengan urutan:
Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan
untuk kiri
(NULL), lanjut ke langkah ketiga. 3.
Kunjungi kanan node tersebut,
b.
Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama,
terapkan untuk kanan tersebut.
Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan
proses yang sama untuk node yang dikunjungi sebelumnya.
Kunjungan In-Order.
1. Kunjungi kiri node tersebut,
- Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama,
terapkan untuk kiri tersebut.
- Jika kiri kosong (NULL), lanjut ke langkah kedua.
2. Cetak isi (data) node yang sedang dikunjungi
3. Kunjungi kanan node tersebut,
- Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama,
terapkan untuk
kanan tersebut.
37
- Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan proses
yang sama
untuk node yang dikunjungi sebelumnya.
c.
Kunjungan Post-Order.
1. Kunjungi kiri node tersebut,
Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama,
terapkan untuk kiri tersebut.
Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama,
terapkan untuk kanan tersebut.
3. Cetak isi (data) node yang sedang dikunjungi. Proses untuk node ini selesai,
tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya.
Variabel **root pada setiap fungsi diatas menunjukkan node mana yang sedang
dikunjungi saat ini, untuk itu saat pemanggilan, variabel **root kita beri nilai
pointer yang menunjuk ke node akar, yaitu pohon.
38
menyatakan
keterhubungan
ini
sehingga
pencariannya
langsung
39
contoh bahwa G graf dengan N simpul dan M ruas. Untuk mempermudah komputasi,
graf dapat disajikan dalam bentuk matriks, disebut Matriks Ruas, yang berukuran (2
x M) atau (M x 2) yang menyatakan ruas dari graf.
Matriks adjacency dari graf G tanpa ruas sejajar adalah matriks A berukuran (N x N),
yang bersifat :
1, bila ada ruas (vi, vj)
a = 0, dalam hal lain
40
41
BAB III
PENUTUP
A. Kesimpulan
Data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang
kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan,
suara, gambar, sinyal atau simbol. Pengertian data ini menyiratkan suatu nilai yang
bisa dinyatakan dalam bentuk konstanta
Dan jika makalah saya ada kata kata yang tidak berkenan di hati anda saya
minta maaf
42
DAFTAR PUSTAKA
http://n2t2ea.blogspot.com/2014/10/normal-0-false-false-false-en-us-x-none.html
http://infonya-ti.blogspot.com/2012/07/rangkuman-mata-muliah-struktur-data-di.html
http://fadlyrunevol.blogspot.com/2010/06/matriks-penyajian-graph.html
http://infonya-ti.blogspot.com/2012/07/rangkuman-mata-muliah-struktur-data-di.html
http://nazaruddin.blog.unigha.ac.id/struktur-data/
Heriyanto, Imam, Budi Raharjo (2003). Pemrograman Borland C++ Builder. Informatika
Bandung.. Indrajit, Richardus Eko. Manajemen Sistem Informasi dan Teknologi Informasi.
Indrajit, Richardus Eko. Kajian Strategis Analisa Cost-Benefit Investasi Teknologi 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. Solichin, Achmad (2003). Pemrograman Bahasa C dengan Turbo C. Materi
Kuliah Struktur Data - Tree Structure.pdf
Modul Praktikum Struktur Data Laboratorium Dasar Komputer. Program Ilmu Komputer
Universitas Sriwijaya 2006. Copyright@PIK-Unsri Maret 2006.pdf
IlmuKomputer.Com. Wahono, Romi Satria(2003). Cepat MahirBahasa. IlmuKomputer.Com.
43