Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

STRUKTUR DATA :: Nur Cahyo W ::. Tentang Saya Nur Cahyo Wibowo, S.Kom, M.Kom Nur Cahyo Wibowo, S.Kom, M.Kom S1 Teknik Informatika ITS 1998 – 2003 S1 Teknik.

Presentasi serupa


Presentasi berjudul: "STRUKTUR DATA :: Nur Cahyo W ::. Tentang Saya Nur Cahyo Wibowo, S.Kom, M.Kom Nur Cahyo Wibowo, S.Kom, M.Kom S1 Teknik Informatika ITS 1998 – 2003 S1 Teknik."— Transcript presentasi:

1 STRUKTUR DATA :: Nur Cahyo W ::

2 Tentang Saya Nur Cahyo Wibowo, S.Kom, M.Kom Nur Cahyo Wibowo, S.Kom, M.Kom S1 Teknik Informatika ITS 1998 – 2003 S1 Teknik Informatika ITS 1998 – 2003 S2 Teknik Informatika di ITS 2006 – 2009 S2 Teknik Informatika di ITS 2006 – 2009 HP HP Rumah kontrakan : Griya Pesona Asri E-21 Medokan Ayu, Rungkut Rumah kontrakan : Griya Pesona Asri E-21 Medokan Ayu, Rungkut Blog: Blog: atau FACE BOOK : NUR CAHYO WIBOWO FACE BOOK : NUR CAHYO WIBOWO MK : BP 1, BP 2, Sistem Digital, dll MK : BP 1, BP 2, Sistem Digital, dll

3 Tujuan Instruksional Tujuan Instruksional Umum: Tujuan Instruksional Umum: Mahasiswa mampu menentukan struktur data yang tepat dan mampu mengimplementasikan algoritma yang sudah ada dalam membuat sebuah program. Prasyarat: Bahasa Pemrograman Prasyarat: Bahasa Pemrograman Metode: Ceramah, tanya jawab, quiz, tugas perorangan, tugas kelompok Metode: Ceramah, tanya jawab, quiz, tugas perorangan, tugas kelompok

4 Tujuan Instruksional Khusus 1. Mahasiswa mampu menjelaskan peranan struktur data dan algoritma dalam membuat sebuah program. 2. Mahasiswa mampu mengimplementasikan beberapa contoh algoritma standar dalam membuat sebuah program. 3. Mahasiswa memahami struktur data dasar dalam pemrograman. 4. Mahasiswa dapat memahami dan mampu mengimplementasikan ADT (Abstract Data Type) dalam pemrograman.

5 KONTRAK KULIAH Toleransi keterlambatan 30 menit. Toleransi keterlambatan 30 menit. Pakaian SOPAN, berkerah, bebas rapi dan bersepatu. Pakaian SOPAN, berkerah, bebas rapi dan bersepatu. NILAI berdasar KBK: NILAI berdasar KBK: KOGNITIF:KOGNITIF: UTS: 30 % UTS: 30 % UAS: 30 % UAS: 30 % PSIKOMOTORIK:PSIKOMOTORIK: Tugas dan quiz : 20 % Tugas dan quiz : 20 % Final Project (Tim): 20 % Final Project (Tim): 20 % AFEKTIF: perhatian, etika, sopan santun di kelas, motivasi, kesungguhan, kehadiran. Mempengaruhi nilai secara umum.AFEKTIF: perhatian, etika, sopan santun di kelas, motivasi, kesungguhan, kehadiran. Mempengaruhi nilai secara umum. Ujian/ quiz/ pengumpulan tugas susulan harus menyertakan surat keterangan yang jelas. Ujian/ quiz/ pengumpulan tugas susulan harus menyertakan surat keterangan yang jelas. Cek nilai sebelum keluar KHS (2 minggu setelah UAS). Cek nilai sebelum keluar KHS (2 minggu setelah UAS).

6 SURVEY DIKTI 2006 FAKTOR PENENTU KEBERHASILAN MAHASISWA: FAKTOR PENENTU KEBERHASILAN MAHASISWA: SOFTSKILL: 40 %SOFTSKILL: 40 % NETWORKING: 30 %NETWORKING: 30 % HARDSKILL: 20 %HARDSKILL: 20 % FINANSIAL: 10 %FINANSIAL: 10 %

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

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

9 Buku Referensi Data Structures Using C and C++ Data Structures Using C and C++ second edition Yedidyah Langsam, dkk Text book lain Text book lain Internet  Internet  File E-books  map dan kopi di \\ \ebook File E-books  map dan kopi di \\ \ebook

10 What is programming? PROGRAM = ALGORITMA + STRUKTUR DATA PROGRAM = ALGORITMA + STRUKTUR DATA ALGORITMA : ALGORITMA : SEQUENTIALSEQUENTIAL BRANCHINGBRANCHING LOOPING/ REKURSILOOPING/ REKURSI STRUKTUR DATA : STRUKTUR DATA : ARRAYARRAY STRUCTSTRUCT POINTERPOINTER ADT : LINKED LIST, STACK, QUEUE, GRAPH, TREE, DLLADT : LINKED LIST, STACK, QUEUE, GRAPH, TREE, DLL

11 MINGGU PERTAMA

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

13

14 Fungsi Rekursif Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri. Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri. ABCD AAA A

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

16 Simple Example #include int main(void) { printf("Never ends\n"); main(); return 0; }

17 Faktorial ALGORITMA 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 SOURCE CODE int factorial ( int n ) { int x, y; if ( n == 0 ) return ( 1 ); x = n – 1; y = factorial ( x ); return ( n * y ); }

18 Latihan tracing rekursi

19 Perkalian ALGORITMA 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 ) = = 18 SOURCE CODE 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 ); }

20 Latihan tracing rekursi

21 Minggu Kedua

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

23 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( 2 ) + fibo( 3 ) = fibo( 0 ) + fibo ( 1 ) + fibo( 3 ) = fibo( 1 ) + fibo( 2 ) = fibo( 0 ) + fibo( 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 ); }

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

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

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

27 Tugas Rumah : TRACING towers(4, A, C, B) = ? towers(4, A, C, B) = ? fibo(6) = ? fibo(6) = ?

28 Minggu Ketiga

29 Array dan Struct Review struktur data dasar Review struktur data dasar ArrayArray StructStruct Contoh analisa program Contoh analisa program

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

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

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

33 STRUCT Contd. SATU variabel bisa menyimpan BANYAK data yang BERBEDA TIPE datanya. Mempunyai ELEMEN. SATU variabel bisa menyimpan BANYAK data yang BERBEDA TIPE datanya. Mempunyai ELEMEN. Struktur data : Struktur data : Konsep : struct of struct (nested struct). Konsep : struct of struct (nested struct)

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

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

36 Array of Struct Contd. Struktur data : Struktur data : Untuk akses elemen dimulai dari indeks array kemudian diikuti nama elemennya  mhs[3].NPM = 1234; Untuk akses elemen dimulai dari indeks array kemudian diikuti nama elemennya  mhs[3].NPM = 1234; 100 Abdullah Budi Candra Daud 3.17

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

38 Tugas Kelompok - RESUME ARRAY Array as function parameter Array as function parameter String String Two dimensional array Two dimensional arraySTRUCT Array of structure Array of structure Unions Unions Struct as function parameter Struct as function parameter

39 ATURAN RESUME Kirim di blog sebagai sebuah artikel. Kirim di blog sebagai sebuah artikel. Isi: Isi: Identitas kelompok (Nama + NPM)Identitas kelompok (Nama + NPM) Teori/ konsep yang dibahasTeori/ konsep yang dibahas Contoh source code programContoh source code program Capture tampilan programCapture tampilan program Daftar pustakaDaftar pustaka Maksimum pengumpulan: 24 jam. Maksimum pengumpulan: 24 jam. Beritahukan alamat blog-nya. Beritahukan alamat blog-nya.

40 Minggu Keempat

41 Sorting Tujuan : memahami proses tracing algoritma pengurutan. Tujuan : memahami proses tracing algoritma pengurutan. Beberapa jenis algoritma sorting : Beberapa jenis algoritma sorting : Bubble sortBubble sort Selection sortSelection sort Insertion sortInsertion sort

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

43 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 = 0 && y < X[i]; i--){ X[i+1] = X[i]; } X[i+1] = y; }}

44 Minggu Kelima

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

46 Tugas RESUME: Algoritma dan contoh sortingnya : Algoritma dan contoh sortingnya : Quick Sort : Urut absen 1-12Quick Sort : Urut absen 1-12 Merge Sort : Merge Sort : Shell Sort : 25 – 37Shell Sort : 25 – 37 Tugas individu Tugas individu Dikumpulkan lewat elearning Dikumpulkan lewat elearning Max. selasa 15/4 jam Max. selasa 15/4 jam 18.30

47 Minggu Keenam

48 Searching Tujuan : memahami proses tracing algoritma pencarian. Tujuan : memahami proses tracing algoritma pencarian. Jenis algoritma searching : Jenis algoritma searching : Sequential searchSequential search Indexed sequential searchIndexed sequential search Binary searchBinary search

49 Sequential Search for (i = 0; i < n; i++) { if (key == data[i]) return (i);//return the index } return (-1);//key not found

50 Indexed Sequential Search for (i = 0; i < indxsize && kindex[ i ] <= key; i++); if (i == 0) lowlim = 0;//set low limit else lowlim = pindex[i-1]; if (i == indxsize) hilim = n – 1;//set high limit else hilim = pindex[i]-1; for (j = lowlim; j <= hilim && k[ j ] != key; j++); //search if (j > hilim) return (-1); else return ( j );

51 Latihan tracing

52 Binary Search 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);

53 Latihan tracing

54 Minggu Ketujuh POINTER

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

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

57 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(“%d\t”, *(pdata + i)); }

58 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 = %d\tLuas = %f\n”, pdata->jari_jari, pdata->luas); }

59 KESIMPULAN 1. Deklarasikan variabel bertipe pointer. Cirinya ada tanda asterisk. 2. Mengarahkan pointer ke alamat yang dituju menggunakan operator &. 3. Akses data melalui pointer. Dimungkinkan ada pertambahan/ pengurangan alamat pointer.

60 Minggu Kedelapan Ujian Tengah Semester

61 Minggu Kesembilan

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

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

64 In this linked list example, each node has two pieces of data. Each node also has a pointer to the next node. 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, 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? So…how can we accomplish this?

65 The first goal, combining various datatypes and variables into one datatype, is easily handled with a structure. 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. 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. So, we have all of the components we need in order to construct a linked list.

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

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

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

69 Citra NULL 100 Alamat = Budi Alamat = Amin Alamat = simpul1simpul3simpul2

70 Citra NULL 100 Alamat = 2370 Budi Alamat = 1080 Amin Alamat = simpul1 Pointer Head Pointer Tail

71 Ilustrasi Inserting a Node Citra NULL 100 Alamat = 2370 Budi Alamat = 1080 Amin Alamat = simpul Alamat = 8460 Dewi 98 update T New New->next = T->next T->next = New

72 Ilustrasi Deleting a Node Citra NULL 100 Alamat = 2370 Budi Alamat = 1080 Amin Alamat = simpul1 free() update PT P->next = T->next free(T)

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

74 void main() { simpul baru, head=NULL, tail=NULL, temp; int pilih; do{printf("MENU\n"); printf("1. Insert\n"); printf("2. View\n"); printf("3. Search\n"); printf("4. Delete\n"); printf("PILIH: "); scanf("%d", &pilih); switch(pilih) { ……… } }while (pilih!=5); }

75 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; head = baru; tail = baru; tail = baru;}else{ tail->next = baru; tail->next = baru; tail = baru; tail = baru;}break;

76 Show All Node case 2: temp = head; while(temp!=NULL){ printf("%i ", temp->info); printf("%i ", temp->info); temp = temp->next; temp = temp->next;}printf("\n");break;

77 Search a Node case 3: int cari; printf("Cari Angka: "); scanf("%i", &cari); temp = head; while((temp!=NULL)&&(temp->info!=cari)){ temp = temp->next; temp = temp->next;} if(temp != NULL && temp->info == cari) printf("Data Ditemukan"); else //if(temp == NULL) printf("Data Tidak Ditemukan"); printf("\n");break;

78 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; prev = temp; temp = temp->next; temp = temp->next;}//bersambung…

79 if(temp != NULL && temp->info == hapus)//ditemukan { printf("Yakin Dihapus? (y/t)"); flushall(); jwb=getch(); jwb=getch(); if(jwb == 'y') if(jwb == 'y') { if(temp->next != NULL && temp != head) 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) else if (temp == head && head->next == NULL) head = NULL; else if (temp == head && head->next != 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;

80 Capture Program

81 Minggu Kesepuluh

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

83 Singly and Doubly A linked list node containing a single forward pointer may be declared as follows A linked list node containing a single forward pointer may be declared as follows struct Node { intdata;/* or whatever */ struct Node*next_in_line; }; struct Node { intdata;/* or whatever */ struct Node*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 { intdata; struct Node*next_in_line; struct Node*previous_in_line; }; struct Node { intdata; struct Node*next_in_line; struct Node*previous_in_line; }; pointer to previous Node structure pointer to next Node structure

84 Circular Linked List

85 Minggu Kesebelas

86 Stack Definisi Stack Definisi Stack Operasi-operasi dasar Stack Operasi-operasi dasar Stack PushPush PopPop Contoh program operasi dasar Stack menggunakan array Contoh program operasi dasar Stack menggunakan array

87 STACK (TUMPUKAN) 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. 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 TOP-nya saja yang bisa diakses. Struktur data linier dimana hanya bagian TOP-nya saja yang bisa diakses. Bersifat LIFO = Last In First Out. Bersifat LIFO = Last In First Out. Bisa diimplementasikan menggunakan array atau Linked List. Bisa diimplementasikan menggunakan array atau Linked List.

88 Last In First Out

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

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

91 Visualisasi Operasi Stack X A E X A B X A TOP remove: “POP” TOP insert ‘B’: PUSH ‘B’ TOP D K D K P D K P O D K P D K DD T D T R D T R W D T R W Y abcdefg hij

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

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

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

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

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

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

98 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); pop(my_stack, x); show(my_stack); show(my_stack);}

99 Output Program

100 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. Jika sebuah linked list SELALU menambahkan node baru dan menghapus node lama dari salah SATU ujungnya saja (posisi Head ataukah Tail)  STACK. TOP = head untuk single linked list. TOP = head untuk single linked list. TOP = tail untuk double linked list. TOP = tail untuk double linked list. HOW? HOW?

101 Push Operation

102 Pop Operation

103 Minggu Keduabelas

104 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 )// jika symb adalah kurung buka 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” );

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

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

107 Algoritma Infix  Postfix 1. Tambahkan tanda kurung untuk mengelompokkan operasi. 2. Keluarkan operator ke sebelah kanan tanda kurung untuk setiap kelompok operasi satu per satu. 3. Hilangkan semua tanda kurung.

108 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 */ {opnd2 = pop ( opndstck ) opnd1 = pop ( opndstck ) value = opnd1 (symb) opnd2 push ( opndstck, value ) } /* end else */ } /* end while */ return ( pop ( opndstck ) )

109 QUIZ : Jika A = 4, B = 2, C = 3, hitunglah : 1. ABC+–ACB^*+ 2. AB*CB+^AC+–

110 Minggu Ketigabelas

111 Queue Definisi Queue Definisi Queue Operasi-operasi dasar Queue Operasi-operasi dasar Queue Insert/ enqueueInsert/ enqueue Remove/ dequeueRemove/ dequeue Contoh program operasi dasar Queue menggunakan array Contoh program operasi dasar Queue menggunakan array

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

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

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

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

116 Deklarasi Struktur Data Queue #define maxsize 100 typdef struct { intjumlah;//jumlah data intdepan;//ujung depan intbelakang;//ujung belakang chardata [ maxsize ]; //array isi queue }queue;

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

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

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

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

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

122 Show_Queue void show_queue(queue *q) { printf("\nIsi Queue:\n"); for(int i=q->depan; i belakang; i++) printf("%c ", q->data[i]); printf("\n");} Note: script ini khusus untuk normal queue

123 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); enqueue('U', q); show_queue(q); enqueue('E', q); show_queue(q); dequeue(q,px); show_queue(q);

124 Output

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

126 Enqueue Operation

127 Dequeue Operation

128 Tugas Final Project Goal: Membuat video pembelajaran ttg struktur data. Goal: Membuat video pembelajaran ttg struktur data. Manfaat: Menjadi media pendukung keg. belajar- mengajar mata kuliah struktur data di kelas. Manfaat: Menjadi media pendukung keg. belajar- mengajar mata kuliah struktur data di kelas. Tema: Stack (E dan C) dan Queue (Sore dan SK). Tema: Stack (E dan C) dan Queue (Sore dan SK). Aturan: Aturan: Durasi video antara 8 – 10 menit.Durasi video antara 8 – 10 menit. Jumlah anggota 7 – 9 mahasiswa.Jumlah anggota 7 – 9 mahasiswa. Ada pembagian tugas yang jelas untuk setiap anggota.Ada pembagian tugas yang jelas untuk setiap anggota. Demo I (progress report): 2 pekan sebelum UAS. Demo II (final product): 1 pekan sebelum UAS.Demo I (progress report): 2 pekan sebelum UAS. Demo II (final product): 1 pekan sebelum UAS. Penilaian: Penilaian: Kebenaran isi  harus ada sumber literatur yang jelas.Kebenaran isi  harus ada sumber literatur yang jelas. Kreativitas.Kreativitas. Video editting.Video editting. Pembawaan cerita/ skenario.Pembawaan cerita/ skenario.

129 Minggu Keempatbelas Presentasi Graph

130 STRUKTUR DATA NON LINIER TUGAS KELOMPOK TUGAS KELOMPOK Membuat makalah berisi teori, contoh program/ pseudocode dan analisa. Minimal 5 halaman kertas A4, margin , spasi single.Membuat makalah berisi teori, contoh program/ pseudocode dan analisa. Minimal 5 halaman kertas A4, margin , spasi single. Melakukan presentasi sesuai jadwal oleh setiap anggotanya. Tiap kelompok 30 menit.Melakukan presentasi sesuai jadwal oleh setiap anggotanya. Tiap kelompok 30 menit. Print makalah dikumpulkan hari Senin, 23 Juni 2008 di awal kuliah. Sedangkan file ppt maksimal di-upload ke e-learning selambat- lambatnya hari Minggu 22 Juni 2008 atau membawa laptop sendiri pada waktu presentasi.Print makalah dikumpulkan hari Senin, 23 Juni 2008 di awal kuliah. Sedangkan file ppt maksimal di-upload ke e-learning selambat- lambatnya hari Minggu 22 Juni 2008 atau membawa laptop sendiri pada waktu presentasi. GRAPH GRAPH 1.Basic theorema and program 2.Shortest path problem 3.Depth First Search 4.Breadth First Search TREE TREE 5.Binary Tree and program 6.Traverse Pre-order 7.Traverse In-order 8.Traverse Post-order

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

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

133

134

135 Topik Tugas Presentasi

136 Minggu Kelimabelas Presentasi Tree

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

138

139 Topik Tugas Presentasi

140 Tree traversals Inorder traversal 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 Preorder traversal 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 Postorder traversal 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

141

142

143

144

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

146 Minggu Keenambelas Ujian Akhir Semester


Download ppt "STRUKTUR DATA :: Nur Cahyo W ::. Tentang Saya Nur Cahyo Wibowo, S.Kom, M.Kom Nur Cahyo Wibowo, S.Kom, M.Kom S1 Teknik Informatika ITS 1998 – 2003 S1 Teknik."

Presentasi serupa


Iklan oleh Google