Struktur Data Pertemuan 1

37
STRUKTUR DATA Komting: ADITYA 08785523198 (E), SIGIT 085645119007 :: Fetty Tri Anggraeny ::

description

Matakuliah Struktur Data

Transcript of Struktur Data Pertemuan 1

STRUKTUR DATAKomting: ADITYA 08785523198 (E), SIGIT 085645119007

:: Fetty Tri Anggraeny ::

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

Struktur Data

Tujuan Mata Kuliah

Mahasiswa dapat menjelaskan:1.Struktur data komputer dan pengaruhnya terhadap program2.Algoritma dan struktur data fundamental3.Pemilihan penggunaan struktur data dan algoritma yang tepat untuk menyelesaikan masalah standar4.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/opus8/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% UAS : 30%

MATERI KULIAH• Review materi AlPro• Sorting• Searching • Linked List• Stack• Queue• Graph dan Tree

Satuan Acara PerkuliahanMinggu 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 NodeImplementasi 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()•Studi kasus: cek kurung, palindrome, evaluasi infix

Satuan Acara PerkuliahanMinggu 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 RubyImplementasi Stack dan Queue dengan linked list di Ruby

6 Tree:Definisi TreeN-ary treeBinary TreeTree traversal: Depth First Traversal (In order, Pre order, Post order), Breadth First TraversalContoh 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 PerkuliahanMinggu 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

14 UAS

What is programming?• PROGRAM = ALGORITMA + STRUKTUR DATA• ALGORITMA :

• SEQUENTIAL• BRANCHING• LOOPING/ REKURSI

• STRUKTUR DATA :• ARRAY• LINKED LIST

• ADT : STACK, QUEUE, GRAPH, TREE, DLL

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• x=5%2

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}

• More on Array in resource [3] chapter 9.5.2

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”

o.class #returns an object with String class

CONTROL STRUCTURES

• SEQUENTIAL/ URUTANProgram dijalankan mulai dari perintah paling atas/ awal sampai paling akhir secara berurutan/ sekuensial.

• BRANCHING/ PERCABANGANPenyeleksian kondisi (TRUE/ FALSE) untuk menentukan statemen selanjutnya

• LOOPING/ PERULANGANMengulangi proses selama syarat/ kondisi tertentu masih terpenuhi

Sequential/Urutan

Action 1

Action 2

Action 3

Entry

Exit

BranchingEntry

Condition 1

Action 1Condition 2

Action 3Action 2

Exit

TRUE FALSE

TRUE FALSE

IF - 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_2else statement_3 // if kondisi=FALSE

• if (kondisi=TRUE)if (kondisi=TRUE) nested_statement

If - else• If syntax

• if var == 10     print “Variable is 10″end

• If Else Syntax• if var == 10   print “Variable is 10″else   print “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;

}

• Bisa berbentuk nested/ bersarang

Switch case

Switch Case syntax

[variable = ] case

when bool_condition

statements

when bool_condition

statements

else # the else clause is optional\

statements

end

Looping

Action 1

Action 2

Action 3

Entry

Exit

if 1 if 2

Looping 1

Looping 2

Y

Y

T

T

Looping 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

end

Looping dengan “for in”array=[1,2,3,4,5]

for element in array

puts element

end

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

end

Method with return valuedef 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)x,y=cartesian(distance,theta)

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

Larger Image

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

Contoh abstract class

class Animal def initialize end def move endend

class Cheetah < Animal def initialize @type = :Cheetah end def move "Running!" end end

puts Cheetah.new.move # => "Running!"

Contoh concrete class

class Die def roll 1+rand(6); end # akhir method rollend # akhir class Die

dice=Die.new;puts dice.roll ]

Next Week• Struktur data linked list dan implementasinya dalam Ruby

TERIMA KASIH