algoritma struktur data...materi pengantar struktur data abstract data type (adt) rekursif :...

53
Algoritma Struktur Data 3 sks By. Sri Rezeki Candra Nursari

Upload: others

Post on 31-May-2020

31 views

Category:

Documents


3 download

TRANSCRIPT

Algoritma Struktur Data3 sks

By. Sri Rezeki Candra Nursari

MateriMateriPengantar Struktur Data

Abstract Data Type (ADT)

Rekursif : Fibonacci

Sorting (Selection, Insertion, Bubble, Shell, Merge, Quick)

Struktur Data Linier (Linked List, Stack, Queu)

Struktur Data Hirarki (Tree, Graph, Hash Tables)

Search (Sequential, Fibonacci, Interpolation, Binary)

Literatur :1. H.M Deitel, P.J Deitel, Small Java How to Program-sixth

Edition, Pearson Prentice Hall, 20052. Elliot B. Koffman, Paul A.T. Wolfgang, Objects, Abstraction,

Data Structures and Design Using Java, John Wiley & Sons.Inc, 2005

3. Mark Allen Weiss, Data Structures & Algorithm Analysis in Java, Addison-Wesley, 1999

4. Moh.Sjukani, Algoritma & Struktur Data dengan C, C++ dan Java, Mitra Wacana Media, Agustus 2005

5. Andri Kristanto, Struktur Data dengan C, Graha Ilmu, 20036. Bambang Wahyudi, Pengantar Struktur Data dan Algoritma,

Andi, 20047. Ema Utami, Struktur Data, Graha Ilmu, 20078. Yatini B, Indra, Pemrograman Terstruktur, J&J Learning

Yogyakarta, 20019. Wirth, Niklaus, Algorithmic + Data Structures Programs,

Prentice-Hall, 197610. Thompson Susabda Ngoen , Algoritma dan Struktur Data

Bahasa C, Mitra Wacana Media, 2009

ALGORITMA ALGORITMA STRUKTUR STRUKTUR DATADATA -- 33 sks sks

Linked List• Linked List (List Berkait) biasa juga disebut list• List termasuk kedalam himpuan dinamik, tetapi

berbeda dengan stack dan queue• Pada ada peraturan :

– Penyisipan elemen• Diawal• Ditengah• Diakhir

– Penghapusan elemen• Diawal• Ditengah• Diakhir

Linked List• List digunakan untuk menyimpan sekumpulan

data yang bertipe sama (berupa: bilangan, string)• Jumlah elemen list tidak terbatas, tetapi secara

fisik hanya dibatasi oleh jumlah memori yang tersedia

• Sebuah list akan mempunyau 2 bagian, yaitu bagian:– Head (Kepala)

• Yang terutama digunakan untuk menyimpan lamat elemen pertama atau elemen terakhir sebuah list

– Badan List yang berisi kumpulan elemen list

Linked List• Linked list merupakan Array Dinamis.

Variabel bertipe Array merupakan suatu tipe data yang bersifat statis dimana ukuran dan urutannya sudah pasti.

• Selain itu ruang memori yang dipakai olehnya tidak dapat dihapus bila variabel bertipe array tersebut sudah tidak digunakan lagi pada saat program dijalankan

Linked List• Linked list adalah sejumlah obyek yang di link atau

dihubungkan satu dengan yang lainnya sehingga membentuk suatu list

• Obyek adalah merupakan gabungan beberapa elemen data (variabel) yang dijadikan satu kelompok atau structureatau recordyang dibentuk dengan perintah struct

• Tiap-tiap elemen dapat memiliki tipe data tersendiri yang berbeda dengan tipe data lemen lain

• Untuk menghubungkan obyek satu dengan obyek lainnya, diperlukan paling tidak sebuah variabel yang bertipe pointer

• Variabel pointer tersebut merupakan salah satu variabel dalam struktur obyek

Linked List

• Struktur Linked List terbagi menjadi 4 macam, yaitu :1. Linear Single Linked List2. Linear Double Linked List3. Circular Single Linked List4. Circular Double Linked List

1. Linear Single Linked List• Merupakan linked list lurus dengan

pointer tunggal• Dalam struktur simpul hanya ada

satu elemen/field/variabel yang bertipe pointer yang isinya adalah alamat sim[ul berikutnya atau next node

1. Linear Single Linked List

• Ada 4 simpul no (1) s.d. (4)• Setiap simpul (record) terdiri dari dua elemen (field)

– Field INFObertipe integer untuk menyimpan nilai 22

– Field LINKbertipe pointer untuk menyimpan alamat simpul

• Simpul pertama no (1) ditunjuk oleh pointer FIRST• Smpul terakhir no (4) ditunjuk oleh pointer LAST

INFOFIRST LINK INFO LINK INFO LINK INFO LINK

LAST

22 28 66 63

1. Linear Single Linked List

• Prosesnya1. Inisialisasi, yaitu persiapan pembuatan

Linked List2. Membuat simpul awal3. Membuat simpul baru4. Menambahkannya (Insert) kedalam

linked list

22 28 66 63

INFOFIRST LINK INFO LINK INFO LINK INFO LINK

LAST

1. Linear Single Linked List

• Prosesnya1. Inisialisasi, yaitu persiapan pembuatan

Linked List

1. Linear Single Linked List

• Prosesnya2. Membuat simpul awal

1. Linear Single Linked List

• Prosesnya3. Membuat simpul Baru

1. Linear Single Linked List

• Prosesnya4. Menambahkannya (Insert) kedalam

linked list

Contoh : Linear Single Linked List (versi 1)

Contoh : Linear Single Linked List (versi 1)

Contoh : Linear Single Linked List (versi 1)

Contoh : Linear Single Linked List (versi 2)

Contoh : Linear Single Linked List (versi 2)

Contoh : Linear Single Linked List (versi 2)

2. Linear Double Linked List

A

head tail

prev

next

LEFTINFO

RIGHT

66

2. Linear Double Linked List

• Linear Double Linked List adalah doubly linked list lurus dengan pointer ganda, yaitu ada dua buah pointer. Jadi dalam struktur simpul ada dua elemen/field/variabel yang bertipe pointer. Yang pertama menunjuk atau berisi alamat simpul sebelumnya atau perivious node, dan yang kedua menunjuk simpul berikutnya atau next node

22 28 63IN

FO

RIG

HT

LEFT

INFO

RIG

HT

LEFT

INFO

RIG

HT

LEFT

INFO

RIG

HT

LEFT

LASTFIRST

2. Linear Double Linked List

• Proses DLLL (Double Linked List Linear), adalah 1. Inisialisasi linked list2. Pembuatan sebuah simpul 3. Pembuatan simpul awal4. Melakukan insert kanan / sisip elemen terakhir5. Melakukan insert kiri / sisip elemen awal6. Melakukan insert tengah / sisip elemen tengah7. Melakukan delete kanan / hapus elemen akhir8. Melakukan delete kiri / hapus elemen awal9. Melakukan delete tengah / hapus elemen tengah

2. Linear Double Linked List• Proses DLLL (Double Linked List Linear), adalah

1. Inisialisasi linked list

2. Pembuatan sebuah simpul

.

.

.

.

2. Linear Double Linked List• Proses DLLL (Double Linked List Linear), adalah

3. Pembuatan simpul awal

4. Melakukan insert kanan / sisip elemen terakhir

.

2. Linear Double Linked List• Proses DLLL (Double Linked List Linear), adalah

5. Melakukan insert kiri / sisip elemen awal

6. Melakukan insert tengah / sisip elemen tengah.....

2. Linear Double Linked List• Proses DLLL (Double Linked List Linear), adalah

7. Melakukan delete kanan / hapus elemen akhir

8. Melakukan delete kiri / hapus elemen awal.....

2. Linear Double Linked List• Proses DLLL (Double Linked List Linear),

adalah 7. Melakukan delete tengah / hapus

elemen tengah

3. Circular Single Linked List

22 28 66 63

INFOFIRST LINK INFO LINK INFO LINK INFO LINK

LAST

3. Circular Single Linked List

• Circular Single Linked List adalah Single List List dimana link simpul terakhir bukan diisi dengan null, melainkan diisi dengan alamat simpul pertama yaitu simpul yang ditunjuk oleh pointer FIRST, sehingga menciptakan efek melingkar “sesuai arah jarum jam”

22 28 66 63

INFOFIRST LINK INFO LINK INFO LINK INFO LINK

LAST

3. Circular Single Linked List

• Proses SLLC (Single Linked List Circular), adalah 1. Pembuatan sebuah simpul 2. Pembuatan simpul awal3. Melakukan insert kanan / sisip elemen terakhir4. Melakukan insert kiri / sisip elemen awal5. Melakukan insert tengah / sisip elemen tengah6. Melakukan delete kanan / hapus elemen akhir7. Melakukan delete kiri / hapus elemen awal8. Melakukan delete tengah / hapus elemen tengah

3. Circular Single Linked List• Proses SLLC (Single Linked List Circular), adalah

1. Pembuatan sebuah simpul

2. Pembuatan simpul awal.....

3. Circular Single Linked List• Proses SLLC (Single Linked List Circular), adalah

3. Melakukan insert kanan / sisip elemen terakhir

4. Melakukan insert kiri / sisip elemen awal.....

3. Circular Single Linked List

• Proses SLLC (Single Linked List Circular), adalah 5. Melakukan insert tengah / sisip elemen tengah

6. Melakukan delete kanan / hapus elemen akhir......

3. Circular Single Linked List

• Proses SLLC (Single Linked List Circular), adalah 7. Melakukan delete kiri / hapus elemen awal

8. Melakukan delete tengah / hapus elemen tengah.,,,,

4. Circular Double Linked List

A

head tail

prev

next

LEFTINFO

RIGHT

66

4. Circular Double Linked List

• Circular Double Linked List adalah doubly linked list dimana pointer RIGHT simpul paling kanan berisi alamat simpul paling kiri, dan pointer LEFT simpul paling kiri berisi alamat simpul paling kanan, sehingga menciptakan efek melingkar baik menurut ‘arah jarum jam’ maupun ‘arah kebalikannya’

22 28 63IN

FO

RIG

HT

LEFT

INFO

RIG

HT

LEFT

INFO

RIG

HT

LEFT

INFO

RIG

HT

LEFT

LASTFIRST

4. Circular Double Linked List• Double Linked List Circular adalah linked list

dengan menggunakan pointer, dimana setiap node memiliki 3 field/elemen, yaitu 1 field pointer yang menunjuk pointer berikutnya (next/right), 1 field menunjuk pointer sebelumnya (prev/left), serta sebuah field yang berisi data untuk node tersebut

• Double Linked List Circular pointer next dan prev nya menunjuk ke dirinya sendiri secara circular

4. Circular Double Linked List• Pengertian Double Linked List Circular

– Double: artinya field pointernya terdiri dari dua buah dan dua arah, yaitu prev/left dan next/right

–Linked List: artinya node-node tersebut saling terhubung satu sama lain

–Circular: artinya pointer next dan prev-nya menunjuk ke dirinya sendiri

4. Circular Double Linked List• Node

–Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya dan ke node sebelumnya

–Untuk pembentukan node baru, mulanya pointer next/right dan prev/left akan menunjuk ke dirinya sendiri

– Jika sudah lebih dari satu node, maka pointer prev/left akan menunjuk ke node sebelumnya, dan pointer next/right akan menunjuk ke node sesudahnya.

4. Circular Double Linked List

• Head–Dibutuhkan satu buah variabel pointer :

head–Head akan selalu menunjuk pada node

pertama

4. Circular Double Linked List• Fungsi untuk mengetahui kosong tidaknya DLLC

(Double Linked List Circular)• Penamahan elemen/data didepan/diawal

– Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya

– Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu.

4. Circular Double Linked List• Proses DLLC (Double Linked List Circular), adalah

1. Pembuatan sebuah simpul2. Pembuatan simpul awal.b (simpulyang sudah dibuat,

dijadikan sebagai simpul awal)3. Melakukan insert kanan / sisip elemen terakhir4. Melakukan insert kiri / sisip elemen awal5. Melakukan insert tengah / sisip elemen tengah6. Melakukan delete kiri / hapus elemen awal7. Melakukan delete kanan / hapus elemen akhir

4. Circular Double Linked List

• Proses DLLC (Double Linked List Circular), adalah 1. Pembuatan sebuah simpul

4. Circular Double Linked List• Proses DLLC (Double Linked List Circular), adalah

2. Pembuatan simpul awal.b (simpulyang sudah dibuat, dijadikan sebagai simpul awal)

4. Circular Double Linked List

• Proses DLLC (Double Linked List Circular), adalah 3. Melakukan insert kanan / sisip elemen

terakhir

4. Circular Double Linked List

• Proses DLLC (Double Linked List Circular), adalah 4. Melakukan insert kiri / sisip elemen awal

4. Circular Double Linked List• Proses DLLC (Double Linked List Circular), adalah

5. Melakukan insert tengah / sisip elemen tengah

4. Circular Double Linked List• Proses DLLC (Double Linked List Circular), adalah

6. Melakukan delete kiri / hapus elemen awal

4. Circular Double Linked List

• Proses DLLC (Double Linked List Circular), adalah 7. Melakukan delete kanan / hapus elemen

akhir

4. Circular Double Linked List

• Proses DLLC (Double Linked List Circular), adalah 8. Melakukan delete tengah / hapus elemen

Tengah