Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehEndra Juventini Telah diubah "10 tahun yang lalu
1
STRUKTUR DATA :: Nur Cahyo Wibowo, S.Kom, M.Kom ::
Program Studi Sistem Informasi UPN “Veteran” Jawa Timur
2
Tentang Saya S1 Teknik Informatika ITS 1998 – 2003
S2 Teknik Informatika di ITS 2006 – 2009 HP Rumah : Jl. Medayu Utara IV/57A, Medokan Ayu, Rungkut Blog: atau FACE BOOK : NUR CAHYO WIBOWO MK : BP, RPL, Kommas, dll
3
Tujuan Instruksional Tujuan Instruksional Umum:
Mahasiswa mampu menentukan struktur data yang tepat dan mampu mengimplementasikan algoritma yang sudah ada dalam membuat sebuah program. Prasyarat : Bahasa Pemrograman Metode: Ceramah, tanya jawab, quiz, tugas perorangan, tugas kelompok
4
Tujuan Instruksional Khusus
Mahasiswa mampu menjelaskan peranan struktur data dan algoritma dalam membuat sebuah program. Mahasiswa mampu mengimplementasikan beberapa contoh algoritma standar dalam membuat sebuah program. Mahasiswa memahami struktur data dasar dalam pemrograman. Mahasiswa dapat memahami dan mampu mengimplementasikan ADT (Abstract Data Type) dalam pemrograman.
5
KONTRAK KULIAH Toleransi keterlambatan 30 menit.
Pakaian SOPAN, berkerah, bebas rapi dan bersepatu. NILAI berdasar KBK: KOGNITIF: UTS : 30 % UAS : 30 % PSIKOMOTORIK: Tugas dan quiz : 30 % Keaktifan : 10 % 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. Cek nilai sebelum keluar KHS (2 minggu setelah UAS).
6
SURVEY DIKTI 2006 FAKTOR PENENTU KEBERHASILAN MAHASISWA:
SOFTSKILL : 40 % NETWORKING : 30 % HARDSKILL : 20 % FINANSIAL : 10 %
7
Wise Words Every man suffers pain.
Either the pain of hard work, or the pain of regret.
8
MATERI KULIAH Fungsi Rekursi Review : Array, Class, Object Sorting
Searching Linked List Stack Queue Pengantar Graph dan Tree
9
Satuan Acara Perkuliahan
Pengantar + Fungsi Rekursi 1 Fungsi Rekursi 2 Review Array Sorting 1 : Bubble dan Insertion Sorting 2 : Selection Searching Review Class dan Object. UTS Linked List 1 : Single Linked List Linked List 2 : Linked List Lanjut Stack 1 – Operasi Dasar Stack 2 – Contoh Penggunaan Queue Pengantar Graph dan Tree Demo Final Project – Video Bahan Ajar Struktur Data UAS
10
Buku Referensi Richard Wiener, Fundamentals of OOP and Data Structures in Java, Cambridge University Press. Robert Lafore, Data Structures and Algorithms in Java, Sams Publishing. Text book lain Internet File E-books
11
What is programming? PROGRAM = ALGORITMA + STRUKTUR DATA ALGORITMA :
SEQUENTIAL BRANCHING LOOPING/ REKURSI STRUKTUR DATA : ARRAY CLASS ADT : LINKED LIST, STACK, QUEUE, GRAPH, TREE, DLL
12
MINGGU PERTAMA
13
Fungsi Rekursif Definisi fungsi rekursif. Contoh 1 : Faktorial
Contoh 2 : Perkalian Contoh 3 : Fibonacci Contoh 4 : Tower of Hanoi
15
Fungsi Rekursif Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri. A B C D A A A A
16
Fungsi Rekursif Setara dengan proses looping/ iterasi faktorial, perkalian Kadang rekursif lebih baik dari iterasi tower of hanoi Terkadang sebaliknya fibonacci Komponen : Way out if – else + return() Recursive call dengan value baru
17
Simple Example public class rekursi { static void rekursi( )
{ System.out.println("ini rekursif"); rekursi( ); //RECURSIVE CALL } public static void main(String[] args) { rekursi( );
18
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 ); }
19
Latihan tracing rekursi
20
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 ); }
21
Latihan tracing rekursi
22
Minggu Kedua
23
Fibonacci The Fibonacci series fn≥0 is a famous series defined by: f0 :≡ 0, f1 :≡ 1, fn≥2 :≡ fn−1 + fn−2 f2 = f0 + f1 = = 1 f3 = f1 + f2 = = 2 f4 = f2 + f3 = = 3 f5 = f3 + f4 = = 5 …. Leonardo Fibonacci
24
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 ); }
25
Tracing Fibonacci fibo (4) = ? F(4) F(2) F(3) F(2) F(0) F(1) F(1) F(0)
26
Towers of Hanoi ALGORITMA
If n == 1, move the single disk from A to C and stop. Move the top n – 1 disks from A to B, using C as auxiliary. Move the remaining disk from A to C. 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 );
27
Tracing Towers of Hanoi
towers(3, A, C, B) = ?
28
Tugas Rumah : TRACING towers(4, A, C, B) = ? fibo(6) = ?
30
Minggu Ketiga
31
ARRAY Tipe data turunan. Contoh deklarasi : int x[20];
SATU variabel untuk menyimpan BANYAK data dengan TIPE data yang SAMA. Mempunyai INDEKS. Struktur data : Alokasi memori bersifat statis/ tetap. Konsep : string, array multidimensi 4 3 2 1 7
32
Contoh program Program menghitung rata-rata nilai. Algoritma :
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.
33
STRUCT Tipe data turunan. Contoh deklarasi : struct { int jari_jari;
float luas; float keliling; } lingkaran;
34
STRUCT Contd. SATU variabel bisa menyimpan BANYAK data yang BERBEDA TIPE datanya. Mempunyai ELEMEN. Struktur data : Konsep : struct of struct (nested struct). 10 314.0 62.8
35
Contoh program Program tentang lingkaran. Algoritma :
Inventarisasi atribut-atribut yang dimiliki oleh sebuah objek lingkaran. Akses masing-masing elemen dengan memakai operator tanda titik (.).
36
ARRAY OF STRUCT Struktur data berupa array yang setiap elemennya bertipe struct. Contoh deklarasi : struct { int NPM; char nama[30]; float IPK; } mhs[100];
37
Array of Struct Contd. Struktur data :
Untuk akses elemen dimulai dari indeks array kemudian diikuti nama elemennya mhs[3].NPM = 1234; 100 Abdullah 3.80 101 Budi 3.45 102 Candra 3.22 103 Daud 3.17
38
Contoh Program Program data mahasiswa. Program tabel fungsi kuadrat.
39
Tugas Kelompok - RESUME
ARRAY Array as function parameter String Two dimensional array STRUCT Array of structure Unions Struct as function parameter
40
ATURAN RESUME Kirim di blog sebagai sebuah artikel. Isi:
Identitas kelompok (Nama + NPM) Teori/ konsep yang dibahas Contoh source code program Capture tampilan program Daftar pustaka Maksimum pengumpulan: 24 jam. Beritahukan alamat blog-nya.
41
Minggu Keempat
42
Sorting Tujuan : memahami proses tracing algoritma pengurutan.
Beberapa jenis algoritma sorting : Bubble sort Selection sort Insertion sort
43
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; }
44
Insertion Sort { int i, j, y; for ( j = 1; j < n; j++) y = X[j];
void insertion ( int X [ ], int n ) { int i, j, y; for ( j = 1; j < n; j++) y = X[j]; for ( i = j-1; i >= 0 && y < X[i]; i--) X[i+1] = X[i]; } X[i+1] = y;
45
Minggu Kelima
46
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;
47
KUIS PILIH : INSERTION, SELECTION WAKTU 15 MENIT
TRACING UNTUK ARRAY X = 23, 20, 36, 18
49
Tugas RESUME: Algoritma dan contoh sortingnya : Tugas individu
Quick Sort : NPM 4-20 Merge Sort : NPM Shell Sort : NPM 46 – 112 Tugas individu Format .doc Cantumkan sumber pustakanya Di-upload ke e-learning Max. Minggu 8/4 jam WIB
50
Minggu Keenam
51
Searching Tujuan : memahami proses tracing algoritma pencarian.
Jenis algoritma searching : Sequential/ linier search Indexed sequential search Binary search
52
Sequential Search for (i = 0; i < n; i++) { if (key == data[i])
return (i); //return the index } return (-1); //key not found
53
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 hilim = pindex[i]-1; for (j = lowlim; j <= hilim && k[ j ] != key; j++); //search if (j > hilim) return (-1); return ( j );
54
Tracing ISS key = 17. Index size = 3.
data 2 3 5 6 8 9 11 14 23 27 I LL HL J 1 2 5 7 6 8 (>7) pindex kindex 2 5 9 8 23
55
Latihan tracing
56
Binary Search low = 0; high = n – 1; while (low <= high)
{ middle = (low + high)/2; if (key == data[middle]) return(middle); //selesai. if (key < data[middle]) high = middle – 1; else low = middle + 1; } return(-1); //data tidak ditemukan.
57
Latihan tracing key = 18 2 3 6 8 9 12 14 18 19 20
58
Quiz… Kelompok A = [ 3, 4, 1, 2 ] Kelompok B = [ 7, 9, 8, 6 ] SOAL
Urutkan dengan SELECTION SORT Lakukan BINARY SEARCH dgn key: 3 7
59
Minggu Ketujuh POINTER
60
POINTER Adalah TIPE DATA TURUNAN Contoh deklarasi : int *pointerX;
Variabel bertipe pointer digunakan untuk menyimpan ALAMAT sebuah data, BUKAN NILAI datanya. Operator yang sering dipakai: & mendapatkan alamat memori * mengakses nilai dari sebuah pointer
61
#include “stdio.h” void main() { int data, *pointer_data; data = 100; pointer_data = &data; printf(“Data = %d di alamat %p\n”, data, pointer_data); }
62
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)); }
63
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); }
64
KESIMPULAN Deklarasikan variabel bertipe pointer. Cirinya ada tanda asterisk. Mengarahkan pointer ke alamat yang dituju menggunakan operator &. Akses data melalui pointer. Dimungkinkan ada pertambahan/ pengurangan alamat pointer.
65
Minggu Kedelapan Ujian Tengah Semester
66
Linked List Membuat resume (individu)
Isi teori dan source code Java. Ada ilustrasi gambar lebih baik. Format .doc. Cantumkan sumber pustaka. Cek terlebih dulu jika hasil terjemahan!!! Kirim di e-learning. Maksimal hari Jumat 11 Mei 2012, pukul WIB.
67
Minggu Kesembilan
68
(Single) Linked List Definisi linked list Operasi dasar Contoh program
69
Kumpulan elemen Linier Node/ simpul Isi node: Dinamis Info
Pointer/ alamat simpul berikutnya Dinamis
70
Kuis 15 menit. Close book. Jawaban:
Struktur data, dinamis, simpul-simpul, terhubung, tipe data sama. [30] class node { int data; //variabel2 node next; } [30] Mengisi variabel next dengan alamat memori obyek berikutnya. [40]
71
Tuliskan Pesan Nilai < 60:
Belajarnya ditingkatkan ya. Jangan banyak main dan keluyuran. Nilai 60 – 79: Sudah lumayan. Teruskan belajarnya. Nilai > 79: Bagus. Teman-temannya diajarin dong.
72
Ilustrasi Singly Linked List
Data 1 Next node Data 2 Data 3 Data 4 NO NEXT
73
In this linked list example, each node has two pieces of data
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?
74
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.
75
Linked List 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).
76
Linked List Sederhana Deklarasi struktur data :
typedef struct simpul { char nama[20]; float nilai; struct simpul *next_simpul; } simpulku;
77
void main() //alokasi memori
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;
78
simpul1 simpul3 simpul2 Alamat = 2370 2370 Alamat = 1080 1080
Citra NULL 100 Alamat = 2370 2370 Budi 20 Alamat = 1080 1080 Amin 90 Alamat = 1000 1000 simpul1 simpul3 simpul2
79
simpul1 Alamat = 2370 Alamat = 1080 Alamat = 1000 1000 Citra NULL 100
Budi 2370 20 Alamat = 1080 Amin 1080 90 Alamat = 1000 1000 simpul1 Pointer Tail Pointer Head
80
Ilustrasi Inserting a Node
Citra NULL 100 Alamat = 2370 Budi 8460 20 Alamat = 1080 Amin 1080 90 Alamat = 1000 1000 simpul1 update 2370 Alamat = 8460 Dewi 98 New New->next = T->next T->next = New
81
Ilustrasi Deleting a Node
P T Citra NULL 100 Alamat = 2370 Budi 2370 20 Alamat = 1080 Amin 90 Alamat = 1000 1000 simpul1 update free() P->next = T->next free(T)
82
Contoh Program Linked List
#include "stdio.h" #include "stdlib.h" #include "conio.h" struct node{ int info; struct node *next; }; typedef struct node *simpul;
83
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);
84
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; break;
85
Show All Node case 2: temp = head; while(temp!=NULL) {
printf("%i ", temp->info); temp = temp->next; } printf("\n"); break;
86
Search a Node case 3: int cari; printf("Cari Angka: ");
scanf("%i", &cari); temp = head; while((temp!=NULL)&&(temp->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;
87
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…
88
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"); printf("Data Tidak Ditemukan"); printf("\n"); break;
89
Capture Program
90
Minggu Kesepuluh
91
Macam-macam List Singly linked list Doubly linked list
Singly circular linked list Doubly circular linked list
92
Kuis 10 menit. 4 soal langsung jawab. Soal: Class node Tambah belakang
Hapus depan Tampil mundur
93
Singly and Doubly A linked list node containing a single forward pointer may be declared as follows struct Node { int data; /* 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 { int data; struct Node *next_in_line; struct Node *previous_in_line; }; pointer to next Node structure pointer to previous Node structure
94
Circular Linked List
95
Minggu Kesebelas
96
Final Project Tugas kelompok (10-11 orang).
Membuat video tentang STACK. Durasi 8 – 10 menit. Dikumpulkan pada Pekan Teduh. Ide cerita tidak dibatasi. Kebenaran dan kejelasan materi yang disampaikan. Konten: teori & program. Akan di-upload di website resmi UPN.
97
Progress Report FP Pekan 2 Juni : Pembagian Tugas/ Peran.
Pekan 3 Juni : Penentuan Ide Cerita. Pekan 4 Juni : Penyusunan Skenario. Pekan 1 Juli : Syuting. Pekan 2 Juli : Editting. Pekan 3 Juli : Dikumpulkan.
98
Stack Definisi Stack Operasi-operasi dasar Stack
Push Pop Contoh program operasi dasar Stack menggunakan array
99
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. Struktur data linier dimana hanya bagian TOP-nya saja yang bisa diakses. Bersifat LIFO = Last In First Out. Bisa diimplementasikan menggunakan array atau Linked List.
100
Last In First Out
101
Penggunan Stack History pada web browser. Undo Log pada text editor.
Pemrosesan struktur bersarang (nested) : loop, rekursi, fungsi, dll. Algoritma back tracking – Artificial Intelegence
102
Operasi Dasar Stack Push : memasukkan sebuah item baru ke dalam stack.
Pop : mengeluarkan sebuah item dari stack. Operasi lain : Is_Empty, Is_Full Note : pop dan push dilakukan melalui ujung yang sama (TOP)
103
Visualisasi Operasi Stack
X A E B TOP remove: “POP” insert ‘B’: PUSH ‘B’ D K P O T R W Y a b c d e f g h i j
104
Langkah Membuat Stack Membuat struktur data class
Mendefinisikan atribut class. Membuat fungsi/ operasi method Push Pop. Membuat fungsi utama main()
105
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
106
Deklarasi Fungsi-Fungsi Stack
void initialize ( stack *s) void pop ( stack *s, char *x ) void push ( stack *s, char x ) void show ( stack *s )
107
Fungsi Initialize void initialize ( stack *s)
// operasi initialize dg parameter // s bertipe pointer stack { s -> top = -1; // top = -1 stack dlm kondisi empty }
108
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"); }
109
Fungsi Pop void pop ( stack *s, char *x ) {
if (s->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"); }
110
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"); }
111
Fungsi Main void main() { stack *my_stack, s; char item, *x;
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); }
112
Output Program
113
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. TOP = head untuk single linked list. TOP = tail untuk double linked list. HOW?
114
Push Operation
115
Pop Operation
116
Penggunaan Stack dalam Pemrograman
Minggu Keduabelas Penggunaan Stack dalam Pemrograman
117
Apakah Tanda Kurungnya Valid?
{x+(y-[a+b])*c-[(d+e)]}{z+(y [d+f]}*g-((d+h)]}{w+(y-[a+r])*j-[(k+e)]}
118
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 == ‘{‘ ) //apakah symb termasuk kurung buka? push ( s, symb ) // jika symb adalah kurung buka if ( symb == ‘)‘ || symb == ‘]‘ || symb == ‘}‘ ) //apakah symb termasuk kurung tutup? 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” );
119
Example Case Cek apakah string di bawah ini valid! (a+b)}
(h-(j-(k-[l-n])) {x+(y-[a+b])*c-[(d+e)]} Valid
120
Evaluasi Postfix Postfix adalah bentuk persamaan matematika dimana operator ditulis setelah kedua operannya. Contoh : AB+ CDE*- C-(D*E) FG/H+ (F/G)+H Latihan : Ubah infix ke postfix {([(A+B)*C] – (D – E))^(F+G)} AB+C*DE - - FG+^
121
Algoritma Infix Postfix
Tambahkan tanda kurung untuk mengelompokkan operasi. Keluarkan operator ke sebelah kanan tanda kurung untuk setiap kelompok operasi satu per satu. Hilangkan semua tanda kurung.
122
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 ) )
123
SOAL POSTFIX : Jika A = 4, B = 2, C = 3, hitunglah : ABC+–ACB^*+
AB*CB+^AC+–
124
Minggu Ketigabelas
125
Etika di Kelas Menyadari sepenuhnya bahwa kuliah adalah amanah dari orang tua (supporting dana). Menyadari sepenuhnya bahwa kuliah adalah dalam rangka menimba ilmu pengetahuan. Menyimak dan memperhatikan apa yang disampaikan oleh dosen dengan baik dan serius. Menjaga ketertiban suasana kelas. MENAHAN, MENAHAN DAN MENAHAN BICARA, sebelum diberi kesempatan. Menghindari aktivitas apapun lainnya yang tidak berhubungan dengan hal belajar mengajar saat itu di kelas kecuali terpaksa/ sangat penting.
126
Queue Definisi Queue Operasi-operasi dasar Queue
Insert/ enqueue Remove/ dequeue Contoh program operasi dasar Queue menggunakan array
127
Queue Sequence of items.
Items dimasukkan dari ujung belakang, dikeluarkan dari ujung depan. Bersifat FIFO (First In First Out).
128
Jenis Queue Normal queue. Circular queue. DE-queue (double ended).
Ex. High and low priority policy Priority queue.
129
Penggunaan Queue Waiting list – birokrasi. Simulasi sistem antrian.
Antrian printer jobs. Antrian proses multitasking dalam CPU. Antrian playlist winamp. Dan antrian-antrian yang lain.
130
Operasi Dasar 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.
131
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;
132
Initialize void initialize ( queue *q ) { q -> jumlah = 0;
q -> depan = 0; q -> belakang = 0; }
133
Is_Empty int Is_Empty ( queue *q ) { if (q -> jumlah == 0)
return (1); else return (0); }
134
Is_Full int Is_Full ( queue *q ) { if (q -> jumlah == maxsize)
return (1); else return (0); }
135
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); }
136
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); }
137
Show_Queue void show_queue(queue *q) { printf("\nIsi Queue:\n");
for(int i=q->depan; i<q->belakang; i++) printf("%c ", q->data[i]); printf("\n"); } Note: script ini khusus untuk normal queue
138
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);
139
Output
140
Queue – Linked List Jika sebuah linked list SELALU menambahkan node baru di ujung Tail dan SELALU menghapus node lama dari ujung Head QUEUE. Front = head. Rear = tail. Single atau Double linked list?
141
Enqueue Operation
142
Dequeue Operation
143
Tugas Final Project Goal: Membuat video pembelajaran ttg struktur data. Manfaat: Menjadi media pendukung keg. belajar-mengajar mata kuliah struktur data di kelas. Tema: Stack (E dan C) dan Queue (Sore dan SK). Aturan: Durasi video antara 8 – 10 menit. Jumlah anggota 7 – 9 mahasiswa. Ada pembagian tugas yang jelas untuk setiap anggota. Demo I (progress report): 2 pekan sebelum UAS. Demo II (final product): 1 pekan sebelum UAS. Penilaian: Kebenaran isi harus ada sumber literatur yang jelas. Kreativitas. Video editting. Pembawaan cerita/ skenario.
144
Minggu Keempatbelas Presentasi Graph
145
Kuis 20 menit. 2 sesi terpisah. Open book. Soal di slide berikutnya:
146
Soal Plasa “Bela Negara” menerapkan sistem parkir mobil pengunjung secara terkomputerisasi. Masuk dan keluarnya mobil ke dalam tempat parkir dikendalikan oleh sistem. Tempat parkir yang disediakan berupa sebuah lorong jalan tunggal yang memanjang. Mobil baru yang masuk selalu berada di urutan paling belakang. Jika mobil yang di tengah atau yang di belakang akan keluar, maka mobil-mobil yang di depannya harus dikeluarkan ke tempat penampungan sementara, untuk nantinya dikembalikan lagi sesuai urutan semula. Sedangkan mobil yang ada di belakangnya akan dimajukan satu posisi. Buatlah algoritma untuk menjalankan proses keluar dari parkir sebagaimana ilustrasi di atas. Gunakan struktur data stack dan atau queue.
147
STRUKTUR DATA NON LINIER
TUGAS KELOMPOK Membuat makalah berisi teori, contoh program/ pseudocode dan analisa. Minimal 5 halaman kertas A4, margin , spasi 1.5. Lengkapi dengan gambar ilustrasi. Cantumkan daftar pustakanya. Upload makalah maksimal tanggal 1 Juli 2012 ke e-learning. ISI MAKALAH: GRAPH Teori dasar dan struktur datanya Shortest path problem Depth First Search Breadth First Search TREE Teori dasar Tree dan Binary Tree dan struktur datanya Traverse Pre-order Traverse In-order Traverse Post-order
148
Graph & Tree 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.
149
Pengenalan Graph Komponen penyusun : Jenis : Traversal (penelusuran) :
Vertices (node) Edges (arc/ link) Jenis : Weighted/ non weighted graph Directed/ non directed graph Traversal (penelusuran) : DFS (Depth First Search) BFS (Breadth First Search) Contoh kasus : path lintasan terpendek
152
Topik Tugas Presentasi
153
Minggu Kelimabelas Presentasi Tree
154
Pengenalan Tree Tree nodes contain two or more links Binary trees
All other data structures we have discussed only contain one Binary trees All nodes contain two links None, one, 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
156
Topik Tugas Presentasi
157
Tree traversals Inorder traversal Preorder 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 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 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
162
Binary Tree Search p = tree; while ( p != null && key != k(p))
if (key < k(p)) p = left(p); else p = right(p); return (p);
163
Minggu Keenambelas Ujian Akhir Semester
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.