algoritma dan struktur data - E-learning UPN JATIM

advertisement
STRUKTUR DATA
:: Nur Cahyo Wibowo, S.Kom, M.Kom ::
Program Studi Sistem Informasi
UPN “Veteran” Jawa Timur
Tentang Saya









S1 Teknik Informatika ITS 1998 – 2003
S2 Teknik Informatika di ITS 2006 – 2009
HP 081 230 544 039
Rumah : Jl. Medayu Utara IV/57A, Medokan Ayu,
Rungkut
Blog: http://bluejundi.wordpress.com
http://coding-n-inspiring.blogspot.com
Email :
[email protected] atau
[email protected]
FACE BOOK : NUR CAHYO WIBOWO
MK : BP, RPL, Kommas, 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
1.
2.
3.
4.
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
: 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).
SURVEY DIKTI 2006

FAKTOR PENENTU KEBERHASILAN
MAHASISWA:
• SOFTSKILL
• NETWORKING
• HARDSKILL
• FINANSIAL
:
:
:
:
40
30
20
10
%
%
%
%
Wise Words


Every man suffers pain.
Either the pain of hard work, or the
pain of regret.
MATERI KULIAH








Fungsi Rekursi
Review : Array, Class, Object
Sorting
Searching
Linked List
Stack
Queue
Pengantar Graph dan Tree
Satuan Acara Perkuliahan
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Pengantar + Fungsi Rekursi 1
Fungsi Rekursi 2
Review Array
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
Buku Referensi





Richard Wiener, 2001. Fundamentals of
OOP and Data Structures in Java,
Cambridge University Press.
Robert Lafore, 1998. Data Structures
and Algorithms in Java, Sams Publishing.
Text book lain
Internet  www.google.com
File E-books 
http://elearning.upnjatim.ac.id
What is programming?


PROGRAM = ALGORITMA + STRUKTUR
DATA
ALGORITMA :
• SEQUENTIAL
• BRANCHING
• LOOPING/ REKURSI

STRUKTUR DATA :
• ARRAY
• CLASS
• 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

A
Fungsi biasa dipanggil oleh fungsi
lain. Sedangkan fungsi rekursif
dipanggil oleh dirinya sendiri.
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
public class rekursi {
static void rekursi( )
{
System.out.println("ini rekursif");
rekursi( ); //RECURSIVE CALL
}
public static void main(String[] args) {
rekursi( );
}
}
Faktorial
ALGORITMA
SOURCE CODE
n! = 1 if n == 0
n! = n * ( n – 1 )! if n > 0
4! = 4 x 3!
3! = 3 x 2!
2! = 2 x 1!
1! = 1 x 0!
0! = 1
int factorial ( int n )
{
int x, y;
if ( n == 0 )
return ( 1 );
x = n – 1;
y = factorial ( x );
return ( n * y );
}
Latihan tracing rekursi
Perkalian
ALGORITMA
SOURCE CODE
a * b = a if b == 1
a * b = a * ( b – 1 ) + a if b > 1
6x3=(6x2)+6
=(6x1)+6+6
=6+6+6
= 18
int mult ( int a, int b )
{
int c, d, sum;
if ( b == 1 ) return ( a );
c = b – 1;
d = mult ( a, c );
sum = d + a;
return ( sum );
}
Latihan tracing rekursi
Minggu Kedua
Fibonacci





The Fibonacci series fn≥0 is a famous
series defined by:
f0 :≡ 0, f1 :≡ 1, fn≥2 :≡ fn−1 +
fn−2
f 2 = f0 + f1 = 0 + 1 = 1
f 3 = f1 + f2 = 1 + 1 = 2
f4 = f2 + f3 = 1 + 2 = 3
f 5 = f3 + f4 = 2 + 3 = 5
Leonardo Fibonacci
 ….
1170-1250
Fibonacci
ALGORITMA
SOURCE CODE
fibo( n ) = n if n == 0 or n == 1
fibo( n ) = fibo( n – 2 ) + fibo( n – 1 ) if n
>= 2
int fibo ( int n )
{
int x, y;
if ( n <= 1 ) return ( n );
x = fibo ( n – 1);
y = fibo ( n – 2);
return ( x + y );
}
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
Tracing Fibonacci

fibo (4) = ?
F(4)
F(2)
F(0)
F(3)
F(1)
F(2)
F(1)
F(0)
F(1)
Towers of Hanoi
ALGORITMA
1. If n == 1, move the single disk from A to C and stop.
2. Move the top n – 1 disks from A to B, using C as auxiliary.
3. Move the remaining disk from A to C.
4. Move the n – 1 disks from B to C, using A as auxiliary.
SOURCE CODE
void towers( int n, char from, char to, char aux)
{
if ( n == 1 ) {
printf(“\nmove disk 1 from %c to %c”, from, to); return;
}
towers( n – 1, from, aux, to );
printf(“\nmove disk %d from %c to %c”, n, from, to);
towers( n – 1, aux, to, from );
}
Tracing Towers of Hanoi

towers(3, A, C, B) = ?
Tugas Rumah : TRACING


towers(4, A, C, B) = ?
fibo(6) = ?

http://coding-ninspiring.blogspot.com
Minggu Ketiga
ARRAY






Tipe data turunan.
Contoh deklarasi : int x[20];
SATU variabel untuk menyimpan
BANYAK data dengan TIPE data yang
SAMA. Mempunyai INDEKS.
3
2
1
7
Struktur data : 4
Alokasi memori bersifat statis/ tetap.
Konsep : string, array multidimensi
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 :
10
314.0
62.8

Konsep : struct of struct (nested
struct).
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 :
100
101
102
103
Abdullah
Budi
Candra
Daud
3.80
3.45
3.22
3.17
Untuk akses elemen dimulai dari
indeks array kemudian diikuti nama
elemennya  mhs[3].NPM = 1234;
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, 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;
}
}
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;
}
}
KUIS



PILIH : INSERTION, SELECTION
WAKTU 15 MENIT
TRACING UNTUK ARRAY X =
23, 20, 36, 18
Tugas RESUME:

Algoritma dan contoh sortingnya :
• Quick Sort : NPM 4-20
• Merge Sort : NPM 21 - 45
• Shell Sort : NPM 46 – 112





Tugas individu
Format .doc
Cantumkan sumber pustakanya
Di-upload ke e-learning
Max. Minggu 8/4 jam 12.00 WIB
Minggu Keenam
Searching


Tujuan : memahami proses tracing
algoritma pencarian.
Jenis algoritma searching :
• Sequential/ linier 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;
else
hilim = pindex[i]-1;
//set high limit
for (j = lowlim; j <= hilim && k[ j ] != key; j++); //search
if (j > hilim)
return (-1);
else
return ( j );
Tracing ISS key = 17.
Index size = 3.
I
0
1
2
LL
5
HL
7
J
5
6
7
8
(>7)
data
pindex kindex
2
5
5
9
8
23
2
3
5
6
8
9
11
14
23
27
Latihan tracing
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.
Latihan tracing key = 18
2
3
6
8
9
12
14
18
19
20
14
18
19
20
14
18
Quiz…



1.
2.
Kelompok A = [ 3, 4, 1, 2 ]
Kelompok B = [ 7, 9, 8, 6 ]
SOAL
Urutkan dengan SELECTION SORT
Lakukan BINARY SEARCH dgn key:
A. 3
B. 7
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
1.
2.
3.
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
Linked List

1.
2.
3.
4.
5.
6.
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
21.00 WIB.
Minggu Kesembilan
(Single) Linked List



Definisi linked list
Operasi dasar
Contoh program




Kumpulan elemen
Linier
Node/ simpul
Isi node:
• Info
• Pointer/ alamat simpul berikutnya

Dinamis
Kuis



1.
2.
3.
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]
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.
Ilustrasi Singly Linked List
Data 1
Data 1
Data 2
Next node
Data 2
Next node
Data 4
Data 4
NO NEXT
Data 3
Data 3
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…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()
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;
Alamat = 1080
Alamat = 2370
Amin
Budi
Citra
90
20
100
1080
2370
NULL
Alamat = 1000
simpul1
1000
simpul2
1080
simpul3
2370
Alamat = 1080
Alamat = 2370
Amin
Budi
Citra
90
20
100
1080
2370
NULL
Alamat = 1000
Pointer Tail
simpul1
1000
Pointer Head
Ilustrasi Inserting a Node
T
update
Alamat = 1080
Alamat = 2370
Amin
Budi
Citra
90
20
100
1080
8460
NULL
Alamat = 1000
Alamat = 8460
simpul1
1000
New
New->next = T->next
T->next = New
Dewi
98
2370
Ilustrasi Deleting a Node
P
T
update
Alamat = 1080
Alamat = 2370
Amin
Budi
Citra
90
20
100
2370
2370
NULL
Alamat = 1000
free()
simpul1
1000
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;
tail = 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");
}
else
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
Kuis



10 menit.
4 soal langsung jawab.
Soal:
1.
2.
3.
4.
Class node
Tambah belakang
Hapus depan
Tampil mundur
Singly and Doubly

A linked list node containing a single forward
pointer may be declared as follows
struct Node {
int
struct Node
};
data;
/* or whatever */
*next_in_line;
pointer to next
Node structure
 A linked list node containing a forward and a
backward pointer may be declared as follows
struct Node {
int
struct Node
struct Node
};
data;
*next_in_line;
*previous_in_line;
pointer to next
Node structure
pointer to previous
Node structure
Circular Linked List
Minggu Kesebelas
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.
Progress Report FP






Pekan 2
Peran.
Pekan 3
Pekan 4
Pekan 1
Pekan 2
Pekan 3
Juni : Pembagian Tugas/
Juni : Penentuan Ide Cerita.
Juni : Penyusunan Skenario.
Juli : Syuting.
Juli : Editting.
Juli : Dikumpulkan.
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
TOP
E
X
remove:
“POP”
insert ‘B’:
PUSH ‘B’
X
A
B
X
TOP
A
TOP
A
Y
O
W
W
R
R
R
T
T
T
T
P
P
P
K
K
K
K
K
D
D
D
D
D
D
D
D
D
D
a
b
c
d
e
f
g
h
i
j
Langkah Membuat Stack
1.
2.
3.
Membuat struktur data  class
Mendefinisikan atribut class.
Membuat fungsi/ operasi  method
1. Push
2. Pop.
4.
Membuat fungsi utama  main()
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
void
void
void
initialize ( stack *s)
pop ( stack *s, char *x )
push ( stack *s, char x )
show ( stack *s )
Fungsi Initialize
void initialize ( stack *s)
// operasi initialize dg parameter
// s 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;
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);
pop(my_stack, x); pop(my_stack, x);
show(my_stack);
}
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
Penggunaan Stack dalam
Pemrograman
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)]}
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” );
Example Case
1.
2.
3.
Cek apakah string di bawah ini
valid!
(a+b)}
(h-(j-(k-[l-n]))
{x+(y-[a+b])*c-[(d+e)]}  Valid
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+^
Algoritma Infix  Postfix
1.
2.
3.
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 ) )
SOAL POSTFIX :
Jika A = 4, B = 2, C = 3, hitunglah :
1. ABC+–ACB^*+
2. AB*CB+^AC+–
Minggu Ketigabelas
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.
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.
Dan antrian-antrian yang lain.
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);
enqueue('U', q); show_queue(q);
enqueue('E', q); show_queue(q);
dequeue(q,px); show_queue(q);
dequeue(q,px); show_queue(q);
dequeue(q,px); show_queue(q);
dequeue(q,px); 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. belajarmengajar 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
Kuis




20 menit.
2 sesi terpisah.
Open book.
Soal di slide berikutnya:
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.
STRUKTUR DATA NON LINIER

TUGAS KELOMPOK
• Membuat makalah berisi teori, contoh program/ pseudocode
dan analisa. Minimal 5 halaman kertas A4, margin 4-3-3-3,
spasi 1.5. Lengkapi dengan gambar ilustrasi.
• Cantumkan daftar pustakanya.
• Upload makalah maksimal tanggal 1 Juli 2012 ke e-learning.
ISI MAKALAH:

GRAPH
1. Teori dasar dan struktur datanya
2. Shortest path problem
3. Depth First Search
4. Breadth First Search

TREE
5. Teori dasar Tree dan Binary Tree dan struktur datanya
6. Traverse Pre-order
7. Traverse In-order
8. 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 :
• 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
Minggu Kelimabelas
Presentasi Tree
Pengenalan Tree

Tree nodes contain two or more links
• 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
Tree traversals

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
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
Download