Скачать презентацию STRUKTUR DATA Fetty Tri Anggraeny Скачать презентацию STRUKTUR DATA Fetty Tri Anggraeny

7d4dd7b2ee7692d9c78d1ea3397daae2.ppt

  • Количество слайдов: 149

STRUKTUR DATA : : Fetty Tri Anggraeny : : STRUKTUR DATA : : Fetty Tri Anggraeny : :

Tentang Saya n n n Fetty Tri Anggraeny, S. Kom HP : (031)83031803 Email Tentang Saya n n n Fetty Tri Anggraeny, S. Kom HP : (031)83031803 Email : fetty@upnjatim. ac. id atau fetty_ta@yahoo. com n MK : ¨ ¨ ¨ Bahasa Pemrograman, Struktur Data, Sistem Digital, Grafika Komputer Pengolahan Citra Digital Sistem Pakar atau Sistem Berbasis Pengetahuan

KONTRAK KULIAH n n n Toleransi keterlambatan 30 menit terhitung mulai pukul 10. 00, KONTRAK KULIAH n n n Toleransi keterlambatan 30 menit terhitung mulai pukul 10. 00, berlaku bagi dosen dan mahasiswa Pakaian SOPAN, berkerah, bebas rapi dan bersepatu. NILAI : ¨ Tugas dan quiz ¨ Final Project (Tim) ¨ UTS ¨ UAS : 20 % : 30 % POIN PLUS : keaftifan dalam kelas maupun tugas

MATERI KULIAH Fungsi Rekursi n Review : Array, Struct, Pointer n Sorting n Searching MATERI KULIAH Fungsi Rekursi n Review : Array, Struct, Pointer n Sorting n Searching n Linked List n Stack n Queue n Graph dan Tree n

Satuan Acara Perkuliahan 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Satuan Acara Perkuliahan 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Pengantar + Fungsi Rekursi 1 Fungsi Rekursi 2 Review Array dan Struct Sorting 1 : Bubble dan Insertion Sorting 2 : Selection Searching Review Pointer UTS Linked List 1 : Single Linked List 2 : Linked List Lanjut Stack 1 – Operasi Dasar Stack 2 – Contoh Penggunaan Queue Graph Tree UAS

Buku Referensi Data Structures Using C and C++ 2 nd edition, Yedidyah Langsam, dkk Buku Referensi Data Structures Using C and C++ 2 nd edition, Yedidyah Langsam, dkk n Text book lain n Internet www. google. com n

What is programming? n n PROGRAM = ALGORITMA + STRUKTUR DATA ALGORITMA : ¨ What is programming? n n PROGRAM = ALGORITMA + STRUKTUR DATA ALGORITMA : ¨ SEQUENTIAL ¨ BRANCHING ¨ LOOPING/ REKURSI n STRUKTUR DATA : ¨ ARRAY ¨ STRUCT ¨ POINTER ¨ ADT : LINKED TREE, DLL LIST, STACK, QUEUE, GRAPH,

MINGGU PERTAMA MINGGU PERTAMA

Fungsi Rekursif Definisi fungsi rekursif. n Contoh 1 : Faktorial n Contoh 2 : Fungsi Rekursif Definisi fungsi rekursif. n Contoh 1 : Faktorial n Contoh 2 : Perkalian n Contoh 3 : Fibonacci n Contoh 4 : Tower of Hanoi n

Fungsi Rekursif n A Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil Fungsi Rekursif n A Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri. B C D A A

Fungsi Rekursif Setara dengan proses looping/ iterasi faktorial, perkalian n Kadang rekursif lebih baik Fungsi Rekursif Setara dengan proses looping/ iterasi faktorial, perkalian n Kadang rekursif lebih baik dari iterasi tower of hanoi n Terkadang sebaliknya fibonacci n Komponen : n ¨ Way out if – else + return() ¨ Recursive call dengan value baru

Simple Example #include<stdio. h> int main(void) { printf( Simple Example #include int main(void) { printf("Never endsn"); main(); return 0; }

Faktorial ALGORITMA SOURCE CODE n! = 1 if n == 0 n! = n Faktorial ALGORITMA SOURCE CODE n! = 1 if n == 0 n! = n * ( n – 1 )! if n > 0 4! = 4 x 3! 3! = 3 x 2! 2! = 2 x 1! 1! = 1 x 0! 0! = 1 int factorial ( int n ) { int x, y; if ( n == 0 ) return ( 1 ); x = n – 1; y = factorial ( x ); return ( n * y ); }

Latihan tracing rekursi Latihan tracing rekursi

Perkalian ALGORITMA SOURCE CODE a * b = a if b == 1 a Perkalian ALGORITMA SOURCE CODE a * b = a if b == 1 a * b = a * ( b – 1 ) + a if b > 1 6 x 3=(6 x 2)+6 =(6 x 1)+6+6 =6+6+6 = 18 int mult ( int a, int b ) { int c, d, sum; if ( b == 1 ) return ( a ); c = b – 1; d = mult ( a, c ); sum = d + a; return ( sum ); }

Latihan tracing rekursi Latihan tracing rekursi

Minggu Kedua Minggu Kedua

Fibonacci The Fibonacci series fn≥ 0 is a famous series defined by: f 0 Fibonacci The Fibonacci series fn≥ 0 is a famous series defined by: f 0 : ≡ 0, f 1 : ≡ 1, fn≥ 2 : ≡ fn− 1 + fn− 2 n f 2 = f 0 + f 1 = 0 + 1 = 1 n f 3 = f 1 + f 2 = 1 + 1 = 2 n f 4 = f 2 + f 3 = 1 + 2 = 3 n f 5 = f 3 + f 4 = 2 + 3 = 5 n n …. Leonardo Fibonacci 1170 -1250

Fibonacci ALGORITMA fibo( n ) = n if n == 0 or n == Fibonacci ALGORITMA fibo( n ) = n if n == 0 or n == 1 fibo( n ) = fibo(n – 2) + fibo( n – 1 ) if n >= 2 fibo( 4 ) = fibo( 3 ) + fibo( 2 ) = fibo( 2 ) + fibo ( 1 ) + fibo( 2 ) = fibo(1) + fibo(0) + fibo(1) + fibo(2) = 1 + 0 + fibo(1) + fibo(2) = 1 + 1 + fibo(2) = 2 + fibo(1) + fibo(0) = 2 + 1 + fibo(0) =2+1+0 =2+1 =3 SOURCE CODE int fibo ( int n ) { int x, y; if ( n <= 1 ) return ( n ); x = fibo ( n – 1); y = fibo ( n – 2); return ( x + y ); }

Tracing Fibonacci n F(4) fibo (4) = ? 2+1=3 1+0=1 1+1=2 F(2) F(3) 1+0=1 Tracing Fibonacci n F(4) fibo (4) = ? 2+1=3 1+0=1 1+1=2 F(2) F(3) 1+0=1 1 F(1) F(2) 1 F(1) F(0) 0 1 0 F(1) F(0)

Towers of Hanoi ALGORITMA 1. If n == 1, move the single disk from Towers of Hanoi ALGORITMA 1. If n == 1, move the single disk from A to C and stop. 2. Move the top n – 1 disks from A to B, using C as auxiliary. 3. Move the remaining disk from A to C. 4. Move the n – 1 disks from B to C, using A as auxiliary. SOURCE CODE void towers( int n, char from, char to, char aux) { if ( n == 1 ) { printf(“nmove disk 1 from %c to %c”, from, to); return; } towers( n – 1, from, aux, to ); printf(“nmove disk %d from %c to %c”, n, from, to); towers( n – 1, aux, to, from ); }

Tracing Towers of Hanoi n towers(3, A, C, B) = ? Tracing Towers of Hanoi n towers(3, A, C, B) = ?

Tugas Rumah : TRACING towers(4, A, C, B) = ? n fibo(6) = ? Tugas Rumah : TRACING towers(4, A, C, B) = ? n fibo(6) = ? n factorial(5)=? n mult(3, 5)=? n

Minggu Ketiga Minggu Ketiga

Array dan Struct n Review struktur data dasar ¨ Array ¨ Struct n Contoh Array dan Struct n Review struktur data dasar ¨ Array ¨ Struct n Contoh analisa program

ARRAY Tipe data turunan. n Contoh deklarasi : int x[20]; n SATU variabel untuk ARRAY Tipe data turunan. n Contoh deklarasi : int x[20]; n SATU variabel untuk menyimpan BANYAK data dengan TIPE data yang SAMA. Mempunyai INDEKS. 3 4 2 1 7 n Struktur data : n Alokasi memori bersifat statis/ tetap. n Konsep : string, array multidimensi n

Contoh program Program menghitung rata-rata nilai. n Algoritma : n Deklarasikan variabel array untuk Contoh program Program menghitung rata-rata nilai. n Algoritma : n Deklarasikan variabel array untuk menyimpan data-data nilai. ¨ Input data nilai dengan perintah looping. Akses elemen dengan operator kurung siku ([]). ¨ Hitung penjumlahan data-data nilai. ¨ Hitung rata-rata = jumlah total/ jumlah data.

STRUCT Tipe data turunan. n Contoh deklarasi : struct { int jari_jari; float luas; STRUCT Tipe data turunan. n Contoh deklarasi : struct { int jari_jari; float luas; float keliling; } lingkaran; n

STRUCT Contd. SATU variabel bisa menyimpan BANYAK data yang BERBEDA TIPE datanya. Mempunyai ELEMEN. STRUCT Contd. SATU variabel bisa menyimpan BANYAK data yang BERBEDA TIPE datanya. Mempunyai ELEMEN. 10 n Struktur data : n 314. 0 62. 8 n Konsep : struct of struct (nested struct).

Contoh program Program tentang lingkaran. n Algoritma : n ¨ Inventarisasi atribut-atribut yang dimiliki Contoh program Program tentang lingkaran. n Algoritma : n ¨ Inventarisasi atribut-atribut yang dimiliki oleh sebuah objek lingkaran. ¨ Akses masing-masing elemen dengan memakai operator tanda titik (. ).

ARRAY OF STRUCT Struktur data berupa array yang setiap elemennya bertipe struct. n Contoh ARRAY OF STRUCT Struktur data berupa array yang setiap elemennya bertipe struct. n Contoh deklarasi : struct { int NPM; char nama[30]; float IPK; } mhs[100]; n

Array of Struct Contd. n Struktur data : 100 102 103 Abdullah Budi Candra Array of Struct Contd. n Struktur data : 100 102 103 Abdullah Budi Candra Daud 3. 80 n 101 3. 45 3. 22 3. 17 Untuk akses elemen dimulai dari indeks array kemudian diikuti nama elemennya mhs[3]. NPM = 1234;

Contoh Program data mahasiswa. n Program tabel fungsi kuadrat. n Contoh Program data mahasiswa. n Program tabel fungsi kuadrat. n

Minggu Keempat Minggu Keempat

Sorting Tujuan : memahami proses tracing algoritma pengurutan. n Beberapa jenis algoritma sorting : Sorting Tujuan : memahami proses tracing algoritma pengurutan. n Beberapa jenis algoritma sorting : n ¨ Bubble sort ¨ Selection sort ¨ Insertion sort

Bubble Sort void bubble ( int X [ ], int n ) { int Bubble Sort void bubble ( int X [ ], int n ) { int hold, j, pass; for ( pass = 0; pass < n-1; pass++) for ( j = 0; j < n-pass-1; j++) if ( X[j] > X[j+1] ) { hold = X[j]; X[j] = X[j+1]; X[j+1] = hold; } }

Insertion Sort void insertion ( int X [ ], int n ) { int Insertion Sort void insertion ( int X [ ], int n ) { int i, k, y; for ( k = 1; k < n; k++) { y = X[k]; for ( i = k-1; i >= 0 && y < X[i]; i--) X[i+1] = X[i]; X[i+1] = y; } }

Minggu Kelima Minggu Kelima

Kuis kecil void urutkan ( int X [ ], int n ) { int Kuis kecil void urutkan ( int X [ ], int n ) { int temp, i, j; i=0; while(i

Selection Sort void selection ( int X [ ], int n ) { int Selection Sort void selection ( int X [ ], int n ) { int i, j, index, large; for ( i = n-1; i > 0; i--) { large = x[0]; index = 0; for ( j = 1; j <= i; j++) if ( X[j] > large ) { large = X[j]; index = j; } X[index] = X[i]; X[i] = large; }

Tugas : n Algoritma dan contoh sortingnya : ¨ Quick Sort ¨ Merge Sort Tugas : n Algoritma dan contoh sortingnya : ¨ Quick Sort ¨ Merge Sort ¨ Shell Sort

Minggu Keenam Minggu Keenam

Searching Tujuan : memahami algoritma pencarian. n Jenis algoritma searching : n ¨ Sequential Searching Tujuan : memahami algoritma pencarian. n Jenis algoritma searching : n ¨ Sequential search ¨ Indexed sequential search ¨ Binary search

Sequential Search int Sequential. Search(int key, int data[], int n) { int i; for Sequential Search int Sequential. Search(int key, int data[], int n) { int i; for (i = 0; i < n; i++) if (key == data[i]) return (i); return (-1); }

Indexed Sequential Search int Index. Sequential( int key, int k[], int n, int kindex[], Indexed Sequential Search int Index. Sequential( int key, int k[], int n, int kindex[], int pindex[], int indxsize ) { int i, j, lowlim, hilim; for ( i = 0; i < indxsize && kindex[ i ] <= key; i++ ); if ( i == 0 ) lowlim = 0; //set lowlim else lowlim = pindex[i-1]; if ( i == indxsize ) hilim = n – 1; //set hilim else hilim = pindex[i] – 1; for ( j = lowlim; j <= hilim && k[ j ] != key; j++ ); if ( j > hilim ) return (-1); else return ( j );

Latihan tracing Latihan tracing

Binary Search int Binary. Search(int key, int data[], int n) { int low, high, Binary Search int Binary. Search(int key, int data[], int n) { int low, high, middle low = 0; high = n – 1; while (low <= high) { middle = (low + high)/2; if (key == data[middle] return(middle); if (key < data[middle] high = middle – 1; else low = middle + 1; } return(-1); }

Latihan tracing Latihan tracing

Minggu Ketujuh Minggu Ketujuh

POINTER Adalah TIPE DATA TURUNAN n Contoh deklarasi : int *pointer. X; n Variabel POINTER Adalah TIPE DATA TURUNAN n Contoh deklarasi : int *pointer. X; n Variabel bertipe pointer digunakan untuk menyimpan ALAMAT sebuah data, BUKAN NILAI datanya. n Operator yang sering dipakai: n ¨& mendapatkan alamat memori ¨* mengakses nilai dari sebuah pointer

#include “stdio. h” void main() { int data, *pointer_data; data = 100; pointer_data = #include “stdio. h” void main() { int data, *pointer_data; data = 100; pointer_data = &data; printf(“Data = %d di alamat %pn”, data, pointer_data); }

POINTER KE ARRAY #include “stdio. h” void main() { int data[5] = {2, 4, POINTER KE ARRAY #include “stdio. h” void main() { int data[5] = {2, 4, 3, 1, 5}; int *pdata; pdata = &data[0]; for(int i=0; i<5; i++) printf(“%dt”, *(pdata + i)); }

POINTER KE STRUCT #include “stdio. h” void main() { struct { int jari_jari; float POINTER KE STRUCT #include “stdio. h” void main() { struct { int jari_jari; float luas; }lingkaran, *pdata; pdata = &lingkaran; pdata->jari_jari = 10; pdata->luas = 314; printf(“Jari jari = %dt. Luas = %fn”, pdata->jari_jari, pdata->luas); }

Minggu Kedelapan Ujian Tengah Semester Minggu Kedelapan Ujian Tengah Semester

Minggu Kesembilan Minggu Kesembilan

(Single) Linked List Definisi linked list n Operasi dasar n Contoh program n (Single) Linked List Definisi linked list n Operasi dasar n Contoh program n

Ilustrasi Singly Linked List Data 1 Data 2 Next node Data 4 NO NEXT Ilustrasi Singly Linked List Data 1 Data 2 Next node Data 4 NO NEXT Data 3 Next node

n n n In this linked list example, each node has two pieces of n n n In this linked list example, each node has two pieces of data. Each node also has a pointer to the next node. So, we need two things to form a linked list: a way to combine various datatypes and variables together into one datatype and a way to “point” to the next one of these combination datatypes. So…how can we accomplish this?

n n n The first goal, combining various datatypes and variables into one datatype, n n n The first goal, combining various datatypes and variables into one datatype, is easily handled with a structure. The second goal, being able to “point” to the next structure is easily handled using pointers. So, we have all of the components we need in order to construct a linked list.

Linked List n n n Struktur data yang terdiri dari beberapa simpul (node) dimana Linked List n n n Struktur data yang terdiri dari beberapa simpul (node) dimana setiap simpulnya saling terhubung (linked). Simpul berupa struct, sedangkan link berupa komponen simpul yang bertipe pointer ke simpul. Bersifat dinamis. Memakai perintah malloc() dan free(). Umumnya memiliki pointer head untuk menunjukkan alamat simpul terdepan dan pointer tail untuk menunjukkan simpul terakhir. Operasi penambahan/ penghapusan sebuah simpul akan meng-update nilai pointer link-nya. Pointer link simpul terakhir diberi nilai NULL (kecuali untuk circular linked list).

Linked List Sederhana n Deklarasi struktur data : typedef struct simpul { char nama[20]; Linked List Sederhana n Deklarasi struktur data : typedef struct simpul { char nama[20]; float nilai; struct simpul *next_simpul; } simpulku;

void main() simpulku *simpul 1, *simpul 2, *simpul 3; //alokasi memori simpul 1 = void main() simpulku *simpul 1, *simpul 2, *simpul 3; //alokasi memori simpul 1 = (simpulku *)malloc(sizeof(simpulku)); simpul 2 = (simpulku *)malloc(sizeof(simpulku)); simpul 3 = (simpulku *)malloc(sizeof(simpulku)); //isi data strcpy(simpul 1 ->nama, “Amin”); strcpy(simpul 2 ->nama, “Budi”); strcpy(simpul 3 ->nama, “Citra”); simpul 1 ->nilai=90; simpul 2 ->nilai=20; simpul 3 ->nilai=100; //sambungkan link-nya simpul 1 ->next_simpul = simpul 2; simpul 2 ->next_simpul = simpul 3; simpul 3 ->next_simpul = NULL;

Alamat = 1080 Alamat = 2370 Amin Budi Citra 90 20 1080 2370 NULL Alamat = 1080 Alamat = 2370 Amin Budi Citra 90 20 1080 2370 NULL Alamat = 1000 simpul 1 1000 simpul 2 1080 simpul 3 2370

Alamat = 1080 Alamat = 2370 Amin Budi Citra 90 20 1080 2370 NULL Alamat = 1080 Alamat = 2370 Amin Budi Citra 90 20 1080 2370 NULL Alamat = 1000 Pointer Tail simpul 1 1000 Pointer Head

Ilustrasi Inserting a Node T update Alamat = 1080 Alamat = 2370 Amin Budi Ilustrasi Inserting a Node T update Alamat = 1080 Alamat = 2370 Amin Budi Citra 90 20 1080 8460 NULL Alamat = 1000 Alamat = 8460 simpul 1 1000 New->next = T->next = New Dewi 98 2370

Ilustrasi Deleting a Node P T update Alamat = 1080 Alamat = 2370 Amin Ilustrasi Deleting a Node P T update Alamat = 1080 Alamat = 2370 Amin Budi Citra 90 20 100 2370 NULL Alamat = 1000 free() simpul 1 1000 P->next = T->next free(T)

Contoh Program Linked List #include Contoh Program Linked List #include "stdio. h" #include "stdlib. h" #include "conio. h" struct node{ int info; struct node *next; }; typedef struct node *simpul;

void main() { simpul baru, head=NULL, tail=NULL, temp; int pilih; do { printf( void main() { simpul baru, head=NULL, tail=NULL, temp; int pilih; do { printf("MENUn"); printf("1. Insertn"); printf("2. Viewn"); printf("3. Searchn"); printf("4. Deleten"); printf("PILIH: "); scanf("%d", &pilih); switch(pilih) { ……… } }while (pilih!=5); }

Insert Node case 1: int data; printf( Insert Node case 1: int data; printf("Data Masuk: "); scanf("%i", &data); baru = (simpul) malloc(sizeof (struct node)); baru->info = data; baru->next = NULL; if (head == NULL) //list masih kosong { //simpul yg pertama kali head = baru; tail = baru; } else { tail->next = baru; tail = baru; } break;

info); temp" src="https://present5.com/presentation/7d4dd7b2ee7692d9c78d1ea3397daae2/image-71.jpg" alt="Show All Node case 2: temp = head; while(temp!=NULL) { printf("%i ", temp->info); temp" /> Show All Node case 2: temp = head; while(temp!=NULL) { printf("%i ", temp->info); temp = temp->next; } printf("n"); break;

Search a Node case 3: int cari; printf(info!=cari)) { temp = temp->next; } if(temp != NULL && temp->info == cari) printf("Data Ditemukan"); else //if(temp == NULL) printf("Data Tidak Ditemukan"); printf("n"); break;

Delete a Node case 4: int hapus; char jwb; simpul prev = NULL; printf( Delete a Node case 4: int hapus; char jwb; simpul prev = NULL; printf("Hapus Angka: "); scanf("%i", &hapus); //temukan dulu node yang akan dihapus temp = head; while((temp!=NULL)&&(temp->info!=hapus)) { prev = temp; temp = temp->next; } //bersambung…

if(temp != NULL && temp->info == hapus) //ditemukan { printf( if(temp != NULL && temp->info == hapus) //ditemukan { printf("Yakin Dihapus? (y/t)"); flushall(); jwb=getch(); if(jwb == 'y') { if(temp->next != NULL && temp != head) prev->next = temp->next; else if (temp->next == NULL) prev->next = NULL; else if (temp == head && head->next == NULL) head = NULL; else if (temp == head && head->next != NULL) head = head->next; free(temp); //hapus node-nya } else printf("Batal Dihapus"); } else printf("Data Tidak Ditemukan"); printf("n"); break;

Capture Program Capture Program

Minggu Kesepuluh Minggu Kesepuluh

Macam-macam List Singly linked list n Doubly linked list n Singly circular linked list Macam-macam List Singly linked list n Doubly linked list n Singly circular linked list n Doubly circular linked list n

Singly and Doubly n A linked list node containing a single forward pointer may Singly and Doubly n A linked list node containing a single forward pointer may be declared as follows struct Node { int struct Node }; data; /* or whatever */ *next_in_line; pointer to next Node structure § A linked list node containing a forward and a backward pointer may be declared as follows struct Node { int struct Node }; data; *next_in_line; *previous_in_line; pointer to next Node structure pointer to previous Node structure

Circular Linked List Circular Linked List

Minggu Kesebelas Minggu Kesebelas

Stack Definisi Stack n Operasi-operasi dasar Stack n ¨ Push ¨ Pop n Contoh Stack Definisi Stack n Operasi-operasi dasar Stack n ¨ Push ¨ Pop n Contoh program operasi dasar Stack menggunakan array

STACK (TUMPUKAN) n n Kumpulan items yang teratur dimana items baru akan dimasukkan ke STACK (TUMPUKAN) n n Kumpulan items yang teratur dimana items baru akan dimasukkan ke dan sebuah items akan dikeluarkan dari satu ujung yang sama, yaitu dari TOP sebuah stack. Struktur data linier dimana hanya bagian TOPnya saja yang bisa diakses. Bersifat LIFO = Last In First Out. Bisa diimplementasikan menggunakan array atau Linked List.

Last In First Out Last In First Out

Penggunan Stack History pada web browser. n Undo Log pada text editor. n Pemrosesan Penggunan Stack History pada web browser. n Undo Log pada text editor. n Pemrosesan struktur bersarang (nested) : loop, rekursi, fungsi, dll. n Algoritma back tracking – Artificial Intelegence n

Operasi Dasar Stack Push : memasukkan sebuah item baru ke dalam stack. n Pop Operasi Dasar Stack Push : memasukkan sebuah item baru ke dalam stack. n Pop : mengeluarkan sebuah item dari stack. n Operasi lain : Is_Empty, Is_Full n Note : pop dan push dilakukan melalui ujung yang sama (TOP)

Visualisasi Operasi Stack TOP E X A remove: “POP” insert ‘B’: PUSH ‘B’ X Visualisasi Operasi Stack TOP E X A remove: “POP” insert ‘B’: PUSH ‘B’ X A B X A TOP Y O W W R R R T T P P P K K K D D D D D a b c d e f g h i j

Deklarasi Struktur Data Stack #define maxsize 100 // mendefinisikan maks ukuran data // dlm Deklarasi Struktur Data Stack #define maxsize 100 // mendefinisikan maks ukuran data // dlm stack typedef struct { int top; // indeks TOP char items [ maxsize ] // array } stack; // nama tipe data baru yg dibuat // adalah stack

Deklarasi Fungsi-Fungsi Stack void n initialize ( stack *s) pop ( stack *s, char Deklarasi Fungsi-Fungsi Stack void n initialize ( stack *s) pop ( stack *s, char *x ) push ( stack *s, char x ) show ( stack *s )

Fungsi Initialize void initialize ( stack *s) // operasi initialize dg parameter // s Fungsi Initialize void initialize ( stack *s) // operasi initialize dg parameter // s bertipe pointer stack { s -> top = -1; // top = -1 stack dlm kondisi empty }

Fungsi Push void push ( stack *s, char x ) { if (s->top >= Fungsi Push void push ( stack *s, char x ) { if (s->top >= (maxsize-1)) //stack is full printf("n. ERROR: the stack is full!"); else { s->top = s->top + 1; s->items [ s->top ] = x; printf("n. PUSH SUCCEED"); } }

Fungsi Pop void pop ( stack *s, char *x ) { if (s->top < Fungsi Pop void pop ( stack *s, char *x ) { if (s->top < 0) // stack is empty printf("n. ERROR: the stack is empty!"); else { *x = (s->items [ s->top ]); s->top = s->top - 1; printf("n. POP SUCCEED"); } }

Fungsi Show void show( stack *s ) { printf( Fungsi Show void show( stack *s ) { printf("n. ISI STACK : n"); for(int i=s->top; i>=0; i--) printf("t%cn", s->items[i]); printf("n"); }

Fungsi Main void main() { stack *my_stack, s; char item, *x; my_stack = &s; Fungsi Main void main() { stack *my_stack, s; char item, *x; my_stack = &s; x = &item; initialize(my_stack); push(my_stack, 'A'); push(my_stack, 'R'); push(my_stack, 'I'); push(my_stack, 'F'); show(my_stack); pop(my_stack, x); show(my_stack); }

Output Program Output Program

Stack – Linked List Jika sebuah linked list SELALU menambahkan node baru dan menghapus Stack – Linked List Jika sebuah linked list SELALU menambahkan node baru dan menghapus node lama dari salah SATU ujungnya saja (posisi Head ataukah Tail) STACK. n TOP = head untuk single linked list. n TOP = tail untuk double linked list. n HOW? n

Push Operation Push Operation

Pop Operation Pop Operation

Minggu Keduabelas Minggu Keduabelas

Pengecekan Tanda Kurung valid = true s = the_empty_stack while ( we_have_not_read_the_entire_string ) { Pengecekan Tanda Kurung valid = true s = the_empty_stack while ( we_have_not_read_the_entire_string ) { read the next symbol (symb) of the string if ( symb == ‘(‘ || symb == ‘[‘ || symb == ‘{‘ ) push ( s, symb ) if ( symb == ‘)‘ || symb == ‘]‘ || symb == ‘}‘ ){ if ( empty ( s ) ) valid = false else { k = pop ( s ); if ( k is_not_the_matching_opener_of_symb ) valid = false } // end else } } // end while if ( ! empty ( s ) ) valid = false if ( valid ) output ( “the string is valid” ) else output ( “the string is not valid” );

Example Case 1. 2. 3. Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n])) Example Case 1. 2. 3. Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n])) {x+(y-[a+b])*c-[(d+e)]}

Evaluasi Postfix adalah bentuk persamaan matematika dimana operator ditulis setelah kedua operannya. n Contoh Evaluasi Postfix adalah bentuk persamaan matematika dimana operator ditulis setelah kedua operannya. n Contoh : n ¨ AB+ ¨ CDE*¨ FG/H+ n Latihan : Ubah ke postfix ¨ ((A+B)*C – (D – E))^(F+G)

Algoritma Infix Postfix Tambahkan tanda kurung untuk mengelompokkan operasi. n Keluarkan operator ke sebelah Algoritma Infix Postfix Tambahkan tanda kurung untuk mengelompokkan operasi. n Keluarkan operator ke sebelah kanan tanda kurung untuk setiap kelompok satu per satu. n Hilangkan semua tanda kurung. n

Algoritma Evaluasi Postfix opndstck = the_empty_stack /* scan the input string, one by one Algoritma Evaluasi Postfix opndstck = the_empty_stack /* scan the input string, one by one element, into symb while ( not_end_of_input_string ) { symb = next_input_character if ( symb_is_an_operand ) push ( opndstck, symb ) else /* symb is an operator */ { opnd 2 = pop ( opndstck ) opnd 1 = pop ( opndstck ) value = opnd 1 (symb) opnd 2 push ( opndstck, value ) } /* end else */ } /* end while */ return ( pop ( opndstck ) )

Latihan : Jika A = 1, B = 2, C = 3, hitunglah : Latihan : Jika A = 1, B = 2, C = 3, hitunglah : 1. AB+C– 2. ABC+– 3. AB*CD+^

Aplikasi 1 : Pengecekan Tanda Kurung Aplikasi 1 : Pengecekan Tanda Kurung

Algoritma valid = true s = the_empty_stack while ( we_have_not_read_the_entire_string ) { read the Algoritma valid = true s = the_empty_stack while ( we_have_not_read_the_entire_string ) { read the next symbol (symb) of the string if ( symb == ‘(‘ || symb == ‘[‘ || symb == ‘{‘ ) push ( s, symb ) if ( symb == ‘)‘ || symb == ‘]‘ || symb == ‘}‘ ) if ( empty ( s ) ) valid = false else { k = pop ( s ) if ( k is_not_the_matching_opener_of_symb ) valid = false } // end else } // end while if ( ! empty ( s ) ) valid = false if ( valid ) output ( “the string is valid” ) else output ( “the string is not valid” )

Contoh 1. 2. 3. Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n])) {x+(y-[a+b])*c-[(d+e)]} Contoh 1. 2. 3. Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n])) {x+(y-[a+b])*c-[(d+e)]}

Aplikasi 2 : Konversi Infix ke Postfix Aplikasi 2 : Konversi Infix ke Postfix

Ekspresi Aritmatika Ekspresi aritmatika umumnya ditulis dalam bentuk infix. n Contoh : n A+B Ekspresi Aritmatika Ekspresi aritmatika umumnya ditulis dalam bentuk infix. n Contoh : n A+B A-C+B A+((B*C)/D) n Komputer lebih mudah mengevaluasi ekspresi postfix, karena tidak perlu mengelompokkan subekspresi kedalam tanda kurung.

Infix, Postfix, dan Prefix Infix Postfix Prefix A*B A*(B+C) AB* ABC+* *AB *A+BC (A*B)+C Infix, Postfix, dan Prefix Infix Postfix Prefix A*B A*(B+C) AB* ABC+* *AB *A+BC (A*B)+C AB*C+ +*ABC A+((B*C)/D) ABC*D/+ +A/*BCD (A^2+B^2)*(C-D) A 2^B 2^+CD-* *+^A 2^B 2 -CD

Algoritma String infix, postfix s = stack kosong while (seluruh infix belum dibaca) { Algoritma String infix, postfix s = stack kosong while (seluruh infix belum dibaca) { baca simbol selanjutnya pada infix (symb) if symb adalah operand tambahkan pada postfix else if symb adalah ‘(‘, ‘{‘, ‘[‘ PUSH symb else if symb adalah ‘)‘, ‘}‘, ‘]‘ while(Top. Op stack adalah operator) POP stack dan tambahkan ke postfix POP stack else if symb adalah operator{ if stack kosong PUSH symb ke stack else{ Top. Op =baca data di TOP stack if(symb>Top. Op) PUSH symb ke stack else if Top. Op adalah ‘(‘, ‘{‘, ‘[‘ PUSH symb ke stack else { POP stack dan tambahkan pada postfix PUSH symb ke stack } } if stack tidak kosong POP stack dan tambahkan ke postfix

Aplikasi 3 : EVALUASI POSTFIX Aplikasi 3 : EVALUASI POSTFIX

Algoritma s = stack kosong while(seluruh string belum dibaca) { baca simbol selanjutnya (symb) Algoritma s = stack kosong while(seluruh string belum dibaca) { baca simbol selanjutnya (symb) if symb adalah angka PUSH symb if symb adalah operator Op. Kanan = POP stack Op. Kiri = POP stack hitung hasil PUSH hasil } POP stack untuk memperoleh hasil akhir

Minggu Ketigabelas Minggu Ketigabelas

Queue Definisi Queue n Operasi-operasi dasar Queue n ¨ Insert/ enqueue ¨ Remove/ dequeue Queue Definisi Queue n Operasi-operasi dasar Queue n ¨ Insert/ enqueue ¨ Remove/ dequeue n Contoh program operasi dasar Queue menggunakan array

Queue Sequence of items. n Items dimasukkan dari ujung belakang, dikeluarkan dari ujung depan. Queue Sequence of items. n Items dimasukkan dari ujung belakang, dikeluarkan dari ujung depan. n Bersifat FIFO (First In First Out). n

Jenis Queue Normal queue. n Circular queue. n DE-queue (double ended). Ex. High and Jenis Queue Normal queue. n Circular queue. n DE-queue (double ended). Ex. High and low priority policy n Priority queue. n

Penggunaan Queue Waiting list – birokrasi. n Simulasi sistem antrian. n Antrian printer jobs. Penggunaan Queue Waiting list – birokrasi. n Simulasi sistem antrian. n Antrian printer jobs. n Antrian proses multitasking dalam CPU. n Antrian playlist winamp. n

Operasi Dasar n n n Enqueue Memasukkan item ke dalam queue. Dequeue Mengeluarkan item Operasi Dasar n n n Enqueue Memasukkan item ke dalam queue. Dequeue Mengeluarkan item dari queue. Is_Full Mengecek apakah queue penuh. Is_Empty Mengecek apakah queue kosong. Initialize Membuat queue untuk pertama kali.

Deklarasi Struktur Data Queue #define maxsize 100 typdef struct { int jumlah; //jumlah data Deklarasi Struktur Data Queue #define maxsize 100 typdef struct { int jumlah; //jumlah data int depan; //ujung depan int belakang; //ujung belakang char data [ maxsize ]; //array isi queue }queue;

Initialize void initialize ( queue *q ) { q -> jumlah = 0; q Initialize void initialize ( queue *q ) { q -> jumlah = 0; q -> depan = 0; q -> belakang = 0; }

Is_Empty int Is_Empty ( queue *q ) { if (q -> jumlah == 0) Is_Empty int Is_Empty ( queue *q ) { if (q -> jumlah == 0) return (1); else return (0); }

Is_Full int Is_Full ( queue *q ) { if (q -> jumlah == maxsize) Is_Full int Is_Full ( queue *q ) { if (q -> jumlah == maxsize) return (1); else return (0); }

Enqueue void enqueue ( char X, queue *q ) { if ( Is_Full(q) ) Enqueue void enqueue ( char X, queue *q ) { if ( Is_Full(q) ) printf(“n. ERROR: queue sudah penuh”); else { q->data[q->belakang] = X; q->belakang = (q->belakang+1)%maxsize; ++(q->count); } }

Dequeue void dequeue ( queue *q, char X ) { if ( Is_Empty(q) ) Dequeue void dequeue ( queue *q, char X ) { if ( Is_Empty(q) ) printf(“n. ERROR: queue sudah kosong”); else { X = q->data[q->depan]; q->depan = (q->depan+1)%maxsize; --(q->count); } }

depan; ibelakang; i++) printf("%c" src="https://present5.com/presentation/7d4dd7b2ee7692d9c78d1ea3397daae2/image-126.jpg" alt="Show_Queue void show_queue(queue *q) { printf("n. Isi Queue: n"); for(int i=q->depan; ibelakang; i++) printf("%c" /> Show_Queue void show_queue(queue *q) { printf("n. Isi Queue: n"); for(int i=q->depan; ibelakang; i++) printf("%c ", q->data[i]); printf("n"); } Note: script ini khusus untuk normal queue

void main() queue kyu, *q; char x, *px; q = &kyu; px = &x; void main() queue kyu, *q; char x, *px; q = &kyu; px = &x; inisialisasi(q); enqueue('Q', q); show_queue(q); enqueue('U', q); show_queue(q); enqueue('E', q); show_queue(q); dequeue(q, px); show_queue(q); dequeue(q, px); show_queue(q);

Output Output

Queue – Linked List Jika sebuah linked list SELALU menambahkan node baru di ujung Queue – Linked List Jika sebuah linked list SELALU menambahkan node baru di ujung Tail dan SELALU menghapus node lama dari ujung Head QUEUE. n Front = head. n Rear = tail. n Single atau Double linked list? n

Enqueue Operation Enqueue Operation

Dequeue Operation Dequeue Operation

Minggu Keempatbelas Graph Minggu Keempatbelas Graph

Macam struktur data n LINIER Elemen data tersusun secara berurutan. Contoh : stack dan Macam struktur data n LINIER Elemen data tersusun secara berurutan. Contoh : stack dan queue n HIRARKI Elemen data tersusun secara bertingkat. Contoh : tree n KOMPLEK Elemen data tersusun secara kombinasional. Contoh : graph

Graph & Tree n n Struktur data non-linier. Penambahan atau penghapusan elemen data tidak Graph & Tree n n Struktur data non-linier. Penambahan atau penghapusan elemen data tidak mengakibatkan strukturnya tumbuh atau menyusut secara linier (garis lurus). Strukturnya bersifat hierarkis multidimensi 2 dimensi atau lebih. Umumnya diimplementasikan dengan array multidimensi atau linked list multilink.

Pengenalan Graph n Komponen penyusun : ¨ Vertices (node) ¨ Edges (arc/ link) n Pengenalan Graph n Komponen penyusun : ¨ Vertices (node) ¨ Edges (arc/ link) n Jenis : ¨ Weighted/ non weighted graph ¨ Directed/ non directed graph n Traversal (penelusuran) : ¨ DFS (Depth First Search) ¨ BFS (Breadth First Search) n Contoh kasus : path lintasan terpendek

Contoh Struktur Data # define MAXNODES 50 struct node{ /* informasi sebuah node */ Contoh Struktur Data # define MAXNODES 50 struct node{ /* informasi sebuah node */ }; Struct arc{ int adj; /* informasi sebuah arc */ }; Struct graph{ struct nodes[MAXNODES]; struct arcs[MAXNODES]; }; Struct graph g;

DFS Pencarian dilakukan dari node awal (root) lalu ke simpul anak hingga yang paling DFS Pencarian dilakukan dari node awal (root) lalu ke simpul anak hingga yang paling akhir (leaf) n Jika tujuan yang diinginkan belum tercapai maka pencarian dilanjutkan ke cabang sebelumnya n

BFS n Pencarian dilakukan dengan mengunjungi setiap node pada level yang sama sampai mencapai BFS n Pencarian dilakukan dengan mengunjungi setiap node pada level yang sama sampai mencapai tujuan atau sampai node terakhir

Minggu Kelimabelas Presentasi Tree Minggu Kelimabelas Presentasi Tree

Pengenalan Tree nodes contain two or more links ¨ n All other data structures Pengenalan Tree nodes contain two or more links ¨ n All other data structures we have discussed only contain one Binary trees ¨ All n nodes contain two links None, or both of which may be NULL ¨ The root node is the first node in a tree. ¨ Each link in the root node refers to a child ¨ A node with no children is called a leaf node

Struktur Data #define NUMNODES 500 Struct nodetype{ int info; int left; int right; int Struktur Data #define NUMNODES 500 Struct nodetype{ int info; int left; int right; int father; }; Struct nodetype node[NUMNODES]; Struct nodetype{ int info; struct nodetype *left; struct nodetype *right; struct nodetype *father; }; Struct nodetype *NODEPTR;

Tree traversals n Inorder traversal 1. Traverse the left subtree with an inorder traversal Tree traversals n Inorder traversal 1. Traverse the left subtree with an inorder traversal 2. Process the value in the node (i. e. , print the node value) 3. Traverse the right subtree with an inorder traversal n Preorder traversal 1. Process the value in the node 2. Traverse the left subtree with a preorder traversal 3. Traverse the right subtree with a preorder traversal n Postorder traversal 1. Traverse the left subtree with a postorder traversal 2. Traverse the right subtree with a postorder traversal 3. Process the value in the node

Binary Tree Search p = tree; while ( p != null && key != Binary Tree Search p = tree; while ( p != null && key != p info) if (key < p info) p = p left; else p = p right; return (p);

Minggu Keenambelas Ujian Akhir Semester Minggu Keenambelas Ujian Akhir Semester