STRUKTUR DATA Struktur Data adalah suatu koleksi atau
- Slides: 146
STRUKTUR DATA Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang tepat didalam proses pemrograman, akan menghasilkan Algoritma yang lebih jelas dan tepat sehingga menjadikan program secara keseluruhan lebih sederhana.
Pada garis besarnya, Data dapat dikategorikan menjadi : A. Type Data Sederhana / Data Sederhana Terdiri dari : 1. Data Sederhana Tunggal Misalnya : Integer, Real/Float, Boolean dan Character 2. Data Sederhana Majemuk Misalnya : String B. Struktur Data Terdiri dari : 1. Struktur Data Sederhana Misalnya Array dan Record
2. Struktur Data Majemuk Terdiri dari : a. Linier Misalnya : Stack, Queue dan Linear Linked List. b. Non Linier Misalnya : Pohon (Tree), Pohon Biner (Binary Tree), Pohon Cari Biner (Binary Search Tree), General Tree serta Graph.
ARRAY v Array / Larik : Struktur Data Sederhana yang dapat didefinisikan sebagai pemesanan alokasi memory sementara pada komputer. v Array dapat didefinisikan sebagai suatu himpunan hingga elemen yang terurut dan homogen. v Terurut : Dapat diartikan bahwa elemen tersebut dapat diidentifikasi sebagai elemen pertama, elemen kedua dan seterusnya sampai elemen ke-n. v Homogen : Adalah bahwa setiap elemen dari sebuah Array tertentu haruslah mempunyai type data yang sama.
v Sebuah Array dapat mempunyai elemen yang seluruhnya berupa integer atau character atau String bahkan dapat pula terjadi suatu Array mempunyai elemen berupa Array. v Karakteristik Array : 1. Mempunyai batasan dari pemesanan alokasi memory (Bersifat Statis) 2. Mempunyai Type Data Sama (Bersifat Homogen) 3. Dapat Diakses Secara Acak
v 3 Hal yang harus diketahui dalam mendeklarasikan array : a. Type data array b. Nama variabel array c. Subskrip / index array v Jenis Array (yang akan dipelajari) adalah : a. Array Dimensi Satu (One Dimensional Array) b. Array Dimensi Dua (Two Dimensional Array) c. Array Dimensi Tiga (Thee Dimensional Array)
1. ARRAY DIMENSI SATU (One Dimensional Array) Dapat disebut juga dengan istilah vektor yang menggambarkan data dalam suatu urutan Deklarasi : Type_Data Nama_Variabel [index] Misalnya : int A[5]; Penggambaran secara Logika : Elemen Array A[1] A[2] A[3] A[4] A[5] 0 1 2 3 4 Subscript / Index
Rumus untuk menentukan jumlah elemen dalam Array : n = Perkalian dari elemen sebelumnya (Elemen Array) (untuk array dimensi dua & tiga) i=1 Contoh : Suatu Array A dideklarasikan sbb : int A[10]; maka jumlah elemen Array dimensi satu tersebut adalah = 10
PEMETAAN (MAPPING) ARRAY DIMENSI SATU KE STORAGE Rumus : @A[i] = B + (i – 1) * L Dimana : @A[i] : Posisi Array yg dicari B : Posisi awal index di memory komputer i : Subkrip atau indeks array yg dicari L : Ukuran / Besar memory suatu type data Contoh : Suatu Array A dideklarasikan sebagai berikut : int A[5]; dengan alamat awal index berada di 0011 (H) dan ukuran memory type data integer = 2 Tentukan berapa alamat array A[3] ?
Rumus : @A[i] = B + (i – 1) * L Diketahui : @A[i] = A[3] B = 0011 (H) i = 3 L = 2 Penyelesaian : A[3] = 0011(H) + (3 – 1) * 2 = 0011(H) + 4 (D) = 0011(H) + 4 (H) = 0015(H) 0 1 2 3 4 A[1] A[2] A[3] A[4] A[5] 0011 0013 0015 0017 0019 4 Desimal = 4 Hexa
Contoh Penerapan Array Dimensi 1 Pada Program C++ 0 1 2 3 4 5 6 7 indeks value 21 d 2 21 d 4 21 d 6 21 d 8 21 da 21 dc 21 de 21 e 0 alamat %x adalah hexadesimal
2. ARRAY DIMENSI DUA (Two Dimensional Array) Sering digunakan dalam menterjemahkan matriks pada pemrograman. Deklarasi : Type_Data Nama_Variabel [Index 1] [index 2]; Misal : int A[3][2]; Penggambaran secara Logika : 0 1 0 1 2
Menentukan jumlah elemen dalam Array dimensi dua: n = Perkalian dari elemen sebelumnya (Elemen array) (untuk array dimensi dua & tiga) i=1 Contoh : Suatu Array X dideklarasikan sbb : int X[4][3]; maka jumlah elemen Array dimensi dua tersebut adalah : (4) * (3) = 12
PEMETAAN (MAPPING) ARRAY DIMENSI DUA KE STORAGE Terbagi Dua cara pandang (representasi) yang berbeda : 1. Secara Kolom Per Kolom (Coloumn Major Order/CMO) @M[i][j] = M[0][0] + {(j - 1) * K + (i - 1)} * L 2. Secara Baris Per Baris (Row Major Order / RMO) @M[i][j] = M[0][0] + {(i - 1) * N + (j - 1)} * L Keterangan : @M[i][j] = Posisi Array yg dicari, M[0][0] = Posisi alamat awal index array, i = Baris, j = kolom, L = Ukuran memory type data K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris
Penggambaran secara logika Misal : int M[3][2]; (Array dengan 3 Baris & 2 Kolom) 0 1 0 1 2 Berdasarkan Cara pandang : 1. Kolom Per Baris (Row Major Order / RMO) M[0, 0] M[0, 1] M[1, 0] M[1, 1] M[2, 0] M[2, 1] Jumlah elemen per baris = 2 2. Baris Per Kolom (Coloumn Major Order / CMO) M[0, 0] M[1, 0] M[2, 0] M[0, 1] Jumlah elemen per kolom = 3 M[1, 1] M[2, 1]
Contoh Pemetaan : Suatu Array X dideklarasikan sebagai berikut : Float X[4][3], dengan alamat index X[0][0] berada di 0011(H) dan ukuran type data float = 4 Tentukan berapa alamat array X[3][2] berdasarkan cara pandang baris dan kolom ? 0 0 1 0011(H) 1 2 3 index ? 2 index
Lanjutan Contoh Pemetaan : Penyelesaian : Secara Baris Per Baris (Row Major Oder / RMO) @M[i][j] = @M[0][0] + {(i - 1) * N + (j - 1)} * L X[3][2] = 0011(H) + {(3 – 1) * 3 + (2 – 1)} * 4 = 0011(H) + 28 (D) 1 C (H) = 0011(H) + 1 C (H) = 002 D(H)
Lanjutan Contoh Pemetaan : Penyelesaian : Secara Kolom Per Kolom (Coloumn Major Oder / CMO) @M[i][j] = @M[0][0] + {(j - 1) * K + (i - 1)} * L X[3][2] = 0011(H) + {(2 – 1) * 4 + (3 – 1)} * 4 = 0011(H) + 24 (D) 18 (H) = 0011(H) + 18 (H) = 0029(H)
3. ARRAY DIMENSI TIGA (Three Dimensional Array) Digunakan untuk mengelola data dalam bentuk 3 dimensi atau tiga sisi. Deklarasi : Type_Data Nama_Variabel [index 1] [ndex 2] [index 3]; Misal : int A [3][4][2]; Penggambaran secara Logika : 0 1 1 2 0 1 2 3 0
Menentukan jumlah elemen dalam Array dimensi 3 : n = Perkalian dari statemen sebelumnya (index array) i=1 Contoh : Suatu Array X dideklarasikan sbb : int A [3][4][2]; maka jumlah elemen Array dimensi tiga tersebut adalah : (3) * (4) * (2) = 24
PEMETAAN (MAPPING) ARRAY DIMENSI TIGA KE STORAGE Rumus : @M[m][n][p] = M[0][0][0] + {((m-1) *(jum. elemen 2 * jum. elemen 3)) + ((n-1)*(jum. elemen 3)) + ((p-1)}* L Contoh : Suatu Array A dideklarasikan sebagai berikut : int A [2][4][3], dengan alamat awal index A[0][0][0] berada di 0011(H) dan ukuran type data int = 2 Tentukan berapa alamat array di A[2][3][2] ?
Contoh Pemetaan : Penyelesaian : 1. Tentukan jumlah elemen array A [2][4][3] = (2) * (4) * (3) = 24 2. @M[m][n][p] = M[0][0][0] + {((m-1) *(jum. elemen 2 * jum. elemen 3)) + ((n-1)*(jum. elemen 3)) + ((p-1)}* L A[2][3][2] = 0011(H) + {((2– 1) * 4 * 3) + ((3 -1) * 3) + (2 -1)} * 2 = 0011(H) + {12 + 6 + 1 } * 2 = 0011(H) + 38 (D) 26 (H) = 0011(H) + 26 (H) = 0037(H)
TRINGULAR ARRAY (ARRAY SEGITIGA) Tringular Array dapat merupakan Upper Tringular (seluruh elemen di bawah diagonal utama = 0), ataupun Lower Tringular (seluruh elemen di atas diagonal utama = 0). Dalam Array Lower Tringular dengan N baris, jumlah maksimum elemen <> 0 pada baris ke-I adalah = I, karenanya total elemen <> 0, tidak lebih dari N S I = N(N+1) / 2 I=1
Gambar (a) Upper Triangular Array (b) Lower Triangular Array
Contoh : Diketahui suatu array segitiga atas memiliki 3 baris dan kolom, tentukan berapakah jumlah elemen yang bukan nol pada array tersebut. I = N(N+1) / 2 I = 3 (3+1) / 2 = 12 / 2 = 6 Contoh bentuk array nya adalah seperti dibawah ini : 10 20 30 5 10 15 0 40 50 0 20 25 0 0 60 0 0 30 Dan lain-lain
PERTEMUAN 3 LINKED LIST • KONSEP POINTER DAN LINKED LIST • Untuk mengolah data yang banyaknya tidak bisa ditentukan sebelumnya, maka disediakan satu fasilitas yang memungkinan untuk menggunakan suatu perubah yang disebut dengan perubah dinamis (Dinamic variable) • Perubah Dinamis (Dinamic variable) • Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.
Contoh penggunaan pointer dalam program C++: Void main() { int x, y, *z; x = 75; //nilai x = 75 y = x; //nilai y diambil dari nilai x z = &x; //nilai z menunjuk kealamat pointer dari nilai x getch(); }
LINKED LIST (LINKED LIST) Salah satu Struktur Data Dinamis yang paling sederhana adalah Linked List atau Struktur Berkait atau Senarai Berantai, yaitu suatu kumpulan komponen yang disusun secara berurutan dengan bantuan Pointer. Linked List (Senarai Berantai) disebut juga dengan Senarai Satu Arah (One-Way List). Masing-masing komponen dinamakan dengan Simpul (Node).
Setiap simpul dalam suatu Linked List terbagi menjadi dua bagian, yaitu : 1. Medan Informasi Berisi informasi yang akan disimpan diolah. 2. Medan Penyambung (Link Field) Berisi alamat berikutnya. Bernilai 0, Jika Link tersebut tidak menunjuk ke Data (Simpul) lainnya. Penunjuk ini disebut Penunjuk Nol.
Pembuatan Single Linked List non Circular Deklarasi Node : typedef struct TNode{ int data; TNode *next; }; Keterangan: • Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field next yang bertipe pointer dari TNode
• Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode yang berguna sebagai kepala linked list. • Digunakan perintah new untuk mempersiapkan sebuah node baru berserta alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke NULL. TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL;
Deklarasi Pointer Penunjuk Head Single Linked List • Manipulasi linked list tidak dapat dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer penunjuk ke node pertama (Head) dalam linked list • Deklarasinya sebagai berikut: TNode *head;
Fungsi Inisialisasi Single Linked List void init() { head = NULL; } Function untuk mengetahui kondisi Single Linked List • Jika pointer head tidak menunjuk pada suatu node maka kosong int is. Empty() { if (head == NULL) return 1; else return 0; }
Menambah Node di Depan • Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara: node head ditunjukkan ke node baru tersebut. • Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan.
void insert. Depan(int databaru) { TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; if(is. Empty()==1) { head=baru; head->next = NULL; } else { baru->next = head; head = baru; } printf(”Data masukn”); }
Menambah Node di Belakang • Penambahan data dilakukan di belakang, namun pada saat pertama kali, node langsung ditunjuk oleh head. • Penambahan di belakang membutuhkan pointer bantu untuk mengetahui node terbelakang. Kemudian, dikaitkan dengan node baru. • Untuk mengetahui data terbelakang perlu digunakan perulangan.
void insert. Belakang (int databaru) { TNode *baru, *bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(is. Empty()==1) { head=baru; head->next = NULL; } else { bantu=head; while(bantu->next!=NULL){ bantu=bantu->next; } bantu->next = baru; } printf("Data masukn“); }
Menghapus Node di Depan • Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain (hapus) yang digunakan untuk menunjuk node yang akan dihapus, barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. • Sebelum data terdepan dihapus, terlebih dahulu head harus menunjuk ke node berikutnya agar list tidak putus, sehingga node setelah head lama akan menjadi head baru • Jika head masih NULL maka berarti data masih kosong!
void hapus. Depan () { TNode *hapus; int d; if (is. Empty()==0){ if(head->next != NULL){ hapus = head; d = hapus->data; head = head->next; delete hapus; } else { d = head->data; head = NULL; } printf(“%d terhapusn“, d); } else cout<<"Masih kosongn"; }
Menghapus Node di Belakang • Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, pointer bantu untuk menunjuk node sebelum node yang dihapus yang akan menjadi node terakhir. • Pointer bantu digunakan untuk menunjuk ke nilai NULL. Pointer bantu selalu bergerak sampai sebelum node yang akan dihapus, kemudian pointer hapus diletakkan setelah pointer bantu. Selanjutnya pointer hapus akan dihapus, pointer bantu akan menunjuk ke NULL.
void hapus. Belakang(){ TNode *hapus, *bantu; int d; if (is. Empty()==0){ if(head->next != NULL){ bantu = head; while(bantu->next!=NULL){ bantu = bantu->next; } hapus = bantu->next; d = hapus->data; bantu->next = NULL; delete hapus; } else { d = head->data; head = NULL; } printf(“%d terhapusn“, d); } else printf(“Masih kosongn“); }
Function untuk menghapus semua elemen Linked List void clear() { TNode *bantu, *hapus; bantu = head; while(bantu!=NULL) { hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; }
Menampilkan / Membaca Isi Linked List • Linked list ditelusuri satu-persatu dari awal sampai akhir node. Penelusuran dilakukan dengan menggunakan pointer bantu, karena pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. • Penelusuran dilakukan terus sampai ditemukan node terakhir yang menunjuk ke nilai NULL. Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. • Jika head masih NULL berarti data masih kosong!
void tampil(){ TNode *bantu; bantu = head; if(is. Empty()==0){ while(bantu!=NULL){ cout<<bantu->data<<" "; bantu=bantu->next; } printf(“n”); } else printf(“Masih kosongn“); }
STACK Merupakan bentuk khusus dari Linier List yang pemasukan dan penghapusan elemennya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir dari List (Top) Prinsip Stack adalah LAST-IN-FIRST-OUT (LIFO). Klik untuk Ilustrasi Stack
OPERASI STACK • • • ISEMPTY Untuk memeriksa apakah stack kosong ISFULL Untuk memeriksa apakah stack sudah penuh PUSH Untuk menambahkan item pada posisi paling atas (TOP) POP Untuk menghapus item paling atas (TOP) CLEAR Untuk mengosongkan stack
STACK PADA ARRAY Deklarasi MAX_STACK #define MAX_STACK 5 Deklarasi STACK dengan struct dan array data typedef struct STACK{ int top; int data[5]; }; Deklarasi variabel stack dari struct STACK tumpuk;
Inisialisasi • Pada mulanya isi top dengan -1, karena array dalam C/C++ dimulai dari 0, berarti stack adalah KOSONG • TOP adalah variabel penanda dalam STACK yang menunjukkan elemen teratas Stack. • TOP of STACK akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH void inisialisasi () { tumpuk. top = -1 } 4 MAX_STACK 3 2 1 0 TOP = -1
Fungsi Is. Empty • Digunakan untuk memeriksa apakah stack masih dalam kondisi kosong • Dengan cara memeriksa TOP of STACK. Jika TOP masih = -1 maka berarti stack masih kosong int Is. Empty () { if (tumpuk. top == -1 return 1; else return 0; } 4 MAX_STACK 3 2 1 0 TOP = -1
Fungsi Is. Full • Digunakan untuk memeriksa apakah kondisi stack sudah penuh • Dengan cara memeriksa TOP of Stack. Jika TOP of STACK = MAX_STACK-1 maka FULL (Penuh). Jika TOP of STACK < MAX_STACK-1 maka belum penuh
int Is. Full () { if (tumpuk. top == MAX_STACK-1 return 1; else return 0; } 4 3 2 1 0 E D C B A MAX_STACK TOP = 4
Fungsi PUSH • Digunakan untuk memasukkan elemen ke dalam stack dan selalu menjadi elemen teratas stack • Dengan cara : 1. Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh 2. Isikan nilai baru ke stack berdasarkan indeks TOP of STACK setelah ditambah satu (diincrement)
void push (char d[5]) { tumpuk. top++ strcpy(tumpuk. data[tumpuk. top], d); } 4 4 MAX_STACK 3 3 PUSH ELEMEN A 2 2 1 1 0 0 MAX_STACK TOP = -1 A TOP = TOP + 1 = -1 + 1 = 0
Fungsi POP • Digunakan untuk menghapus elemen yang berada posisi paling atas dari stack. • Dengan cara : 1. Ambil dahulu nilai elemen teratas stack dengan mengakses TOP of STACK. 2. Tampilkan nilai yang akan diambil. 3. Lakukan decrement nilai TOP of STACK sehingga jumlah elemen stack berkurang 1
void pop () { printf(“Data yg di POP = %sn”, tumpuk. data[tumpuk. top]); tumpuk. top--; } 4 MAX_STACK 3 2 1 0 Data yg di POP = C 4 3 C B A TOP = 2 2 1 0 B A TOP = TOP - 1 = 2 - 1 = 1
Fungsi CLEAR • Digunakan untuk mengosongkan stack / membuat stack hampa sehingga Top pada Stack berada kembali di posisi Top = -1 void clear () { tumpuk. data=tumpuk. top=-1 printf(“Data clear”); } 4 3 2 1 0
QUEUE Struktur Data Antrean (Queue) adalah suatu bentuk khusus dari List Linier dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi, yang disebut sisi Belakang / ekor (Tail) dan operasi penghapusan hanya diperbolehkan pada sisi lainnya yang disebut sisi Depan / kepala (Head) dari Linked. List. Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve)
Deklarasi Queue 0 1 2 3 4 5 6 7 Max = 8 head = -1 tail = -1
OPERASI QUEUE • CREATE Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail = -1 • ISEMPTY Untuk memeriksa apakah queue kosong • ISFULL Untuk memeriksa apakah queue sudah penuh • ENQUEUE Untuk menambahkan item pada posisi paling belakang • DEQUEUE Untuk menghapus item dari posisi paling depan • CLEAR Untuk mengosongkan queue
Fungsi Create • Digunakan untuk membentuk dan menunjukan awal terbentuknya suatu Antrean / Queue Void Create() { antrian. head = antrian. tail = -1 } 0 1 2 3 4 5 6 7 Max = 8 head = -1 tail = -1 Antrian pertama kali
Fungsi Is. Empty • Untuk memeriksa apakah Antrian penuh atau kosong • Dengan cara memeriksa nilai Tail, jika Tail = -1 maka antrian kosong (empty) • Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah • Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail
Int Is. Empty() { if (antrian. tail == -1) return 1; else return 0; } 0 1 2 3 4 5 6 7 Max = 8 head = -1 tail = -1 Antrian kosong Karena tail = -1
Fungsi Is. Full • Untuk mengecek apakah Antrian sudah penuh atau belum • Dengan cara : - Mengecek nilai Tail - Jika tail = MAX-1 berarti antrian sudah penuh (MAX-1 adalah batas elemen array dalam program C++)
Int Is. Full() { if (antrian. tail == Max-1) return 1; else return 0; } 5 10 35 20 15 30 40 25 0 1 2 3 4 5 6 7 Max = 8 head = 0 Antrian penuh karena Head = 0 tail = max - 1 tail = 7
Fungsi Enqueue • Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu dilakukan pada elemen paling belakang • Penambahan elemen selalu menggerakan variabel dengan cara menambahkan Tail terlebih dahulu Tail
Fungsi Dequeue • Digunakan untuk menghapus elemen terdepan (head) dari Antrian • Dengan cara : menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1. Penggeseran dilakukan dengan menggunakan looping
Fungsi Clear • Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 • Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca sehingga mengembalikan antrian seperti keadaan semula
Antrian setelah di lakukan Clear 0 1 2 3 4 5 6 7 Max = 8 head = -1 tail = -1 Antrian kosong Karena tail = -1
TREE Pohon atau Tree adalah satu bentuk Graph terhubung yang tidak mengandung sirkuit. Karena merupakan Graph terhubung, maka pada Pohon (Tree) selalu terdapat Path atau Jalur yang menghubungkan setiap simpul dalam dua pohon. Pohon (Tree) dapat juga didefinisikan sebagai kumpulan elemen yang salah satu elemennya disebut dengan Akar (Root) dan sisa elemen lain (Simpul) yang terpecah menjadi sejumlah himpunan yang saling tidak berhubungan yang disebut dengan Subpohon (Subtree) atau cabang
Sifat utama Pohon Berakar 1. Jika Pohon mempunyai Simpul sebanyak n, maka banyaknya ruas atau edge adalah (n-1). 2. Mempunyai Simpul Khusus yang disebut Root, jika Simpul tersebut memiliki derajat keluar >= 0, dan derajat masuk = 0. 3. Mempunyai Simpul yang disebut sebagai Daun / Leaf, jika Simpul tersebut berderajat keluar = 0, dan berderajat masuk = 1. 4. Setiap Simpul mempunyai Tingkatan / Level yang dimulai dari Root yang Levelnya = 1 sampai dengan Level ke - n pada daun paling bawah. Simpul yang mempunyai Level sama disebut Bersaudara atau Brother atau Stribling.
5. Pohon mempunyai Ketinggian atau Kedalaman atau Height, yang merupakan Level tertinggi 6. Pohon mempunyai Weight atau Berat atau Bobot, yang banyaknya daun (leaf) pada Pohon. 7. Banyaknya Simpul Maksimum sampai Level N adalah : 2 (N) - 1 8. Banyaknya Simpul untuk setiap Level I adalah : N 2 ( I – 1) I = 1 Hutan (Forest) adalah kumpulan Pohon yang tidak saling berhubungan
Diketahui suatu bentuk Pohon Berakar T sebagai berikut : Pohon Diatas Mempunyai : a. Simpul sebanyak = 8 dan edge = n - 1 = 8 – 1 = 7 b. Root pada Pohon T diatas adalah Simpul P c. Mempunyai daun (Leaf) = 4, yaitu = R, S, V dan W
d. Level (tingkatan) Pohon = 4 yaitu : Level 1 = Simpul P Level 2 = Simpul Q dan T Level 3 = Simpul R, S dan U Level 4 = Simpul V dan W e. Ketinggian atau kedalaman = jumlah level = 4 f. Weight atau berat atau bobot = jumlah daun = 4 Dalam gambar Pohon T diatas dapat dibentuk 2 buah hutan (forest), bila simpul P dihilangkan, yaitu : Hutan 1 : Q, R, S Hutan 2 : T, U, V, W
g. Banyaknya Simpul Maksimum yang dapat terbentuk sampai Level 4 (bila simpul pada pohon dianggap penuh) adalah : 2 (N) – 1 2 (4) – 1 = 16 – 1 = 15
h. Banyaknya Simpul maksimum untuk setiap Level I (bila simpul pada pohon dianggap penuh) adalah : Maksimum Simpul pada level 2 = 2 ( I – 1) = 2 (2 -1) = 2 Maksimum Simpul pada level 3 = 2 (3 -1) = 4 Maksimum Simpul pada level 4 = 2 (4 -1) = 2
POHON BINAR (BINARY TREE) Struktur ini biasanya digunakan untuk menyajikan data yang mengandung hubungan hirarkial antara elemen-elemennya. Bentuk Pohon Berakar yang lebih mudah dikelola dalam komputer adalah Pohon Biner (Binary Tree) yang lebih dikenal sebagai Pohon Umum (General Tree) yang dapat didefinisikan sebagai kumpulan simpul yang mungkin kosong atau mempunyai akar dan dua Subpohon yang saling terpisah yang disebut dengan Subpohon Kiri / cabang kiri (Left Subtree) dan Subpohon Kanan / cabang kanan (Right Subtree).
Karakteristik Pohon Binar (Binary Tree) : 1. Setiap Simpul paling banyak hanya memiliki dua buah anak 2. Derajat Tertinggi dari setiap Simpul adalah dua. 3. Dibedakan antara Cabang Kiri dan Cabang Kanan. 4. Dimungkinkan tidak mempunyai Simpul Berikut ini diberikan contoh gambar Pohon Binar (Binary Tree) dengan Cabang Kiri dan Cabang Kanan.
ISTILAH PADA POHON BINER • Pohon Biner Penuh (Full Binary Tree) Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki panjang ruas yang sama • Pohon Biner Lengkap (Complete Binary Tree) Hampir sama dengan Pohon Biner Penuh, semua simpul (kecuali daun) memiliki 2 anak tetapi tiap cabang memiliki panjang ruas berbeda A B C D E G F A B D C E
• Pohon Biner Similer Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda A B P C Q R • Pohon Biner Ekivalent Dua pohon yang memiliki struktur dan informasi yang sama P Q P R Q R
• Pohon Biner Miring (Skewed Tree) Dua pohon yang semua simpulnya mempunyai satu anak / turunan kecuali daun
Deklarasi Pohon Biner (Dengan Program C++) Dalam setiap simpul selalu berisi dua buah Pointer untuk menunjuk ke cabang Kiri dan cabang Kanan dan informasi yang akan disimpan dalam simpul tersebut.
Penyajian Pohon Binar (Binary Tree) • Tree dapat dibuat dengan menggunakan linked list secara rekursif. • Linked list yang digunakan adalah double linked list non circular • Data yang pertama kali masuk akan menjadi node root. • Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati node di sebelah kanan node root.
Bila diberikan untai HAKJCBL, maka proses untuk dapat membentuk pohon biner dari untai diatas adalah : 1. Karakter pertama ‘H’ ditempatkan sebagai akar (root) 2. Karakter ‘A’, karena lebih kecil dari ‘H’, maka akan menempati cabang kiri. 3. Karakter ‘K’, karena lebih besar dari ‘H’, maka akan menempati cabang kanan. 4. Karakter ‘J’, lebih besar dari ‘H’ dan kecil dari ‘K’, maka menempati cabang kiri ‘K’.
Dan begitu seterusnya sehingga terbentuk pohon biner seperti berikut :
3. Kunjungan secara Postorder, mempunyai urutan : a. Kunjungi Cabang Kiri b. Kunjungi Cabang Kanan c. Cetak isi simpul yang dikunjungi (Simpul Akar)
Pada ketiga cara kunjungan diatas, kunjungan ke Cabang Kiri dilakukan terlebih dahulu, baru kemudian kunjungan ke Cabang Kanan. Dengan orientasi semacam ini, Ketiga kunjungan diatas disebut dengan Left To Right Oriented (LRO). Jika kunjungan ke Cabang Kanan dilakukan lebih dahulu baru kemudian kunjungan ke Cabang Kiri, maka Orientasi semacam ini disebut Right To Left Oriented (RLO).
A B D E C C E Klik Animasi
Klik Animasi
Kunjungan Pre. Order dalam Program C++
A B D C D B E A C E Klik Animasi
Klik Animasi
Kunjungan In. Order dalam Program C++
3. Kunjungan secara Postorder, mempunyai urutan : a. Kunjungi Cabang Kiri b. Kunjungi Cabang Kanan c. Cetak isi simpul yang dikunjungi (Simpul Akar) A B D C D E B C A E Klik Animasi
Klik Animasi
Kunjungan Post. Order dalam Program C++
Kunjungan Level. Order Selain kunjungan yang dijelaskan diatas, masih ada satu macam kunjungan lagi yaitu kunjungan Level. Order. Kunjungan dimulai dari simpul yang ada pada tingkat 1 (Akar), diteruskan pada simpul di tingkat 2, tingkat 3 dan seterusnya.
Secara singkat kunjungan Level Order ini dapat dijelaskan sebagai berikut. 1. Dimulai dengan memasukkan Akar kedalam antrean. 2. Kemudian mengeluarkan Akar tersebut keluar dari antrean. Pada saat Akar tersebut dikeluarkan dari antrean, cabang kiri dan cabang kanan secara berturut-turut dimasukkan dalam antrean. Dengan kata lain jika suatu elemen dikeluarkan dari antrean, maka cabang kiri dan kanan dari elemen yang baru saja dikeluarkan dimasukkan kedalam antrean.
APLIKASI POHON BINER NOTASI PREFIX, INFIX DAN POSTFIX Pada bagian ini akan dibahas tentang bagaimana menyusun sebuah Pohon Binar yang apabila dikunjungi secara Pre. Order akan menghasilkan Notasi Prefix, kunjungan secara In. Order menghasilkan Notasi Infix, dan kunjungan Post. Order menghasilkan Notasi Postfix.
Berdasarkan Gambar diatas, apabila dilakukan kunjungan secara Pre. Order, maka akan diperoleh Notasi Prefix dari persamaan yang digambarkan tersebut, yaitu : +A*BC (Gambar. a) *+AB-BC (Gambar. b) ^-*+ABC-DE+FG (Gambar. c) Jika dilakukan kunjungan secara In. Order, akan diperoleh Notasi Infixnya, yaitu : (A+(B*C)) (Gambar. a) ((A+B) * (B-C)) (Gambar. b) (((A+B) * C) – (D-E)^(F+G) (Gambar. c)
Jika dilakukan kunjungan secara Post. Order, akan diperoleh Notasi Postfixnya, yaitu : ABC*+ (Gambar. a) AB+BC-* (Gambar. b) AB+C*DE-FG+^ (Gambar. c)
GRAPH Suatu Graph mengandung 2 himpunan, yaitu : 1. Himpunan V yang elemennya disebut simpul (Vertex atau Point atau Node atau Titik) 2. Himpunan E yang merupakan pasangan tak urut dari simpul. Anggotanya disebut Ruas (Edge atau rusuk atau sisi) Graph seperti dimaksud diatas, ditulis sebagai G(E, V).
Contoh : Gambar berikut menanyakan Graph G(E, V) dengan : 1. V mengandung 4 simpul, yaitu simpul A, B, C, D. 2. E mengandung 5 ruas, yaitu : e 1 = (A, B) e 4 = (C, D) e 2 = (B, C) e 5 = (B, D) e 3 = (A, D)
Gambar dibawah ini menyatakan suatu Multigraph. Disini, ruas e 2 pada kedua titik ujungnya adalah simpul yang sama, yaitu simpul A. Ruas semacam ini disebut Gelung atau Self. Loop. Sedangkan ruas e 5 dan e 6 mempunyai titik ujung yang sama, yaitu simpul-simpul B dan C. Kedua ruas ini disebut ruas berganda atau ruas sejajar. e 3 e 2 e 1 e 4 e 5 e 6
Suatu Graph yang tidak mengandung ruas sejajar maupun selfloop, sering disebut juga sebagai Graph sederhana atau simple Graph. Suatu Graph G’(E’, V’) disebut Sub Graph dari G(E, V), bila E’ himpunan bagian dari E dan V’ himpunan bagian dari V. Jika E’ mengandung semua ruas dari E yang titik ujungnya di V’, maka G’ disebut Subgraph yang direntang oleh V’ (Spanning Subgraph).
Contoh Sub Graph:
Contoh Spanning Sub Graph :
GRAPH BERLABEL Graph G disebut berlabel jika ruas dan atau simpulnya dikaitkan dengan suatu besaran tertentu. Khususnya jika setiap Ruas e dari G dikaitkan dengan suatu bilangan non negatif d(e), maka d(e) disebut bobot atau panjang dari ruas e.
Contoh : Gambar berikut ini menyajikan hubungan antar kota. Disini simpul menyatakan kota dan label d(e) menyatakan jarak antara dua kota.
DERAJAT GRAPH Derajat simpul V, ditulis d(v) adalah banyaknya ruas yang menghubungi v. Karena setiap ruas dihitung dua kali ketika menentukan derajat suatu Graph, maka : Jumlah derajat semua simpul suatu Graph (derajat) = dua kali banyaknya ruas Graph (Size) Atau dapat dituliskan : Derajat Graph = 2 x Size
Pada gambar diatas Jumlah Semua Simpul = 4, maka Jumlah Derajat Semua Simpul = 8 Jika Derajat masing-masing simpul pada Graph berjumlah Genap maka Graph tersebut disebut EULER Graph
Contoh : B A C D F E
Pada gambar diatas, banyak ruas/size = 7, sedangkan derajat masing-masing simpul adalah : d(A) = 2 d(B) = 5 d(C) = 3 d(D) = 3 d(E) = 1 d(F) = 0 maka, total jumlah derajat simpul adalah : 14 E disebut simpul bergantung/akhir, yaitu simpul yang berderajat satu. Sedangkan F disebut simpul terpencil, yaitu simpul yang berderajat Nol.
KETERHUBUNGAN Walk atau perjalanan dalam Graph G adalah barisan simpul dan ruas berganti-ganti : V 1, e 1, V 2, e 2, . . . . , e n-1, Vn Disini ruas ei menghubungkan simpul Vi dan Vi+1. Banyaknya ruas disebut Panjang Walk dapat ditulis lebih singkat dengan hanya menulis deretan ruas : e 1, e 2, . . , en-1 atau deretan simpul : V 1, V 2, . . . , Vn-1, Vn dimana : V 1 = simpul awal Vn = simpul akhir. Walk disebut tertutup bila V 1 = Vn
· Barisan ruas a, b, c, d, b, f, g, h adalah Walk bukan Trail (karena ruas b dua kali muncul). · Barisan simpul A, B, E, F bukan Walk (karena tdk ada ruas yang menghubungkan simpul B ke F). · Barisan simpul A, B, C, D, E, C, F adalah Trail bukan Jalur/Path (karena c dua kali muncul) · Barisan ruas a, d, g, k adalah Jalur/Path karena menghubungkan A dengan F · Ruas a, b, h, g, e, a, adalah Cycle. Graph yang tidak mengandung Cycle disebut Acyclic. Contoh dari Graph Acyclic adalah pohon atau Tree.
MATRIKS PENYAJIAN GRAPH Misalnya disajikan Graph G dalam Matriks ruas B ukuran (M x 2), maka setiap baris Matriks menyatakan ruas, misalnya baris (4 7) menyatakan ada ruas menghubungkan simpul 4 dan 7. Matriks Adjacency dari Graph G, yaitu Matriks yang menghubungkan Vertex dengan Vertex, tanpa ruas sejajar adalah Matriks A berukuran (N x N) yang bersifat : 1 , bila ada ruas (Vi, Vj) aij= 0, bila dalam hal lain.
Matriks Adjacency merupakan matriks simetri. Untuk Graph dengan ruas sejajar, Matriks Adjacency didefinisikan sebagai berikut : P, bila ada p buah ruas menghubungkan aij = (Vi, Vj)(p>0) 0, bila dalam hal lain. Matriks Incidence dari Graph G, yaitu Matriks yang menghubungkan Vertex dengan Edge, tanpa self-loop didefinisikan sebagai Matriks M berukuran (NXM) sebagai berikut : 1, bila ada ruas ej berujung di simpul Vi mij = 0, dalam hal lain.
e 1 e 2 e 3 V 1 1 1 0 V 2 1 0 1 V 3 0 1 1 V 4 0 0 0 V 5 0 0 0 e 4 e 5 e 6 e 7 e 8 1 1 0 0 0 0 0 1 1 0 1 0 0 1 0 1
GRAPH TERARAH (DIRECTED GRAPH / DIGRAPH) Graph terarah adalah Graph yang dapat menghubungkan V 1 ke V 2 saja (1 arah). Maksimum jumlah busur dari n simpul adalah : n ( n - 1) Suatu Graph Berarah (Directed Graph) D terdiri atas 2 himpunan : 1) Himpunan V, anggotanya disebut simpul. 2) Himpunan A, merupakan himpunan pasangan terurut, yang disebut ruas berarah atau arkus.
Contoh, Gambar dibawah ini adalah sebuah Graph Berarah D(V, A) dengan : 1. V mengandung 4 simpul, yaitu 1, 2, 3 dan 4 2. A mengandung 7 arkus, yaitu (1, 4) , (2, 1), (4, 2), (2, 3), (4, 3) dan (2) Arkus (2, 2) disebut gelung (self-loop), sedangkan arkus (2, 1) muncul lebih dari satu kali, disebut arkus sejajar atau arkus berganda.
Bila arkus suatu Graph Berarah menyatakan suatu bobot, maka Graph Berarah tersebut dinamakan jaringan / Network. Biasanya digunakan untuk menggambarkan situasi dinamis. Bila V’ himpunan bagian dari V serta A’ himpunan bagian dari A, dengan titik ujung anggota A’ terletak di dalam V’, maka dikatakan bahwa D’(V’, A’) adalah Graph bagian (Subgraph) dari D(V, A). Bila A’ mengandung semua arkus anggota A yang titik ujungnya anggota V’, maka dikatakan bahwa D’(V’, A’) adalah Graph Bagian yang dibentuk atau direntang oleh V’.
CRITICAL PATH 2 1 3 4 5
MINIMUM SPANNING TREE Merupakan Spanning Tree yang mempunyai Bobot dan tidak mempunyai arah dengan hasil penjumlahan bobotnya adalah minimum. Lihat gambar Graph G berikut : V 2 V 1 V 3 V 4 V 5
Langkah yang dilakukan untuk membentuk minimum spanning tree adalah : Bentuk kembali semua simpul tetapi tanpa ruas. Gambar dan telusuri ruas dengan bobot paling kecil, seterusnya (secara ascending) hingga semua simpul terhubung V 2 (6) V 3 (5) V 1 (7) (4) V 4 V 5 Total Minimum Spanning Tree = 22
Karena V 8 sudah dilewati setelah penelusuran ke V 4, maka penelusuran yang berikutnya dianggap tidak dilewati lagi Klik Animasi
2. Breadth First Search (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.
Dari gambar di atas akan diperoleh urutan : V 1 , V 2 ---> V 3 , V 4 ---> V 5 ---> V 6 ---> V 7, V 8 Klik Animasi
- Tipe data koleksi
- Koleksi data yang dinamakan pada medium storan
- Koleksi referensi adalah
- Seni yang menyusun nada atau suara disebut
- Pengertian napkin adalah
- Penyajian fakta adalah
- Manajemen kontrol lingkungan tempat penyimpanan koleksi
- Pantun senang
- Ujian sap
- Koleksi lagu tradisional melayu
- Jenis koleksi referensi
- Puisi moden arkitek kota
- Peribahasa beringat ingat
- O
- Kata ansamber berasal dari bahasa prancis yang berarti... *
- Penyimpangan penyimpangan atau error atau inkonsistensi
- Refential
- Jelaskan prinsip-prinsip penulisan esai
- Suatu kawasan geografis yang seragam atau homogen disebut
- Salah satu dari model perilaku konsumen adalah
- Gaya yang tidak melakukan usaha adalah
- Gagasan ide atau pikiran utama yang mendasari suatu
- Data adalah
- Gaya ada yang ... dan ada pula yang
- Untuk melakukan justify suatu teks atau paragraf
- Suatu dorongan
- Suhu suatu benda 1000 c sama dengan
- Ikhtisar suatu pelajaran atau perkuliahan
- Suatu proses mengubah peluang menjadi gagasan atau ide
- Sesuatu yang ada di dalam suatu benda atau sebagainya
- Buat tabel cash flow selama umur ekonomis
- Ciri gelombang longitudinal
- Suatu rencana yang memuat garis-garis besar
- Struktur seleksi
- Struktur yang digunakan oleh pemerintah daerah adalah
- Percabangan ganda
- Struktur sistem kemas berdasarkan letak atau kedudukan
- Salah satu struktur data adalah
- Struktur fisik adalah
- Kemiringan skewness
- Kegiatan mempropagasikan sinyal melalui media yang sesuai
- Dalam uml, kubus menunjukkan
- Nilai ragam dari data 8,8,7,6,8,12,7,8 adalah....
- Menu untuk mengentri saldo akun buku besar adalah:
- 4 simbol roh kudus
- Berikut ini adalah salah satu jenis peripheral input
- Polinasi adalah
- Aktivitas pertukaran ide atau gagasan disebut
- Inguinocele
- Simbol-simbol yang digunakan operator logika adalah
- Pengertian meat
- Jelaskan pengertian rekayasa desain
- Turunan fungsi
- Teknik percetakan
- Konsep dimensi
- Epididymectomy
- Absennya satu atau kedua testes disebut
- Kerja
- Menurut kadir larik atau array adalah
- Makna warna dalam seni rupa
- Larik atau array adalah
- 3 macam jenis model data berbasis record
- Jaringan
- Intisab dan artinya
- Jelaskan urutan teknik menyundul bola menggunakan awalan
- Bilangan asli kuadrat kurang dari 60
- Sejarah myob
- M y o b
- Yang merupakan root atau induk dari seluruh tag html adalah
- Contoh superfiks
- Yang termasuk benda yang boleh dipotong yaitu?
- Contoh flowchart yang benar
- Stewing menyetup menggulai adalah
- Yang termasuk vedangga atau batang tubuh veda adalah….
- Cara memegang lembing ada
- Tindakan untuk merealisasikan visi sebuah perusahaan adalah
- Stored subprogram adalah
- Jika fungsi permintaan suatu produk adalah p=36-4q
- Kunci pokok suatu protokol adalah
- Materi didefinisikan sebagai ...
- Sabrina meminjam uang dari sebuah bank sebanyak
- Peta konsep tentang ragam hias
- Masa puber adalah suatu periode tumpang tindih antara
- Gambar elemen daniel
- Persamaan gas ideal
- Kriteria suatu kelompok menurut robert k merton adalah
- Bentuk penjumlahan dari suku-suku barisan aritmetika adalah
- Suhu tiga mol suatu gas ideal adalah 373 k
- T suatu transformasi linear yang
- Sebatang baja (angka muai linear 10
- Gambar
- Komponen pendidikan sebagai suatu sistem
- Secara geometris nilai mutlak suatu bilangan adalah
- Tegangan sumber adalah
- Singkatan resep
- Gage adalah
- Bertambahnya ukuran suatu benda disebut
- Operasi dasar suatu cpu adalah
- Proses sintesis protein
- Pengertian tabel
- Alat untuk memindahkan tenaga listrik
- Analisis swot adalah suatu kajian
- Daya tampung dalam populasi adalah
- Inflasi adalah
- Penawaran suatu barang berbentuk
- Fosil
- Atom adalah bagian terkecil dari suatu
- Harga 3 lusin pensil rp45.000 harga 32 pensil adalah
- Cv/cp oksigen
- Tingkatan paling rendah suatu bahasa pemrograman adalah
- Rantai makanan bioster
- Tabel binomial kumulatif
- Contoh paragraf analogi
- Akuntansi adalah suatu proses
- Kunci utama pada suatu field adalah fungsi dari
- Sumber data primer dan sekunder
- Cara menghitung waktu kerja efektif
- Apa itu vertex
- Materi queue struktur data
- Hashing struktur data
- Diketahui float a 5
- Fungsi struktur data
- Queue in data structure example
- Struktur data stack menggunakan
- Struktur data searching
- Materi struktur data teknik informatika
- Diketahui sebuah graph tak terarah memiliki 4 vertex
- Contoh aplikasi array dimensi dua adalah…
- Tipe data pointer
- Contoh studi kasus stack
- Contoh soal rbsl
- Sejarah struktur data
- Struktur data searching
- Pengantar struktur data
- Struktur data
- Tree struktur data
- Struktur data
- Materi struktur data
- Diketahui suatu array segitiga memiliki 4 baris dan kolom
- Contoh struktur tabel basis data
- Sifat sifat struktur data tree
- Magiska 7
- Logostack
- Struktur data
- Struktur data
- Pengertian searching dalam struktur data