STRUKTUR DATA :: Nur Cahyo W ::.

Slides:



Advertisements
Presentasi serupa
WE-2010 Web Engineering Husni husni.trunojoyo.ac.id
Advertisements

Algoritma & Pemrograman #10
Mata Kuliah : ALGORITMA dan STRUKTUR DATA 1.
File Handling.
Pertemuan 1 Rekursi jual [Valdo] Lunatik Chubby Stylus.
Double Linked List.
Queue (Antrian).
PERULANGANPERULANGAN. 2 Flow of Control Flow of Control refers to the order that the computer processes the statements in a program. –Sequentially; baris.
1 IKI20210 Pengantar Organisasi Komputer Kuliah No. 18: I/O, Interupsi 15 November 2002 Bobby Nazief Johny Moningka
Introduction to The Design & Analysis of Algorithms
PENGENALAN PL/SQL.
PROSES PADA WINDOWS Pratikum SO. Introduksi Proses 1.Program yang sedang dalam keadaan dieksekusi. 2.Unit kerja terkecil yang secara individu memiliki.
Review Operasi Matriks
Internal dan Eksternal Sorting
DEPARTEMEN ILMU KOMPUTER FMIPA IPB 2011 Praktikum Bahasa Pemrograman.
Interface Nur Hayatin, S.ST Jurusan Teknik Informatika Universitas Muhammadiyah Malang Sem Genap 2010.
Bilqis1 Pertemuan bilqis2 Sequences and Summations Deret (urutan) dan Penjumlahan.
JAVA CLASS Bahasa Pemrogramam BAHASA PEMROGRAMAN PERTEMUAN #9.
LINKED LIST.
Implementing an REA Model in a Relational Database
MEMORY Bhakti Yudho Suprapto,MT. berfungsi untuk memuat program dan juga sebagai tempat untuk menampung hasil proses bersifat volatile yang berarti bahwa.
STRUKTUR DATA :: Nur Cahyo Wibowo, S.Kom, M.Kom ::
Array
TRAVERSING BINARY TREE
PEMROGRAMAN PPBD (UAS) SEBELUM MELANGKAH KE TAHAP SELANJUTNYA BERDOA DULU BIAR LANCAR DAN GA EROR
Linked List dan Double Linked List
Struktur Data Queue Sandy dan Erick.
Linked List Pembuatan Simpul Awal.
Algoritma dan Struktur Data Menggunakan Java
© 2009 Fakultas Teknologi Informasi Universitas Budi Luhur Jl. Ciledug Raya Petukangan Utara Jakarta Selatan Website:
Algoritma dan Struktur Data
Double Linked List. © 2005 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved. Double Linked List Sama seperti single linked list, double.
Red -BlackTrees Evaliata Br Sembiring.
Web Teknologi I (MKB511C) Minggu 12 Page 1 MINGGU 12 Web Teknologi I (MKB511C) Pokok Bahasan: – Text processing perl-compatible regular expression/PCRE.
:: Fetty Tri Anggraeny ::
Implementasi Binary Tree
Queue.
Quiz struktur data Genap 2013.
STRUKTUR DATA Komting: ADITYA (E), SIGIT
STACK (TUMPUKAN).
Stack (Tumpukan) Sumber Kepustakaan : putuputraastawa.files.wordpress.com/.../pert_5_sta...
Algoritma dan Struktur Data
STACK (Tumpukan).
STACK.
Struktur Data (Data Structure) – IS 2313
QUEUE (antrian).
STRUKTUR DATA (4) Array Stack(Tumpukkan) dan Queue (Antrian)
Struktur Data Stack.
BY YOHANA N Sumber Kepustakaan : yohananugraheni.files.wordpress.com/.../linked- lis... 1 LINKED LIST.
LINKED LIST by Yohana N.
Struktur Data List Linear : Linked List (Double Linkedlist)
Algorithm and Data Structures.
Algoritma dan Struktur Data
STRUKTUR DATA (4) array stack dan queue
Struktur Data List Linear : Linked List (Single Linkedlist)
Pertemuan 13 Graph + Tree jual [Valdo] Lunatik Chubby Stylus.
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Apakah Stack itu ?. Apakah Stack itu ? Pengertian STACK Secara sederhana diartikan dengan : sebagai tumpukan dari benda sekumpulan data yang seolah-olah.
Pertemuan 7 stack jual [Valdo] Lunatik Chubby Stylus.
Algoritma dan Struktur Data
Universitas Budi Luhur
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Struktur Data Ikhwan Rustanto,S.Kom Program Studi Sistem Informasi
STACK 6.3 & 7.3 NESTED LOOP.
STACK (Tumpukan).
STACK (Tumpukan).
Algoritme dan Stuktur Data
Linked List 6.3 & 7.3 NESTED LOOP.
Struktur Data Linear Created by Fifth Group, S3B TI Anggota
Review Struktur Data Nisa’ul Hafidhoh, MT.
Transcript presentasi:

STRUKTUR DATA :: Nur Cahyo W ::

Tentang Saya Nur Cahyo Wibowo, S.Kom, M.Kom S1 Teknik Informatika ITS 1998 – 2003 S2 Teknik Informatika di ITS 2006 – 2009 HP 081 230 544 039 Rumah kontrakan : Griya Pesona Asri E-21 Medokan Ayu, Rungkut Blog: http://bluejundi.wordpress.com Email : bluejundi@staffs.upnjatim.ac.id atau bluejundi@yahoo.com FACE BOOK : NUR CAHYO WIBOWO MK : BP 1, BP 2, Sistem Digital, dll

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

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.

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 : 20 % Final Project (Tim) : 20 % 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).

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

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

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 Pengantar Graph dan Tree Demo Final Project – Video Bahan Ajar Struktur Data UAS

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

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

MINGGU PERTAMA

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

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

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

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

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

Latihan tracing rekursi

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 ) + 6 + 6 = 6 + 6 + 6 = 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 ); }

Latihan tracing rekursi

Minggu Kedua

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 = 0 + 1 = 1 f3 = f1 + f2 = 1 + 1 = 2 f4 = f2 + f3 = 1 + 2 = 3 f5 = f3 + f4 = 2 + 3 = 5 …. Leonardo Fibonacci 1170-1250

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 ) = 0 + 1 + fibo( 1 ) + fibo( 2 ) = 0 + 1 + 1 + fibo( 0 ) + fibo( 1 ) = 0 + 1 + 1 + 0 + 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 fibo (4) = ? F(4) F(2) F(3) F(2) F(0) F(1) F(1) F(0)

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

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

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

Minggu Ketiga

Array dan Struct Review struktur data dasar Contoh analisa program

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

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.

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

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

Contoh program Program tentang lingkaran. Algoritma : 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. Contoh deklarasi : struct { int NPM; char nama[30]; float IPK; } mhs[100];

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

Contoh Program Program data mahasiswa. Program tabel fungsi kuadrat.

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

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.

Minggu Keempat

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

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

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 RESUME: Algoritma dan contoh sortingnya : Tugas individu Quick Sort : Urut absen 1-12 Merge Sort : 13 - 24 Shell Sort : 25 – 37 Tugas individu Dikumpulkan lewat elearning Max. selasa 15/4 jam 18.30

Minggu Keenam

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

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

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

Latihan tracing

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

Latihan tracing

Minggu Ketujuh POINTER

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

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

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

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

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.

Minggu Kedelapan Ujian Tengah Semester

Minggu Kesembilan

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

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

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?

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 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 Deklarasi struktur data : typedef struct simpul { char nama[20]; float nilai; struct simpul *next_simpul; } simpulku;

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;

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

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

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

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)

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("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);

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;

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("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;

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("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;

Capture Program

Minggu Kesepuluh

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

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

Circular Linked List

Minggu Kesebelas

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

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.

Last In First Out

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

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)

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

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 initialize ( stack *s) void pop ( stack *s, char *x ) void push ( stack *s, char x ) void show ( stack *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 > maxsize) // stack is full printf("\nERROR: the stack is full!"); else { s->top = s->top + 1; s->items [ s->top ] = x; printf("\nPUSH SUCCEED"); }

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

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

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

Output Program

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?

Push Operation

Pop Operation

Minggu Keduabelas

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” );

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

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)

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.

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

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

Minggu Ketigabelas

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

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

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

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

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.

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 -> depan = 0; q -> belakang = 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) return (1); else return (0); }

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

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

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

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

Output

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?

Enqueue Operation

Dequeue Operation

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.

Minggu Keempatbelas Presentasi Graph

STRUKTUR DATA NON LINIER TUGAS KELOMPOK Membuat makalah berisi teori, contoh program/ pseudocode dan analisa. Minimal 5 halaman kertas A4, margin 3-3-3-3, spasi single. 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. GRAPH Basic theorema and program Shortest path problem Depth First Search Breadth First Search TREE Binary Tree and program Traverse Pre-order Traverse In-order Traverse Post-order

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.

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

Topik Tugas Presentasi

Minggu Kelimabelas Presentasi Tree

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

Topik Tugas Presentasi

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

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

Minggu Keenambelas Ujian Akhir Semester