STRUKTUR DATA Struktur Data adalah suatu koleksi atau

  • Slides: 146
Download presentation
STRUKTUR DATA Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan

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

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

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

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

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

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

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

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

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]

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

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.

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

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

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)

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

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 /

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 /

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

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

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)

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)

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

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

Gambar (a) Upper Triangular Array (b) Lower Triangular Array

Contoh : Diketahui suatu array segitiga atas memiliki 3 baris dan kolom, tentukan berapakah

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

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

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

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

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;

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

• 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

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

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,

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;

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

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

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

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 !=

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

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

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

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

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; }

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

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

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

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

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 •

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

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

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

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

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.

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.

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

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

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

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

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

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

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;

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

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;

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

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

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 =

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

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

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

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

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.

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

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

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)

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

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

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

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

• 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

• 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

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

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

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 :

Dan begitu seterusnya sehingga terbentuk pohon biner seperti berikut :

3. Kunjungan secara Postorder, mempunyai urutan : a. Kunjungi Cabang Kiri b. Kunjungi Cabang

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

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

A B D E C C E Klik Animasi

Klik Animasi

Klik Animasi

Kunjungan Pre. Order dalam Program C++

Kunjungan Pre. Order dalam Program C++

A B D C D B E A C E Klik Animasi

A B D C D B E A C E Klik Animasi

Klik Animasi

Klik Animasi

Kunjungan In. Order dalam Program C++

Kunjungan In. Order dalam Program C++

3. Kunjungan secara Postorder, mempunyai urutan : a. Kunjungi Cabang Kiri b. Kunjungi Cabang

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

Klik Animasi

Kunjungan Post. Order dalam Program C++

Kunjungan Post. Order dalam Program C++

Kunjungan Level. Order Selain kunjungan yang dijelaskan diatas, masih ada satu macam kunjungan lagi

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

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

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

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.

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

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

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

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

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 Sub Graph:

Contoh Spanning Sub Graph :

Contoh Spanning Sub Graph :

GRAPH BERLABEL Graph G disebut berlabel jika ruas dan atau simpulnya dikaitkan dengan suatu

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

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

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 =

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

Contoh : B A C D F E

Pada gambar diatas, banyak ruas/size = 7, sedangkan derajat masing-masing simpul adalah : d(A)

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 :

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

· 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

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

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

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

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

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

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

CRITICAL PATH 2 1 3 4 5

MINIMUM SPANNING TREE Merupakan Spanning Tree yang mempunyai Bobot dan tidak mempunyai arah dengan

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

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

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

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

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