• Tidak ada hasil yang ditemukan

MAKALAH TIK STRUKTUR DATA

N/A
N/A
Protected

Academic year: 2017

Membagikan "MAKALAH TIK STRUKTUR DATA"

Copied!
43
0
0

Teks penuh

(1)

BAB I 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.

1.2 Rumusan Masalah

Makalah ini akan membahas tentang : 1. Konsep dasar struktur data

2. Pointer

3. Array (1 dimensi, 2 dimensi dan multi/banyak) 4. Linked List,

5. Stack 6. Queue 7. Tree

(2)

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.

(3)

Struktur data menyangkut susunan fisik data dalam komputer dan berfungsi agar:

 Penyimpanan lebih efesien  Agar tersusun lebih terurut  Agar data retrieval lebih efektif

Struktur data diperlukan dalam perencanaan Algoritma dan penyusunan program sebagai dasar teknik dari Database. Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efesien dan sederhana.

Secara garis besar type data dapat dikategorikan menjadi :  Type data sederhana

 Type data sederhana tunggal (Integer, real, boolean dan karakter)

 Type data sederhana majemuk (String)

Struktur data

 Struktur data sederhana (array dan record)

 Struktur data majemuk

(4)

 Graph ( Graf )

C. Konstanta & Variabel

Jika dalam membuat suatu program, tentu akan sering menggunakan bilangan numerik atau suatu kalimat string yang sama yang akan digunakan berkali-kali, ada baiknya bilangan atau kalimat tersebut dijadikan sebagai suatu konstanta.

Manfaat Konstanta:

Penggunaan konstanta akan membuat program menjadi lebih mudah dimengerti dan diperbaiki.

Penggunaan konstanta akan dapat memberikan nama yang mudah dipahami untuk suatu bilangan numerik yang kompleks. Contoh: phi = 3.141592.

Variabel adalah sebuah identifier yang nilainya dapat diubah sesuai dengan kebutuha program. Jika dibutuhkan sebuah variabel yang dapat dikenali oleh semua lingkungan dalam program maka harus digunakan variabel Global. Pada C++ selalu terdapat fungsi utama, variabel global biasanya dideklarasikan di luar fungsi utama tersebut. Juga terdapat variabel Lokal. Variabel lokal hanya dikenali oleh suatu fungsi saja, artinya variabel lokal tidak dikenal oleh lingkungan luar di dalam program yang dibuat. Variabel lokal harus berada dalam lingkup fungsi tertentu. II. POINTER

Pointer merupakan tipe data berukuran 32 bit yang berisi satu nilai yang berpadanan dengan alamat memori tertentu. Sebagai contoh, sebuah variabel P bertipe pointer bernilai 0x0041FF2A, berarti P menunjuk pada alamat memori 0041FF2A. Pointer dideklarasikan seperti variabel biasa dengan menambahkan tanda * (asterik) yang mengawali nama variabel.

Bentuk Umum:

(5)

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:

(6)

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).

(7)

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 ke- 0 1 2 3 4 5 6 7 8 9

Nilai 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

3. Array Dua Dimensi

(8)

2 32 34 23 56 54 34 45

3 11 12 32 23 56 76 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;

(9)
(10)
(11)
(12)
(13)
(14)

Tipe_array nama_array [ukuran 1][ukuran 2] . . . [ukuran N] Int nilai[10][5][5];

 Struktur Data Dinamis (jumlah komponennya dapat berubah) contoh: Pointer Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.

Operator Pointer ada dua, yaitu :

 Operator &

(15)

 Operator *

• Operator * bersifat unary (hanya memerlukan satu operand saja). • Operator * menghasilkan nilai yang berada pada sebuah alamat.

IV. LINKED LIST

Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung-menyambung, dinamis dan terbatas.

 Linked List sering disebut juga Senarai Berantai

 Linked List saling terhubung dengan bantuan variabel pointer

 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.

1. Single Linked List

Apabila setiap Anda ingin menambahkan data, Anda selalu menggunakan variabel pointer yang baru, Anda akan membutuhkan banyak sekali pointer. Oleh karena itu, ada baiknya jika Anda hanya menggunakan satu variabel pointer saja untuk menyimpan banyak data dengan metode yang kita sebut Linked List. Jika diterjemahkan, ini berarti satu daftar isi yang saling berhubungan. Untuk lebih jelasnya, perhatikan gambar di bawah ini:

(16)

menunjuk ke NULL).

Pembuatan Single Linked List dapat menggunakan 2 metode: • LIFO (Last In First Out), aplikasinya : Stack (Tumpukan) • FIFO (First In First Out), aplikasinya : Queue (Antrean)

LIFO ( Last In First Out)

Lifo adalah suatu metode pembuatan Linked List di mana data yang masuk paling akhir adalah data yang keluar paling awal. Hal ini dapat di analogikan (dalam kehidupan sehari-hari) dengan saat Anda menumpuk barang seperti digambarkan dibawah ini. Pembuatan sebuah simpul dalam suatu linked list seperti digambarkan dibawah ii, disebutkan istilah INSERT, Jika linked list dibuat dengan metode LIFO, terjadi penambahan / Insert simpul di belakang.

Gambar. Ilustrasi Single Linked List dengan metode LIFO

FIFO (Fisrt In Fisrt Out)

(17)

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

(18)

Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak satu arah saja, maju/ mundur, atau kanan/kiri sehingga pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, anda dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama Linked list berpointer Ganda atau Double Linked List. Operasi –operasi pada Double Linked List Insert Tail

Fungsi insert tail berguna untuk menambah simpul di belakang (sebelah kanan) pada sebuah linked list.

Insert Head

Sesuai dengan namanya, fungsi Insert Head berguna untuk menambah simpul di depan (sebelah kiri). Fungsi ini tidak berada jauh dengan fungsi Insert Tail yang telah dijelaskan sebelumnya.

Delete Tail

Fungsi Delete Tail berguna untuk menghapus simpul dari belakang. Fungsi ini merupakan kebalikan dari fungsi Insert Tail yang menambah simpul dibelakang. Fungsi Delete Tail akan mengarahkan Now kepada Tail dan kemudian memanggil fungsi Delete Now.

Delete Head

Fungsi Delete Head merupakan kebalikan dari fungsi Delete Tail yang menghapus simpul dari belakang, sedangkan Delete Head akan menghapus simpul dari depan (sebelah kiri). Fungsi Delete Head akan mengarahkan Now kepada Head dan kemudianm memanggil fungsi Delete Now.

Delete Now

(19)

Circular Double Linked List

Ini adalah double linked list yang simpul terakhirnya menunjuk ke simpul terakhirnya menunjuk ke simpul awalnya menunjuk ke simpul akhir sehingga membentuk suatu lingkaran.

Operasi-operasi pada Circular Double Linked List Insert Tail

Fungsi insert Tail berguna untuk menambah simpul di belakang (sebelah kanan) pada sebuah circular double linked list.

Insert Head

Sesuai dengan namanya, fungsi Insert Head berguna untuk menambah simpul di depan (sebelah kiri). Fungsi ini tidak berbeda jauh dengan fungsi Insert tail yang telah dijelaskan sebelumnya.

Delete Tail

Fungsi Delete Tail berguna untuk menghapus simpul dari belakang. Fungsi ini kebalikan dari fungsi Insert Tail yang menambah simpul dibelakang.

Delete Head

Fungsi Delete Head merupakan kebalikan dari fungsi Delete Tail yang menghapus simbul dari belakang. Delete Head akan menghapus simpul dari depan (sebelah kiri). Delete Now

Fungsi Delete Now, sesuai dengan namanya, berguna untuk menghapus simpul pada posisi yang diinginkan.

(20)
(21)

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 Untuk menambahkan item pada tumpukan paling atas

Pop Untuk mengambil item teratas Clear Untuk mengosongkan stack

IsEmpty Untuk memeriksa apakah stack kosong IsFull Untuk memeriksa apakah stack sudah penuh

(22)

Sesuai dengan sifat stack, pengambilan / penghapusan delemen dalam stack harus dimulai dari elemen teratas.

Operasi-operasi pada Stcak dengan Array Konstruktor

Fungsi ini membuat sebuah stack baru yang masih kosong. Konsepnya adalah bahwa Top menunjukkan elemen stack teratas. Jika Top bernilai -1, berarti tumpukan kosong.

IsFul

Fungsi ini memeriksa apakah stack yang ada sudah penuh. Stack penuh jika stack penuh jika puncak stack terdapat tepat dibawah jumlah maksimum yang dapat ditampung stack atau dengan kata lain Top = MAX_STACK -1.

Push

Fungsi ini menambahkan sebuah elemen ke dalam stack dan tidak bias dilakukan lagi jika stack sudah penuh.

IsEmpty

Fungsi menentukan apakah stack kosong atau tidak. Tanda bahwa stack kosong adalah Top bernilai kurang dari nol.

Pop

Fungsi ini mengambil elemen teratas dari stack dengan syarat stack tidak boleh kosong.

Clear

Fungsi ini mengosongkan stack dengan cara mengeset Top dengan -1. Jika Top bernilai kurang dari nol maka stack dianggap kosong.

3. Double Stack dengan Array

(23)

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 operasi-operasi yang tidak berbeda jauh dengan operasi-operasi single stack dengan array. Operasi-operasi 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.

4. Stack dengan Single Linked List

(24)

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

(25)

Output:

VI. QUEUE

1. Definisi Queue

Jika diartikan secara harafiah, queue berarti antrian, queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang cukup sering kita temui dalam 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 Memasukkan data ke dalam antrian DeQueue Mengeluarkan data terdepan dari antrian Clear Menghapus seluruh antrian

IsEmpty Memeriksa apakah antrian kosong IsFull Memeriksa apakah antrian penuh

2. Implementasi Queue dengan Linear Array

Linear Array

Linear array adalah suatu array yang dibuat seakan-akan merupakan suatu garis lurus dengan satu pintu masuk dan satu pintu keluar.

(26)

IsEmpty

Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. hal ini dilakukan dengan mengecek apakah tail bernilai -1 atau tidak. Nilai -1 menandakan bahwa queue masih kosong.

IsFull

Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa menampung data dengan cara mengecek apakah nilai tail sudah sama dengan jumlah maksimal queue. Jika nilai keduanya sama, berarti queue sudah penuh.

EnQueue

Fungsi EnQueue berguna untuk memasukkan sebuah elemen dalam queue. DeQueue

Fungsi DeQueue berguna untuk mengambil sebuah elemen dari queue. Operasi ini sering disebut juga serve. Hal ini dilakukan dengan cara memindahkan sejauh satu langkah ke posisi di depannya sehingga otomatis elemen yang paling depan akan tertimpa dengan

3. Implementasi Queue dengan Circular Array

Circular Array

Circular array adalah suatu array yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal (head) dan titik akhir (tail) saling bersebelahan jika array tersebut masih kosong.

(27)

MAX-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.

7.4. Implementasi Queue dengan Double Linked List

Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode linked list yang digunakan adalah double linked list.

Operasi-operasi Queue dengan Double Linked List Konstruktor

Konstruktor berguna untuk menciptakan queue yang baru dan kosong, yaitu dengan mengarahkan pointer head dan tail kepada NULL.

IsEmpty

(28)

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).

(29)
(30)
(31)
(32)

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 Node yang berada di atas node tertentu

Successor Node yang berada dibawah node tertentu

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

Parent Predecessor satu level di atas suatu node

Child Successor satu level di bawah suatu node

Sibling Node-node yang memiliki parent yang sama dengan suatu node

Subtree Bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.

Size Banyaknya node dalam suatu tree

Height Banyaknya tingkatan / level dalam suatu tree

(33)

predecessor

Leaf Node-node dalam tree yang tak memiliki successor

Degree Banyaknya child yang dimiliki suatu node

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. simpulnya hanya dapat memiliki maksimum 2 (dua) simpul anak. Tidak boleh lebih. Pada pohon biner, umumnya kedua node anak disebut dengan

posisinya, yaitu kiri dan kanan. Beberapa istilah pada pohon biner:

• Size (ukuran): jumlah total node yang terdapat pada pohon biner tersebut. • Depth (kedalaman): panjang jalur yang menghubungkan sebuah node

(34)

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.

(35)

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

(36)

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.

(37)

a. Kunjungan Pre-Order.

Kunjungan pre-order dilakukan mulai dari akar pohon, dengan urutan:  Cetak isi (data) node yang sedang dikunjungi

 Kunjungi kiri node tersebut,

Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri

(NULL), lanjut ke langkah ketiga. 3. Kunjungi kanan node tersebut,

• 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.

b. 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

(38)

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 kiri kosong (NULL), lanjut ke langkah kedua. 2. Kunjungi kanan node tersebut,

• Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut.

• Jika kanan kosong (NULL), lanjut ke langkah ketiga.

3. Cetak isi (data) node yang sedang dikunjungi. Proses untuk node ini selesai, tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya.

(39)

5. Kode Program Lengkap

Berikut ini kode program keseluruhan, termasuk menu tampilan, di mana di dalamnya terdapat Deklarasi Tree, Inisialisasi Tree, Penambahan Node, dan Pembacaaan serta Menampilkan Node dengan 3 macam kunjungan. Kode ditulis dengan C++ 3.00.

IX. GRAPH (GRAF) DAN MATRIK PENYAJIAN DATA 1. Pengertian

Graph merupakan struktur data yang paling umum. Jika struktur linier memungkinkan pendefinisian keterhubungan sekuensial antara entitas data, struktur data tree memungkinkan pendefinisian keterhubungan hirarkis, maka struktur graph memungkinkan pendefinisian keterhubungan tak terbatas antara entitas data. Banyak entitas-entitas data dalam masalah-masalah nyata secara alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas demikian. Contoh: informasi topologi dan jarak antar kota-kota di pulau Jawa.

Dalam masalah ini kota X bisa berhubungan langsung dengan hanya satu atau lima kota lainnya. Untuk memeriksa keterhubungan dan jarak tidak langsung antara dua kota dapat diperoleh berdasarkan data keterhubungan-keterhubungan langsung dari kota-kota lainnya yang memperantarainya. Representasi data dengan struktur data linier ataupun hirarkis pada masalah ini masih bisa digunakan namun akan membutuhkan pencarian-pencarian yang kurang efisien. Struktur data graph secara eksplisit menyatakan keterhubungan ini sehingga pencariannya langsung (straightforward) dilakukan pada strukturnya sendiri.

2. Matriks Penyajian Graph

Matriks Adjacency dari Graph G, yaitu Matriks yang menghubungkan Vertex dengan Vertex, tanpa ruas sejajar adalah Matriks A berukuran (NxN).

Matriks Adjacency merupakan matriks simetri.

(40)

Graph Tak Terarah (Undirected Graph)

Graph tak terarah adalah graph yang menghubungkan 2 vertex V1 ke V2 dan V2 ke V1 (2 arah). Bila Vertex = n, maka Graph tak terarah komplit akan mempunyai busur edge sama dengan :

Penelusuran graph

Dapat dilakukan dengan 2 cara, yaitu : 1. Depth First Search (DFS)

Penelusuran dengan DFS pada graph tak berarah dengan melakukan pengecekan pada node dengan kedalaman pertama dari node yang ditinjau.

2. Breadh First Searh (BFS)

Berbeda dengan cara BFS, dengan BFS penelusuran akan diawasi dari node-1, kemudian melebar pada Adjacent Node dari Node-1 dan diteruskan pada Node-2, Node-3 dan seterusnya.

Contoh : Matriks Penyajian Graph

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 :

(41)

Matriks adjacency merupakan matriks simetri.

Untuk graph dengan ruas sejajar, matriks adjacency didefinisikan sebagai berikut :

p, bila ada p buah ruas menghubungkan (vi, vj) (p > 0) a = 0, dalam hal lain

Matriks Incidence dari graf G, tanpa self-loop didefinisikan sebagai matriks M berukuran (N x M)

1, bila ruas ej berujung di simpul vi,

m = 0, dalam hal lainGRAF BERARAH (DIGRAF) Suatu graf berarah (digraf) D terdiri atas 2 himpunan : 1. Himpunan V, anggotanya disebut simpul

2. Himpunan A, merupakan himpunan pasangan terurut, yang disebut ruas berarah atau arkus.

Notasi : D(V, A)

(42)

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.

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.

B. Saran

 Bagi pembaca di harapkan mengamalkan ilmu yang di dapat setelah membaca makalah ini.

(43)

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

Gambar

Gambar. Ilustrasi Single Linked List dengan metode LIFO

Referensi

Dokumen terkait

tampilan yang sangat penuh dan masih kosong dengan cara mengurangi tulisan yang terlalu penuh dan menambahkan beberapa gambar atau tampilan pada ruang yang

Langkah operasi pop pada stack yang menggunakan array adalah terlebih dahulu memeriksa apakah stack sedang keadaan kosong, jika tidak kosong maka data diambil pada posisi

Berisi procedure CekStep untuk mengecek masih terdapat langkah atau tidak untuk melanjutkan permainan ini, yang dicek adalah ada tidaknya bilangan yang

Bila stack penuh tidak dapat dikenakan operasi penambahan data (push), dan bila stack kosong maka operasi pengambilan data (pop) tidak dapat dilakukan.. Untuk

pengecekan apakah tiap node yang dilewati dari leaf hingga kembali ke root, apakah masih balance atau tidak.. Bila seluruh node yang dilewati hingga

Fungsi ini berguna ketika proses dequeue yaitu ketika sebuah elemen akan diambil, maka harus diperiksa dulu apakah memiliki data atau tidak.. Fungsi ini akan mempunyai

Gambar pondasi batu kali berbentuk trapesium ini sering digunakan sebagai struktur pondasi pada rumah tinggal 1 lantai sedangkan pada rumah tinggal bertingkat masih

Meningkatkan kecermatan merupakan salah satu cara mengontrol/mengecek pekerjaan apakah data yang telah dikumpulkan, dibuat, dan disajikan sudah benar atau belum.Untuk meningkatkan