Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
:: Fetty Tri Anggraeny ::
STRUKTUR DATA :: Fetty Tri Anggraeny ::
2
Tentang Saya Fetty Tri Anggraeny, S.Kom HP : (031)83031803 Email :
atau MK : Bahasa Pemrograman, Struktur Data, Sistem Digital, Grafika Komputer Pengolahan Citra Digital Sistem Pakar atau Sistem Berbasis Pengetahuan
3
KONTRAK KULIAH 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 : 20 % Final Project (Tim) : 20 % UTS : 30 % UAS : 30 % POIN PLUS :keaftifan dalam kelas maupun tugas
4
MATERI KULIAH Fungsi Rekursi Review : Array, Struct, Pointer Sorting
Searching Linked List Stack Queue Graph dan Tree
5
Satuan Acara Perkuliahan
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 Linked List 2 : Linked List Lanjut Stack 1 – Operasi Dasar Stack 2 – Contoh Penggunaan Queue Graph Tree UAS
6
Buku Referensi Data Structures Using C and C++
2nd edition, Yedidyah Langsam, dkk Text book lain Internet
7
What is programming? PROGRAM = ALGORITMA + STRUKTUR DATA ALGORITMA :
SEQUENTIAL BRANCHING LOOPING/ REKURSI STRUKTUR DATA : ARRAY STRUCT POINTER ADT : LINKED LIST, STACK, QUEUE, GRAPH, TREE, DLL
8
MINGGU PERTAMA
9
Fungsi Rekursif Definisi fungsi rekursif. Contoh 1 : Faktorial
Contoh 2 : Perkalian Contoh 3 : Fibonacci Contoh 4 : Tower of Hanoi
11
Fungsi Rekursif Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri. A B C D A A A A
12
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
13
Simple Example #include<stdio.h> int main(void) {
printf("Never ends\n"); main(); return 0; }
14
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 ); }
15
Latihan tracing rekursi
16
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 ); }
17
Latihan tracing rekursi
18
Minggu Kedua
19
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
20
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 + fibo(0) + fibo(1) + fibo(2) = fibo(1) + fibo(2) = 1 + fibo(1) + fibo(2) = fibo(2) = 2 + fibo(2) = 2 + fibo(1) + fibo(0) = fibo(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 ); }
21
Tracing Fibonacci fibo (4) = ? F(4) 2+1=3 1+0=1 1+1=2 F(2) F(1) F(0)
1+0=1 1 F(1) F(2) F(1) F(0) 1
22
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 );
23
Tracing Towers of Hanoi
towers(3, A, C, B) = ?
24
Tugas Rumah : TRACING towers(4, A, C, B) = ? fibo(6) = ?
factorial(5)=? mult(3,5)=?
25
Minggu Ketiga
26
Array dan Struct Review struktur data dasar Contoh analisa program
27
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
28
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.
29
STRUCT Tipe data turunan. Contoh deklarasi : struct { int jari_jari;
float luas; float keliling; } lingkaran;
30
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
31
Contoh program Program tentang lingkaran. Algoritma :
Inventarisasi atribut-atribut yang dimiliki oleh sebuah objek lingkaran. Akses masing-masing elemen dengan memakai operator tanda titik (.).
32
ARRAY OF STRUCT Struktur data berupa array yang setiap elemennya bertipe struct. Contoh deklarasi : struct { int NPM; char nama[30]; float IPK; } mhs[100];
33
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
34
Contoh Program Program data mahasiswa. Program tabel fungsi kuadrat.
35
Minggu Keempat
36
Sorting Tujuan : memahami proses tracing algoritma pengurutan.
Beberapa jenis algoritma sorting : Bubble sort Selection sort Insertion sort
37
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; }
38
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; }
39
Minggu Kelima
40
Kuis kecil void urutkan ( int X [ ], int n ) { int temp, i, j; i=0;
while(i<n-1){ for ( j = 0; j < n-i-1; j++){ temp = X[j+1]; if ( X[j] < X[j+1] ) { X[j+1] = X[j]; X[j] = temp; } i++;
41
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;
42
Tugas : Algoritma dan contoh sortingnya : Quick Sort Merge Sort
Shell Sort
43
Minggu Keenam
44
Searching Tujuan : memahami algoritma pencarian.
Jenis algoritma searching : Sequential search Indexed sequential search Binary search
45
Sequential Search int SequentialSearch(int key, int data[], int n) {
int i; for (i = 0; i < n; i++) if (key == data[i]) return (i); return (-1); }
46
Indexed Sequential Search
int IndexSequential( 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 hilim = pindex[i] – 1; for ( j = lowlim; j <= hilim && k[ j ] != key; j++ ); if ( j > hilim ) return (-1); return ( j ); }
47
Latihan tracing
48
Binary Search int BinarySearch(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);
49
Latihan tracing
50
Minggu Ketujuh
51
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
52
#include “stdio.h” void main() { int data, *pointer_data; data = 100; pointer_data = &data; printf(“Data = %d di alamat %p\n”, data, pointer_data); }
53
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)); }
54
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); }
55
Minggu Kedelapan Ujian Tengah Semester
56
Minggu Kesembilan
57
(Single) Linked List Definisi linked list Operasi dasar Contoh program
58
Ilustrasi Singly Linked List
Data 1 Next node Data 2 Data 3 Data 4 NO NEXT
59
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?
60
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.
61
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).
62
Linked List Sederhana Deklarasi struktur data :
typedef struct simpul { char nama[20]; float nilai; struct simpul *next_simpul; } simpulku;
63
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;
64
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
65
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
66
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
67
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)
68
Contoh Program Linked List
#include "stdio.h" #include "stdlib.h" #include "conio.h" struct node{ int info; struct node *next; }; typedef struct node *simpul;
69
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);
70
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;
71
Show All Node case 2: temp = head; while(temp!=NULL) {
printf("%i ", temp->info); temp = temp->next; } printf("\n"); break;
72
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;
73
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…
74
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;
75
Capture Program
76
Minggu Kesepuluh
77
Macam-macam List Singly linked list Doubly linked list
Singly circular linked list Doubly circular linked list
78
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
79
Circular Linked List
80
Minggu Kesebelas
81
Stack Definisi Stack Operasi-operasi dasar Stack
Push Pop Contoh program operasi dasar Stack menggunakan array
82
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.
83
Last In First Out
84
Penggunan Stack History pada web browser. Undo Log pada text editor.
Pemrosesan struktur bersarang (nested) : loop, rekursi, fungsi, dll. Algoritma back tracking – Artificial Intelegence
85
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)
86
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
87
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
88
Deklarasi Fungsi-Fungsi Stack
void initialize ( stack *s) void pop ( stack *s, char *x ) void push ( stack *s, char x ) void show ( stack *s )
89
Fungsi Initialize void initialize ( stack *s)
// operasi initialize dg parameter // s bertipe pointer stack { s -> top = -1; // top = -1 stack dlm kondisi empty }
90
Fungsi Push void push ( stack *s, char x ) {
if (s->top >= (maxsize-1)) //stack is full printf("\nERROR: the stack is full!"); else { s->top = s->top + 1; s->items [ s->top ] = x; printf("\nPUSH SUCCEED"); }
91
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"); }
92
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"); }
93
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); }
94
Output Program
95
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?
96
Push Operation
97
Pop Operation
98
Minggu Keduabelas
99
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” );
100
Example Case Cek apakah string di bawah ini valid! (a+b)}
(h-(j-(k-[l-n])) {x+(y-[a+b])*c-[(d+e)]}
101
Evaluasi Postfix Postfix adalah bentuk persamaan matematika dimana operator ditulis setelah kedua operannya. Contoh : AB+ CDE*- FG/H+ Latihan : Ubah ke postfix ((A+B)*C – (D – E))^(F+G)
102
Algoritma Infix Postfix
Tambahkan tanda kurung untuk mengelompokkan operasi. Keluarkan operator ke sebelah kanan tanda kurung untuk setiap kelompok satu per satu. Hilangkan semua tanda kurung.
103
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 ) )
104
Latihan : Jika A = 1, B = 2, C = 3, hitunglah : AB+C– ABC+– AB*CD+^
105
Pengecekan Tanda Kurung
Aplikasi 1 : Pengecekan Tanda Kurung
106
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” )
107
Contoh Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n]))
{x+(y-[a+b])*c-[(d+e)]}
108
Konversi Infix ke Postfix
Aplikasi 2 : Konversi Infix ke Postfix
109
Ekspresi Aritmatika Ekspresi aritmatika umumnya ditulis dalam bentuk infix. Contoh : A+B A-C+B A+((B*C)/D) Komputer lebih mudah mengevaluasi ekspresi postfix, karena tidak perlu mengelompokkan subekspresi kedalam tanda kurung.
110
Infix, Postfix, dan Prefix
A*B AB* *AB A*(B+C) ABC+* *A+BC (A*B)+C AB*C+ +*ABC A+((B*C)/D) ABC*D/+ +A/*BCD (A^2+B^2)*(C-D) A2^B2^+CD-* *+^A2^B2-CD
111
Algoritma s = stack kosong while (seluruh infix belum dibaca)
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(TopOp stack adalah operator) POP stack dan tambahkan ke postfix POP stack else if symb adalah operator{ if stack kosong PUSH symb ke stack else{ TopOp =baca data di TOP stack if(symb>TopOp) else if TopOp adalah ‘(‘, ‘{‘, ‘[‘ else { POP stack dan tambahkan pada postfix } if stack tidak kosong
112
Aplikasi 3 : EVALUASI POSTFIX
113
Algoritma s = stack kosong while(seluruh string belum dibaca)
{ baca simbol selanjutnya (symb) if symb adalah angka PUSH symb if symb adalah operator OpKanan = POP stack OpKiri = POP stack hitung hasil PUSH hasil } POP stack untuk memperoleh hasil akhir
114
Minggu Ketigabelas
115
Queue Definisi Queue Operasi-operasi dasar Queue
Insert/ enqueue Remove/ dequeue Contoh program operasi dasar Queue menggunakan array
116
Queue Sequence of items.
Items dimasukkan dari ujung belakang, dikeluarkan dari ujung depan. Bersifat FIFO (First In First Out).
117
Jenis Queue Normal queue. Circular queue. DE-queue (double ended).
Ex. High and low priority policy Priority queue.
118
Penggunaan Queue Waiting list – birokrasi. Simulasi sistem antrian.
Antrian printer jobs. Antrian proses multitasking dalam CPU. Antrian playlist winamp.
119
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.
120
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;
121
Initialize void initialize ( queue *q ) { q -> jumlah = 0;
q -> depan = 0; q -> belakang = 0; }
122
Is_Empty int Is_Empty ( queue *q ) { if (q -> jumlah == 0)
return (1); else return (0); }
123
Is_Full int Is_Full ( queue *q ) { if (q -> jumlah == maxsize)
return (1); else return (0); }
124
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); }
125
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); }
126
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
127
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);
128
Output
129
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?
130
Enqueue Operation
131
Dequeue Operation
132
Minggu Keempatbelas Graph
133
Macam struktur data LINIER HIRARKI KOMPLEK
Elemen data tersusun secara berurutan. Contoh : stack dan queue HIRARKI Elemen data tersusun secara bertingkat. Contoh : tree KOMPLEK Elemen data tersusun secara kombinasional. Contoh : graph
134
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.
135
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
136
Contoh Struktur Data # define MAXNODES 50 struct node{
/* informasi sebuah node */ }; Struct arc{ int adj; /* informasi sebuah arc */ Struct graph{ struct node nodes[MAXNODES]; struct arc arcs[MAXNODES][MAXNODES]; Struct graph g;
139
DFS Pencarian dilakukan dari node awal (root) lalu ke simpul anak hingga yang paling akhir (leaf) Jika tujuan yang diinginkan belum tercapai maka pencarian dilanjutkan ke cabang sebelumnya
140
BFS Pencarian dilakukan dengan mengunjungi setiap node pada level yang sama sampai mencapai tujuan atau sampai node terakhir
141
Minggu Kelimabelas Presentasi Tree
142
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
143
Struktur Data #define NUMNODES 500 Struct nodetype{ int info;
int left; int right; int father; }; Struct nodetype node[NUMNODES]; struct nodetype *left; struct nodetype *right; struct nodetype *father; Struct nodetype *NODEPTR;
145
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
148
Binary Tree Search p = tree; while ( p != null && key != pinfo)
if (key < pinfo) p = pleft; else p = pright; return (p);
149
Minggu Keenambelas Ujian Akhir Semester
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.