MAKALAH TIK STRUKTUR DATA

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.


(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

Linier : Stack, Queue, serta List dan Multilist Non Linier : Pohon Biner dan Graph


(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:

<tipe data> namaVariabel; Contoh:


(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

Array dua dimensi sering digambarkan sebagai sebuah matriks, merupakan perluasan dari array satu dimensi. Jika array satu dimensi hanya terdiri dari sebuah baris dan beberapa kolom elemen, maka array dua dimensi terdiri dari beberapa baris


(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; Contoh program: 1.


(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 &

• Operator & bersifat unary (hanya memerlukan satu operand saja). • Operator & menghasilkan alamat dari operandnya.


(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:

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


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

FIFO adalah suatu metode pembuatan Linked List di mana data yang masuk paling awal adalah data yang keluar paling awal juga. Hal ini dapat di analogikan (dalam kehidupan sehari-hari), misalnya saat sekelompok orang yang datang (ENQUEUE) mengantri hendak membeli tiket di loket.


(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

Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya,


(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

Fungsi Delete Now berguna untuk menghapus simpul pada posisi yang sedang ditunjuk oleh 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

Dalam bab ini penjelasan mengenai stack akan menggunakan kelas stack. Kelima operasi stack diatas akan dideklarasikan secara abstrak dalam kelas ini,


(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

Metode ini adalah teknik khusus yang dikembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaan hanya sebuah array untuk menampung dua stack.


(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

Selain implementasi stack dengan array seperti telah dijelasnkan sebelumnya, ada cara lain untuk mengimplementasi stack dalam C++, yakni dengan single linked list. Keunggulannya dibandingkan array tebtu saja adalah penggunaan alokasi memori yang dinamis sehingga menghindari pemborosan memori. Misalnya saja pada stack dengan array disediakan tempat untuk stack berisi 150 elemen, sementara ketika dipakai oleh user stack hanya diisi 50 elemen, maka telah terjadi pemborosan memori untuk sisa 100 elemen, yang tak terpakai. Dengan penggunaan linked list maka tempat yang disediakan akan sesuai dengan banyaknya elemen yang mengisi stack. Oleh karena itu pula dalam stack dengan linked list tidak ada


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

Berikut ini diberikan deklarasi kelas Queue Linear sebagai implementasi dari Queue menggunakan linear array. Dalam prakteknya, anda dapat menggantinya sesuai dengan kebutuhan Anda. Data diakses dengan field data, sedangkan indeks item pertama dan terakhir disimpan dalam field Head dan Tail. Konstruktor akan menginisialisasikan nilai Head dan Tail dengan -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.


(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 elemen yang terletak di belakangnya.

Clear

Fungsi Clear berguna untuk menghapus semua lemen dalam queue dengan jalan mengeluarkan semua elemen tersebut satu per satu hingga queue kosong dengan memanfaatkan fungsi DEQueue.

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.

Posisi head dan tail pada gambar diatas adalah bebas asalkan saling bersebelahan. Berikut ini diberikan deklarasi kelas Queue Circular sebagai implementasi circular array. Dalam prakteknya, Anda dapat menggantikanny sesuai dengan kebutuhan Anda. Data diakses dengan field data, sedangkan indeks itemn pertama dan terakhir disimpan dalam field Head dan Tail. Konstruktor akan menginisialisasi nilai Head dan Tail dengan 0 dan


(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

Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong.


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

Implementasi Binary Tree

Binary tree dapat diimplementasikan dalam C++ dengan menggunakan double linkedlist.

VIII. Binary Tree (Pohon Biner)

Dalam mata kuliah struktur data, secara khusus akan dipelajari mengenai pohon biner. Pohon biner adalah sebuah tree yang pada masing-masing 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

sampai ke node anaknya yang paling ujung (leaf). Depth biasa juga disebut height.


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

Sebelumnya perlu kita lihat bahwa untuk mewujudkan implementasi node ke dalam bahasa pemrograman, diperlukan sebuah struktur yang memiliki susunan berikut ini:


(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

tersebut. Pengecekan ini dilakukan seterusnya hingga node baru dapat ditempatkan.


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

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.


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

Matriks Incidence dari Graph, yaitu Matriks yang menghubungkan Vertex dengan edge, tanpa self-loop diefinisikan sebagai matriks M berukuran (NxM).


(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 :

1, bila ada ruas (vi, vj) a = 0, dalam hal lain


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

Simpul, anggota v, digambarkan sebagai titik (atau lingkaran kecil). Sedangkan arkus a=(u,v), digambarkan sebagai garis dilengkapi dengan tanda panah mengarah dari simpul u ke simpul v. Simpul u disebut titik pangkal, dan simpul v disebut titik terminal dari arkus tersebut.


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

 Dan jika makalah saya ada kata – kata yang tidak berkenan di hati anda saya minta maaf


(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


(1)

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

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.


(2)

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.

Matriks Incidence dari Graph, yaitu Matriks yang menghubungkan Vertex dengan edge, tanpa self-loop diefinisikan sebagai matriks M berukuran (NxM).


(3)

Graph Terarah (Directed Graph / Digraph)

Graph terarah adalah grap yang dapat menghubungkan V1 ke V2 saja (1 arah). Maksimum jumlah busur dari n simpul adalah :

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.


(4)

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)

Simpul, anggota v, digambarkan sebagai titik (atau lingkaran kecil). Sedangkan arkus a=(u,v), digambarkan sebagai garis dilengkapi dengan tanda panah mengarah dari simpul u ke simpul v. Simpul u disebut titik pangkal, dan simpul v disebut titik terminal dari arkus tersebut.


(5)

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

 Dan jika makalah saya ada kata – kata yang tidak berkenan di hati anda saya minta maaf


(6)

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