Anda di halaman 1dari 37

STRUKTUR DATA

Komting: 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 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
/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,
OReilly, 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 masingmasing 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 Perkuliahan

Minggu
ke-

Topik Pokok Bahasan

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

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)

Stack:
Definisi Stack
Contoh implementasi stack
Struktur data stack
Operasi Push() dan Pop()

Satuan Acara Perkuliahan

Minggu
ke-

Topik Pokok Bahasan

Queue:
Definisi Queue
Contoh implementasi queue
Struktur data queue
Operasi Insert() dan Remove()
Studi kasus: parkir mobil, proses CPU

Implementasi Stack dan Queue dengan array di Ruby


Implementasi Stack dan Queue dengan linked list di Ruby

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

Contoh implementasi tree dalam Ruby

8
9

UTS
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

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


Numeric class
Ruby
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


String class
Ruby
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


Concat operator (+):
Ruby
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/ 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
Entry

Action 1

Action 2

Action 3

Exit

Branching
Entry

Condition 1
TRUE

FALSE

Action 1

Condition 2
FALSE

TRUE
Action 2

Action 3

Exit

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

Heres 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

Entry

Action 1

Action 2

Looping 1
Y

T
if 1

if 2

Looping 2

T
Action 3

Exit

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

Tipe Data Abstrak


(Abstract Data Type
ADT adalah model formal dari struktur data yang
menspesifikasikan:
ADT)
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
end
end

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 roll
end # akhir class Die
dice=Die.new;
puts dice.roll
]

Next Week
Struktur data linked list dan implementasinya
dalam Ruby

TERIMA KASIH

Anda mungkin juga menyukai