STRUKTUR DATA
Komting: ADITYA 08785523198 (E), SIGIT 085645119007
Tentang Mata Kuliah ini
•
ISI3002 – Struktur Data
•
3 SKS: 3 x 50 menit = 2 jam 30 menit
•
Prasyarat: tidak ada
•
Nilai kelulusan: C
•
Materi kuliah:
http://elearning.upnjatim.ac.id
Tujuan Mata Kuliah
Mahasiswa dapat menjelaskan:
1.
Struktur data komputer dan pengaruhnya terhadap
program
2.
Algoritma dan struktur data fundamental
3.
Pemilihan penggunaan struktur data dan algoritma yang
tepat untuk menyelesaikan masalah standar
4.
Implementasi algoritma dan struktur data yang berorientasi
objek
Referensi
[1] Bruno R. Preiss, B.A.Sc., M.A.Sc. Ph.D., P.Eng., Data Structures and
Algorithms with Object-Oriented Design Patterns in Ruby, 2004.
[Online]
http://www.brpreiss.com/books/opus 8/index.html
[2] Dave Thomas, Chad Fowler, Andy Hunt, Programming Ruby: The
Pragmatic Programmers’ Guide (2nd
edition), 2004.
[3] David Flanagan, Yukihiro
Matsumoto, The Ruby Programming
Language, O’Reilly, 2008
!!! No [2] dan [3] tersedia di e-learning dalam bentuk e-book
KONTRAK KULIAH
•
Toleransi keterlambatan 30 menit berlaku bagi dosen
dan mahasiswa
•
Pakaian SOPAN, berkerah, bebas rapi dan bersepatu.
•
Tugas dikumpulkan sesuai deadline masing-masing
tugas. Keterlambatan pengumpulan : minus 10% dari
nilai (per hari keterlambatan)
•
NILAI :
NTS terdiri dari:
Absensi : 10% Tugas : 40%
UTS : 50%
NAS terdiri dari:
Absensi : 10% Tugas : 30% Final Project : 30%
MATERI KULIAH
•
Review materi AlPro
•
Sorting
•
Searching
•
Linked List
•
Stack
•
Queue
Satuan Acara Perkuliahan
Minggu ke- Topik Pokok Bahasan
1 Pendahuluan :
• Kontrak Perkuliahan
• Pengenalan algoritma dan struktur data:
• Review konsep variable, Tipe data, dan pengendali program, fungsi & prosedur, array • Pengenalan konsep struktur data dan tipe data abstrak
• Pengenalan konsep pemrograman object oriented
2 Single Linked List :
• Linked List sebagai array yang dinamis • Struktur data Linked List
• Operasi Insert new Node • Operasi Search Node • Operasi Delete Node
Implementasi Single Linked List dalam Ruby: • Elemen List
• Class LinkedList
• Methods (initialize, purge, first, last, prepend, append, clone, extract, insertAfter, insertBefore)
3 Stack:
• Definisi Stack
• Contoh implementasi stack • Struktur data stack
• Operasi Push() dan Pop()
Satuan Acara Perkuliahan
Minggu ke- Topik Pokok Bahasan 4 Queue:
• Definisi Queue
• Contoh implementasi queue • Struktur data queue
• Operasi Insert() dan Remove()
• Studi kasus: parkir mobil, proses CPU
5 Implementasi Stack dan Queue dengan array di Ruby Implementasi Stack dan Queue dengan linked list di Ruby
6 Tree:Definisi Tree
N-ary tree Binary Tree
Tree traversal: Depth First Traversal (In order, Pre order, Post order), Breadth First Traversal Contoh implementasi tree dalam Ruby
7 Contoh implementasi tree dalam Ruby
8 UTS
9 Searching :
• Sequential search • Binary Search Search Trees:
• Binary Search Tree • AVL Search Tree
Satuan Acara Perkuliahan
Minggu ke- Topik Pokok Bahasan
10 Sorting:
• Bubble sort • Selection sort • Insertion sort
• Quick sort, Merge sort, shell sort (dipelajari secara mandiri)
11 Contoh implementasi sorting dan searching dalam Ruby
12 Graph:
• Definisi Graph
• Contoh implementasi graph • Struktur data graph
• Graph Traversing: Depth First, Breadth First • Shortest Path and Minimum Spanning Trees
13 Demo final project
What is programming?
•
PROGRAM = ALGORITMA + STRUKTUR DATA
•
ALGORITMA :
•
SEQUENTIAL
•
BRANCHING
•
LOOPING/ REKURSI
•
STRUKTUR DATA :
•
ARRAY
•
LINKED LIST
Review Materi AlPro
•
Variabel dan tipe data
•
Kontrol Alur
•
Fungsi/Method
•
Array
Variabel dan tipe data Ruby
•
Numeric class
• Integer • Fixnum • Bignum • Float• Complex (standard library)
• BigDecimal (standard library)
• Rational (standard library)
• Contoh operasi aritmetika pada number:
• x=5/2
• y=5.0/2
• z=5/2.0
Variabel dan tipe data Ruby
•
String class
• Single-quoted string literals:
• S=‘Ini string sederhana dalam Ruby’
• Double-quoted string literals:
• Lebih fleksibel
• S="360 degrees=#{2*Math::PI} radians“
output: S="360 degrees=6.283185307179586 radians”
• String.new membuat tipe data string baru dan kosong (empty string)
• Append operator (<<): greeting=“Hello”
greeting<<“ “<<“World” puts greeting
Variabel dan tipe data Ruby
• Concat operator (+): planet=“Earth”
“Hello”+” “+planet
• Array class
• Array di Ruby tidak memiliki tipe dan resizable
• Contoh:
• [1, 2, 3]
• [[1,2],[3,4],[5]]
• empty=Array.new
• zeros=Array.new(4,0)
• count=Array.new(3) {|i| i+1}
Variabel dan tipe data Ruby
•
Object class
• Ruby adalah bahasa pemrograman berorientasi objek all values are objects
• Semua objek diturunkan dari class Object.
• Untuk mengetahui class dari object, gunakan perintah .class
• Contoh: o=“test”
CONTROL STRUCTURES
• SEQUENTIAL/ URUTAN
Program dijalankan mulai dari perintah
paling atas/ awal sampai paling akhir
secara berurutan/ sekuensial.
• BRANCHING/ PERCABANGAN
Penyeleksian kondisi (TRUE/ FALSE) untuk
menentukan statemen selanjutnya
• LOOPING/ PERULANGAN
Mengulangi proses selama syarat/ kondisi
tertentu masih terpenuhi
Sequential/Urutan
Action 1 Action 2 Action 3 Entry ExitBranching
Entry Condition 1 Action 1 Condition 2 Action 3 Action 2 Exit TRUE FALSE TRUE FALSEIF - ELSE
•
Biasa digunakan untuk seleksi nilai/ data
•
Kondisi jamak ((kondisi_1) &&/ || (kondisi_2))
•
if (kondisi=TRUE) jalankan_statement_ini
•
if (kondisi=TRUE) statement_1
else statement_2
// if kondisi=FALSE
•
if (kondisi=TRUE) statement_1
else if (kondisi=TRUE) statement_2
else statement_3
// if kondisi=FALSE
•
if (kondisi=TRUE)
If - else
• If syntax • if var == 10 print “Variable is 10″ end • If Else Syntax • if var == 10 print “Variable is 10″ elseprint “Variable is something else” end
• If Else If Syntax
• Here’s the key difference between Ruby and most other languages. Note that “else if” is actually spelled “elsif” without the e.
• if var == 10
print “Variable is 10″ elsif var == “20″
print “Variable is 20″ else
print “Variable is something else” end
SWITCH - CASE
•
Biasa digunakan untuk membuat menu dalam program
switch (variabel_pilihan) {
case nilai_1 : statemen_1; break;
case nilai_2 : statemen_2; break;
case nilai_3 : statemen_3; break;
…
default: statemen_default;
}
Switch case
Switch Case syntax
[variable = ] case
when bool_condition
statements
when bool_condition
statements
else # the else clause is optional\
statements
Looping
Action 1 Action 2 Action 3 Entry Exit if 1 if 2 Looping 1 Looping 2 Y Y T TLooping dengan “while”
x=10 #initialize a loop counter variable
while x>= 0 do #Loop while x is greater than/equal to 0 puts x #Print out the value of x
x=x-1 #Subtract 1 from x end #The loop ends here
Looping dengan “until”
#Count back up to 10 x=0 until x>10 do puts x x=x+1 endLooping dengan “for in”
array=[1,2,3,4,5]
for element in array
puts element
Function or Method
•
Sekelompok blok kode yang memiliki parameter dan
berasosiasi dengan 1 atau lebih objek
•
Contoh method:
# Define a method named 'factorial' with a single # parameter 'n'
def factorial(n)
if n < 1 # Test the argument value for validity raise "argument must be > 0"
elsif n == 1 # If the argument is 1
1 # then the value of the method invocation is 1 else # Otherwise, the factorial of n is n times
n * factorial(n-1) # the factorial of n-1 end
Method with return value
def factorial(n)
raise "bad argument" if n < 1
return 1 if n == 1
n * factorial(n-1)
end
Method with more than 1 return values
#Convert the Cartesian point (x,y) to#polar (magnitude, angle) coordinates def polar(x,y)
return Math.hypot(y,x), Math.atan2(y,x) end
Contoh lain:
# Convert polar coordinates to Cartesian coordinates def cartesian(magnitude, angle)
[magnitude*Math.cos(angle), magnitude*Math.sin(angle)] end
Cara pemanggilan method:
distance,theta=polar(x,y)
Tipe Data Abstrak (Abstract
Data Type – ADT)
•
ADT adalah model formal dari struktur data yang
menspesifikasikan:
• Tipe data yang disimpan
• Operasi yang dapat dilakukan
• Tipe parameter dari operasi tersebut
•
ADT menspesifikasikan operasi apa yang dapat dilakukan,
bukan bagaimana melakukan operasi tersebut
ADT
• Objek pada Ruby adalah sebuah abstraksi.
• Tingkat abstraksi meliputi: atribut (nama, alamat, nilai, masa hidup, cakupan, tipe, dan ukuran)
• Contoh ADT: Fixnum
• Jika kita membuat objek, x, bertipe Fixnum, kita tahu bahwa x dapat merepresentasikan integer dalam range [-231, 231-1] dan
kita dapat melakukan operasi penambahan, pengurangan, perkalian, dan pembagian
• Kita tidak perlu tahu bagaimana cara yang dilakukan Fixnum untuk melakukan operasi tersebut, hanya perlu tahu operasi apa yg ada pada Fixnum
Cakupan ADT
•
Struktur linier:
•
Stack
•
Queue
•
Deque
•
List
•
Tree
•
Heap
•
Priority Queue
•
Hash-table
•
Set
•
String
•
Graph
Hirarki class di Ruby
Hirarki class
• Dua jenis class dalam Ruby: Abstract dan Concrete
• Abstract class:
• Class yg mendefinisikan sebagian dari implementasinya
• Kita tidak dapat membuat objek dari abstract class
• Digunakan sebagai base class darimana sebuah class diturunkan
• Class turunan meng-override abstract methods
• Concrete Class:
• Kita dapat membuat objek dari concrete class dengan .new method