• Tidak ada hasil yang ditemukan

BAB 1 KONSEP DASAR. Algoritma adalah urutan langkah-langkah logis untuk menyelesaikan sebuah masalah yang disusun secara sistematis.

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB 1 KONSEP DASAR. Algoritma adalah urutan langkah-langkah logis untuk menyelesaikan sebuah masalah yang disusun secara sistematis."

Copied!
67
0
0

Teks penuh

(1)

58 BAB 1

KONSEP DASAR 1.1 Algoritma

Algoritma + struktur data = program

Algoritma adalah urutan langkah-langkah logis untuk menyelesaikan sebuah masalah yang

disusun secara sistematis.

Notasi untuk menuliskan algoritma disebut notasi algoritmik yang tidak dapat dijalankan oleh komputer. Agar dapat dijalankan oleh komputer maka program dalam notasi algoritmik harus ditranslasikan {diterjemah} kedalam notasi bahasa pemograman yang dipilih.

Notasi algoritmik

Instruksi Bentuk umum Contoh

Pemberian harga nama-data nama –data

nama-data konstanta

nama-data ekspresi

P Q

P Q

P Q

Masukan Input (nama-data) input (N)

input (harga)

Keluaran output (nama-data)

output (konstanta) output (ekspresi)

output (N) output („hello‟) output (X+Y)

Pemilihan kondisi If kondisi then aksi-1

else aksi-2

depend on (nama-data) aksi-1

aksi-2

Pengulangan Repeat N times

Aksi Repeat Aksi Until kondisi-berhenti While kondisi do Aksi Itraversal [1...N] Aksi Repeat 5 times Output („hello‟) Repeat X X+1 Until X>5 While X <= 5 do X X+1 X traversal [1..5] Output („hello‟)

1.2 Pengertian Struktur Data

Struktur Data adalah membuat sebuah struktur penyimpanan data yang digunakan saat

(2)

59

Struktur data berada pada level pemograman dimana digunakan untuk tempat penyimpanan data yang digunakan oleh program terkaikt dengan alokasinya dimemori (bukan storage atau hardisk). Struktur alokasi dimemori untuk menyimpan data yang sedang digunakan oleh Program inilah fokus dari struktur data. Ilustrasi dari struktur data dapat dilihat pada gambar berikut :

Gambar 1 Ilustri Struktur data 1.2.1 Tujuan Struktur Data

Struktur data bertujuan agar cara merepresentasikan data dalam membuat program dapat

dilakukan secara efisien dalam pengolahan di memori dan pengolahan penyimpanan dari program ke storage juga lebih mudah dilakukan.

Struktur data sebenarnya meliputi larik (array) dan record (rekaman) pada berkas beruntun (sequential file).

1.2.2 Langkah Pembuatan Struktur Data

Pembuatan Struktur data dimulai dari :

Langkah 1 : Analisis perancangan data apa yang harus dimanipulasi di memori agar program yang dibuat lebih efisien.

Langkah 2 : Mengimplementasikan struktur data dalam bahasa pemograman.

Langkah 3 : Menggunakan struktur data yang sudah dibuat untuk memanipulasi data di memori dalam sebuah program.

Contoh ilustrasi langkah-langkah berikut :

Ilustrasi Keterangan

nama alamat TTL No_telp

? ? ? ?

Misalkan ada sebuah data manusia yang terdiri dari :

*nama *alamat

*TTL (Tempat/ Tanggal lahir) *no_telp (nomor telepon)

Dan diperlukan untuk menyimpan data manusia, maka dalam logika akan dipersiapkan tempat untuk menyimpan

Data

Lingkup Struktur Data

Memori Data Menggunakan Hardisk/ Storage Dapat disimpan

(3)

60

sebuah data manusia, maka dibuat tipe data bentukan untuk menyimpan data manusia.

nama alamat TTL No_telp

faiz jakarta Palembang/07

april 2007

444000

Misalkan dari data manusia yang ada diisi dengan data seorang manusia.

nama alamat TTL No_telp

faiz jakarta Palembang/07

april 2007

444000

faris medan Palembang/03

agustus 2009

445000

Misalkan dari data manusia yang ada digunakan untuk menampung beberapa data manusia.

Dari ilustrasi diatas dapat dilihat bahwa struktur data adalah cara menyediakan tempat yang baik dan tersusun secara terstruktur agar data yang disimpan dapat dibaca dengan lebih mudah.

Struktur data dapat dikatagorikan dengan type, yaitu :

1. Tipe data dasar

a. Integer, untuk mendefinisikan nama-data yang menyimpan harga berupa bilangan bulat.

Contoh :

X : integer

Nilai angka : integer [0..100]

b. Real, untuk mendefinisikan nama-data berupa bilangan pecahan yang mengandung pecahan desimal.

Contoh : Harga : real Potongan : real

c. Karakter, untuk mendefinisikan nama-data yang menyimpan harga berupa karakter yang tidak dapat diproses secara aritmatika.

Contoh :

Nilai huruf : charakter [„A‟....‟E‟]

d. Logika, untuk mendefinisikan nama-data yang menyimpan harga benar-salah Contoh :

Ketemu :boolean

2. Tipe data bentukkan

Tipe data bentukkan adalah tipe yang didefinisikan sendiri oleh pemograman, yang disusun oleh satu atau lebih tipe dasar.

Contoh: tipe data string, yang dibangun dari tipe dasar karakter

(4)

61

Sekumpulan rekaman yang disimpan dalam media penyimpanan mulai dari rekaman pertama sampai terakhir satu persatu, secara searah.

4. Tabel

Tabel, untuk merepresentasikan sekumpulan informasi yang bertipe sama dan disimpan dengan urutan yang sesuai dengan definisi secara kontigu dalam memori komputer. Contoh :

TabNilMhs : array [1....Nmhs] of real

1.2.3 Tiga tingkatan struktur data 1. Definisi fungsional

Pendefinisian struktur data dan operator-operator yang berlakupada struktur data tersebut mendefinisi tipe data

2. Representasi logika

Pendefinisian spesifikasi „type‟ dari struktur yang menyengkut nama tipe dan spesifikasi semua operator.

3. Representasikan fisik (implementasikan)

Spesifikasi dari struktur data sesuai dengan implentasinya dalam memori komputer.

1.3 Pengenalan C++

Tahun 1969, laboratorium Bell AT&T di Muray Hill, New Jersey menggunakan bahasa assembly ini untuntuk mengembangkan sistem operasi UNIX. Maksudnya adalah untuk membuat sistem operasi yang bersifat “programmer_friendly”. Setelah UNIX berjalan Ken Thompson seorang pengembang sistem dilabotorium tersebut mengembangkan bahasa baru dengan nama bahasa B. Oleh karena bahasa B ini masih bersifat interpret dan lambat, maka pada tahun 1971, sistem operasi UNIX kemudian ditulis ulang dengan ulang dengan menggunakan bahasa C, yaitu bahasa pemograman yangdikembangkan oleh Dennis Ritchie, seorang pengembang sistem dilaboratorium yang sama.Pada tahun 1993, seorang doktor bernama Bjarne Stroustrup yang juga bekerja dilaboratorium yang sama menciptakan bahasa baru yaitu bahasa C++. Keistimewaan dari bahasa C++ adalah karena bahasa ini mendukung pemograman berarah objek atau yang lebih seringdikenal dengan istilah Object Oriented Programming (OOP).

Konsep Kompilasi dan Eksekusi Program

Preprocessor

Mula-mula kode program akan dimasukkan kebagian preprosesor yaitu yang diawali dengan

tanda # (pound) dan menghasilkan file yang akan dilewatkankebeberapa kompiler. Beberapa

preprocessor tersebut diantaranya adalah sebagai berikut :

 #include

 #define

 #ifdef, dll

Kode program (source code)

preprosesor

kompiler

(5)

62

Kompiler C++

Kompiler akan menterjemahkan kode program yang telah dilewatkan oleh preprosesor ke dalam bahasa assembly.

Assembler

Assembler menerima keluaran dari kompiler C++ dan akan membuat sebuah kode objek. Jika dalam kode program kita tidak menggunakan fungsi-fungsi yang terdapat pada library lain, maka kode objek ini akan langsung dieksekusi menjadi file EXE.

Link Editor

Bagian ini dikerjakan jika kode program yang kita buat menggunakan fungsi-fungsi yang disimpan pada suatu library lain. Link editor akan mengkombinasikan kode objek dan library yang ada untuk menjadikan sebuah file EXE.

Contoh program yang ditulis dalam bahasa C

#include <iostream .h>

Int main() { Int X;

Cout<<”Masukkan sebuah bilangan bulat : ”; Cin>>X;

Cout<<”Bilangan yang telah Anda masukkan adalah “<<X;

Return 0; }

Contoh hasil yang akan diberikan dari program diatas adalah sebagai berikut :

Masukkan sebuah bilangan bulat :2

(6)

63 PENGURUTAN (SORTING)

2.1 Definisi Pengurutan

Pengurutan (sorting) adalah proses mengatur sekumpilan objek menurut urutan atau susunan tertentu. Pengurutan tersebut dapat menaik (Ascending) atau menurun (Decending). Data yang diurut dapat berupa data type data sederhana (kecuali boolean) atau type data terstruktur.

Keuntungan dari data yang telah berurut dapat mempercepat pencarian, juga dapat harga maksimum dan minimum secara langsung.

2.2 Metode Pengurutan

Metode pengurutan yang akan dibahas: 1. Pengurutan Gelembung (Bubble sort)

2. Pengurutan Maksimum/ Minimum (Maximum/ minimum sort) 3. Pengurutan Sisip (insertion Sort)

2.3 Pengurutan Gelembung (Bubble Sort)

PENGURUTAN BILANGAN DENGAN METODE BUBBLE SORT

Proses Pengurutan

 Bubble Sort adalah nama yang diberikan pada prosedur untuk mengatur sekelompok

bilangan dengan urutan dari kecil ke besar.

 Untuk mengurutkan bilangan diperlukan variabel array yang digunakan untuk menampung semua bilangan yang akan diurutkan.

 Proses pengurutan dilakukan dengan membandingkan semua elemen array satu persatu.

Contoh :

(7)

64

Dalam metode bubble sort, pengurutan demulai dengan membandingkan elemen pertama untuk mendapatkan angka terbesar. Lalu angka tersebut ditempatkan pada elemen terakhir.

(8)

IMPLEMENTASI DALAM BENTUK FLOWCHART TIDAK YA YA START I = 0 J = 0 N = 0 INPUT BIL BIL=0 N = N + 1 BILLAR(N) = BIL 1 1 J = J + 1 I = I + 1 BILLAR(I) < BILLAR(I+1) TEMP = BILLAR(I) BILLAR(I) = BILLAR(I+1) BILLAR = TEMP I = N - J 2 2

(9)

END

TIDAK

Bubble Sort tidak lain adalah pengulangan prosedur hingga bilangan – bilangan yang ada tersusun menurut urutan dari yang kecil ke yang besar.

Contoh Buble Sort

6 5 8 3

Pertama :

Pada akhir proses pertama ini, bilangan yang terbesar menempati tempat yang sesuai.

Kedua :

Pada akhir proses kedua ini, bilangan terbesar kedua menempatkan tempat yang sesuai.

Ketiga : 6 5 8 3 5 6 8 3 5 6 3 8 5 6 3 8 5 6 3 8 5 6 3 8 5 3 6 8 5 3 6 8 5 3 6 8 5 3 6 8 3 5 6 8 3 5 6 8 J = N - 1 I = 0 1 I = 0 I = I + 1 PRINT BILLAR(I) I = N

(10)

Bila proses ini dilanjutkan, tidak ada pertukaran tempat lagi bagi bilangan – bilangan tersebut, sebab bilangan tersebut telah selesai disusun.

BAB 2 SENARAI (List)

2.1 Pengertian Senarai (List)

List atau senarai adalah sebuah pemikiran / konsep struktur data yang sangat dasar

pada pemograman agar lebih fleksibel, di mana setiap elemen akan ditambahkan saat dibutuhkan, tidak dialokasikan dengan tempat tertentu dari awal.

List merupakan kumpulan elemen dengan struktur tertentu. Struktur dasar dari list dapat dilihat pada gambar 2 yang merupakan list dengan tiga buah elemen.

Gambar 2 Senarai dengan Tigah Buah Elemen

Gambar 3 Representasi Lain Senarai dengan Tiga Elemen

Sebuah list akan terdiri dari elemen pertama yang disebut dengan kepala atau first, next adalah alamat dari elemen berikutnya. serta beberapa elemen atau bahkan tanpa elemen yang biasa disebut list kosong.

Misalkan jika kita ingin membuat sebuah elemen data nilai mahasiswa yang terdiri dari nomor induk, nama, dan nilai maka representasinya dapat dilihat pada gambar 4:

NULL Kepala (first)

Kepala (first)

(11)

Gambar 4 Representasi Elemen

2.2 Tipe-tipe List 2.2.1 List Kosong

List kosong hanya terdiri dari sebuah petunjuk elemen yang berisi NULL (kosong). List kosong tidak memiliki satu buah elemen pun sehingga hanya berupa petunjuk awal elemen yang berisi NULL (kosong). Gambar 6 Senarai Kosong

Sehingga list kosong merupakan list yang belum memiliki elemen yang terkait pada first. Sehingga ketika first diakses belum ada bendanya.

2.2.2 List Tunggal

List tunggal adalah sebuah list yang elemennya hanya menyimpan informasi elemen setelahnya (Next) sehingga jalannya pengaksesan list hanya dapat dilakukan secara maju. List tunggal memiliki beberapa jenis list yaitu list tunggal dengan first dan tail, list tunggal dengan kepala first, dan list tunggal berputar.

Representasi list tunggal dengan kepala dan tail (ekor) memiliki dua buah petunjuk elemen yaitu elemen pertama (first) dan petunjuk elemen terakhir (tail), sehingga pada awal pengaksesan, elemen yang dapat diakses adalah elemen awal dan akhir.

Gambar 5 senarai tunggal dengan dua petunujuk elemen Deklarasi list tunggal dengan kepala dan ekor :

Nim nama nilai next

Petunjuk ke elemen berikutnya

001 faiz A Kepala (first) NULL Kepala (first) NULL Ekor (tail)

(12)

Type list : < First : elemen, Tail : elemen >

Representasi list tunggal dengan kepala hanya dapat diakses elemen pertamanya

saja karena petunjuk hanya berupa petunjuk elemen awal (first).

Gambar 6 senarai tunggal dengan kepala

Representasi list tunggal berputar elemen terkhir ditandai dengan elemen

setelahnya sama dengan elemen pertama seperti sehingga penelususran list akan berhenti jika petunjuk bantu telah sampai pada elemen yang elemen setelahnya sama dengan elemen yang ditunjuk oleh penunjuk elemen awal (first) yang dalam bahasa algoritmik :

Gambar 7 senarai berputar

2.2.3 List ganda

List ganda adalah sebuah list yang elemennya menyimpan informasi elemen sebelumnya dan informasi elemen setelahnya sehingga penelusuran list dapat dilakukkan secara maju dan mundur.

List ganda terdiri dari list ganda dengan kepala dan tail(ekor) dan list ganda dengan kepala dan list ganda berputar.

Kepala (first)

NULL

While now.text <> L1.first do {proses penelusuran list} Now now.while (end while)

(13)

 Representasi list ganda dengan kepala dan ekor, memiliki dua petunjuk yang dapat diakses (tail).

Gambar 8 senarai ganda dengan dua petunjuk

 Representasi list ganda dengan kepala, hanya memiliki sebuah petunjuk elemen yaitu

penunjuk pada elemen awal list (first).

Gambar 9 senarai ganda dengan kepala

 Representasi list ganda berputar, elemen terakhir list ganda berputar ditandai dengan elemen setelahnya adalah merupakan elemen pertama list yang ditunjuk awal list (first).

Gambar 10 senarai ganda berputar

2.3 Operasi pada List

Operasi-operasi yang dilakukan pada list adalah penelusuran (traversal),pencarian sebuah elemen (search),penciptaan (create),penambahan elemen (insert) dan penghapusan elemen (delete), menggabung Dua Buah List (concat).

2.3.1 Penelusuran (traversal)

Dibutuhkan untuk pemrosesan terhadap data/ informasi yang ada dielemen list, perlu dilakukan penelusaran list, yaitu “mengunjungi” setiap elemen list.

Kepala (first) NULL Ekor (tail) NULL Kepala (first) NULL NULL Kepala (first)

(14)

Traversal1 (input L:list) {untuk menelusuri list}

{L terdefinisi, mungkin kosong}

{elemen list L “dikunjungi” & telah diproses} Addres{address untuk traversal, tipe terdefinisi} Procedure Proses(input P:address)

Procedure Insisialisasi {aksi sebelum proses dilakukan} Procedure terminasi {aksi sesudah semua pemrosesan} Algoritma: Inisialisasi(P) P first (L) While (P=Nil) do Proses(P) P Next(P) terminasi

Traversal2 (input L:list)

{untuk menelusuri list dengan kasus kosong} {L terdefinisi, mungkin kosong}

{elemen list L “dikunjungi” & telah diproses} Addres{address untuk traversal, tipe terdefinisi} Procedure Proses(input P:address)

Procedure Insisialisasi {aksi sebelum proses dilakukan} Procedure terminasi {aksi sesudah semua pemrosesan} Algoritma:

First (L) = Nil then Input („list kosong‟) Inisialisasi First (L) Input Proses (P) P Next (L) While (P=Nil) terminasi

Traversal3 (input L:list) {untuk menelusuri list} {L terdefinisi, tidak kosong}

{elemen list L “dikunjungi” & telah diproses} Address{address untuk traversal, tipe terdefinisi} Procedure Proses(input P:address)

Procedure Insisialisasi {aksi sebelum proses dilakukan} Procedure terminasi {aksi sesudah semua pemrosesan}

(15)

Algoritma: Inisialisasi(P) P first (L) Address(P) Next(P)=Nil Next(P) terminasi

2.3.2 Pencarian Elemen List (Search)

Search ini sering dipakai untuk mengenali elemen list berdasarkan nilai informasi yang disimpan pada elemen yang dicari.Biasanya dengan alamat yang ditemukan, dilakukan suatu proses terhadap elemen list tersebut.

searchNilai (input L:list, X:infoType, output P: address, found: boolean)

{Found X terdefinisi}

{P adalah alamat elemen dimana X ditemukan Nil jika tidak ditemukan}

Found berharga true jika X ditemukan, Found berharga false jika X tidak ditemukan Kamus : Algoritma: Read(X) Search Nilai(L,X,Prec,found) If found then Insertafter(L,Prec,P) P first(L) found false

while (P = Nil) and (not found) do if( X = info(p)) then

found true else

P Next(P)

While p = Nil or found)

Pencarian suatu elemen beralamat tertentu

Search ini sering digunakan untuk memposisikan list pointer pada suatu elemen list. searchAlamat (input L:list, X:infoType, output P:

address,

found: boolean) {Found P terdefinisi}

(16)

Found berharga true jika tidak Found berharga false} Kamus :

Algoritma: {P first(L) found false

while (Pt = Nil) and (not found) do if (X = info(p)) then

found true else

P Next(Pt)

While Pt = Nil or found)}

2.3.4 Penciptaan List

Penciptaan sebuah list berarti membuat sebuah list yang selanjutnya siap diproses ditambah data. Algoritma penciptaan sebuah list sebagai berikut :

CreateList ( output L : List)

{Bentuk list L yang kosong artinya first dari harga awal Nil}

Kamus : Algoritma:

Void createlist (list *L) { *L = Nil;

}

2.3.5 Penyisipan sebuah List

Penyisipan elemen dapat dilakukan sebagai elemen setelah sebuah elemen dengan alamat P

atau elemen terakhir.

Insert First

Tambah sebuah elemen sebagai elemen pertama list,insert elemen pertama, list kosong :

Insert elemen pertama, list tidak kosong : Kepala (first)

Null Elemen baru

Kepala (first)

(17)

Gambar 12 InsertFirst

Procedure insertfirst( input/output L : List, p: address)

{IS: List L mungkin kosong, P sudah dialokasi, P = Nil, Next (P) = Nil}

{FS: P adalah elemen pertama list first} Kamus :

Algoritma:

Next (P) first(L) First (L) P If First(L) = Nill then Next (P) First(L) Endif

First(L) P

Insert After

Menyisipkan sebuah elemen beralamat P sebagai suksesor dari sebuah elemen list yang beralamat Prec.

Procedure insertAfter(input/output L : List, input Prec,P: address)

{IS: Prec adalah elemen list, prec = Nil, P sudah dialokasi, P=Nil, Next (P) =Nil}

{FS: P menjadi suksesor Prec} Kamus :

Algoritma:

Void InsertAfter (List *L, address P) Next (P) Next (Prec)

Next (Prec) P

Insert Last

Menyisipkan sebuah elemen beralamat P sebagai elemen terakhir sebuah list. Elemen baru Elemen baru Null Kepala (first) Elemen baru prec Null Kepala (first)

(18)

Procedure insertLast(input/output L : List, input P: address) {IS: List L mungkin kosong P sudah dialokasi,P = Nil, Next(P) = Nil}

{FS: P adalah elemen terakhir list L} Kamus :

Last: address {alamat elemen terakhir} Algoritma:

If (first(L) = Nil)then Insertfirst (L,P) Else

Last first (L)

While (next (Last) = Nil) do Last Next(last)

{endwhile, last adalah elemen terakhir} insertAfter (L,last,P)

2.3.6 Penghapusan Sebuah Elemen pada List (Delete)

Penghapusan dapat dilakukan apabila elemen list tidak digunakan lagi.

Penghapusan Elemen list di Awal

Procedure DeleteFirst(input/output L : List, Output P: address)

{IS: List L tidak kosong P minimal 1 elemen}

{FS:Elemen pertama dihapus, P adalah alamat elemen pertama L sebelum penghapusan}

Kamus : Null Kepala(first) Elemen baru Kepala (first) Null Kepala (first)

(19)

Algoritma: P first (L)

First (L) Next(First(L))

Penghapusan Elemen List After/Tengah

Procedure DeleteAfter(input/output L : List, Output P: address)

{IS: List L tidak kosong Prec adalah elemen list, Next (prec) = Nil}

{FS:Menghapus suksesor Prec, p adalah suksesor Prec sebelum penghapusan, next (Prec) yang baru adalah suksesor dari suksesor Prec sebelum penghapusan}

Kamus : Algoritma: P first (L)

Next (Prec) Next(Next(Prec)) Next (P) Nil

Penghapusan Elemen di Akhir List

Procedure DeleteLast(input/output L : List, Output P: address)

{IS: List L tidak kosong, minimal ada satu elemen} {FS:Elemen terakhir dihapus, list mungkin jadi kosong, p adalah alamat elemen terakhir list sebelum penghapusan} Kamus :

Last, PrecLast: address

Null Kepala (first) Null Kepala (first) Null Null Kepala (first) Null Null Kepala (first)

(20)

Algoritma:

Last first (L)

PrecLast Nil {pred dari L tidak terdefinisi} {menelusuri List sampai elemen terakhir}

While (next (Last) = Nil) do PrecLast Last

Last Next (Last)

{endwhile, Next (last) = Nil} P Last

if (Preclast = Nil) then { list dgn 1 elemen} First (L) Nil

Else

Next (PrecLast) Nil

Menghapus elemen tertentu dengen alamat P

Procedure DeleteP(input/output L : List, Output P: address) {IS: List L tidak kosong, P adalah elem list L}

{FS:menghapus P dari list, P mungkin elemen pertama, tengah, atau akhir}

Kamus : Prec : address Algoritma: if (P= first (L))then DeleteFirst (L,P) Else Prec First(L) While (next (Prec) = P) do Prec Next (Prec)

{endwhile, Next (Prec) = P, hapus P} DeleteAfter (L, Prec, P)

2.3.7 Menggabungkan Dua Buah List (Concat)

Jika ada dua buah list dimana list kedua disambungkan ke list pertama maka last (L1) menjadi predesedor First(L2)

Procedure concat(input L1, L2 : List, output L3 :List) {IS: L1=L2, L1=L3, dan L2=L3, L1,L2 mungkin kosong} {FS:L3 adalah hasil konkatenasi L1 dgn L2, L2 diletakkan dibelakang L1}

Kamus :

(21)

Algoritma: CreatList(L3) if (First (L1) = Nil)then first (L3) first(L2) else first (L3) First (L1) last1 First (L1)

{menelusuri list sampai elemen terakhir} While (next (Last1) = Nil) do

Last1 Next(Last1) {endwhile, Next(last1) = nil) Next (last1) First (L2)

(22)

BAB 3

REPRESENTASI FISIK LIST

Representasi list adalah sekumpulan elemen bertipe sama yang terdiri dari 2 bagian : <Info:InfoType, Next: Address> dimana Infotype adalah tipe terdefinisi dan Next adalah “alamat” elemen berikutnya.

List Representasi fisik adalah implementasi list dalam struktur data yang dapat ditangani

oleh pemrosesan bahasa pemograman.

Ada 2 cara untuk merepresentasikan list secara fisik yaitu berkait dan kontigu. Representasi berkait dapat diimplementasikan dalam 2 macam struktur fisik yaitu berkait dengan pointer dan berkait dengan tabel. Sedangkan representasi kontigu hanya dapat diimplementasikan dengan struktur yang secara fisik kontigu adalah tabel.

3.1 Representasi List berkait dengan Pointer

Cara mengacu :

Jika P adalah nama variabel yang bertipe pointer, maka P adalah alamat memori mesin dari elemen data yang ditunjuknya. Elemen data yang ditunjuknya boleh bertipe apa saja.

(23)

Contoh :

Contoh untuk pengisian sebuah elemen data yang bertipe sebagai berikut :

Pada saat sebuah elemen dihapus maka memori dapat dikembalikan ke sistem dengan prosedure Deallocate. Jadi Representasi fisik list linier berkait dengan pointer adalah :

Maka ntuk mengacu elemen KAMUS:

Type Elmt : integer P: pointer to Elmt

{maka P akan bertipe integer}

Type Mhs : <NIM: integer, nama: string, Nilai: integer[0..100]>

PMhs pointer to Mhs

{Maka PMhs akan bertipe Mhs

PMhs . NIM akan bertipe integer} Procedure Allocate (output P: Pointer)

{Memberikan sebuah elemen yang ditunjuk oleh P}

Procedure Deallocate (input P: Pointer) {Mengembalikan alamat P ke sistem}

KAMUS:

Type Mhs : <NIM: integer, nama: string, Nilai: integer[0..100]>

PMhs pointer to Mhs Algoritmik:

Allocate (PMhs) {baru disediakan memori pada saat ini} PMhs . NIM 9911050

PMhs . Nama „Leni‟ PMhs . Nilai 80

KAMUS:

Type ElmtList : <Info: Infotype, Next: Address > Type Address: Pointer to ElmtList

Type List: address

{infoType adalah tipe terdefinisi}

{deklarasi untuk variabel kerja}

L: List {alamat elemen pertama list} P: Address { alamat untuk traversal}

(24)

dengan alamat P adalah: First(L) dituliskan menjadi L Info(P) dituliskan menjadi P .Info Next(P) dituliskan menjadi P .Next

3.2 Representasi List berkait dengan Tabel

Representasi berkait dengan tabel alokasi memorinya tidak dinamis. Alokasi tabel sesuai dengan batasan indeksnya.

Representasi fisik dengan tabel digunakan jika maksimum elemen datanya dapat diprediksi. Dengan representasi ini kita dapat menelusuri alamat elemen melalui indeks tabel.

Representasi fisik list berkaitan dengan tabel adalah:

KAMUS:

{Tabel memori list, global} Constant IndekxMin: integer = 1 Constant IndekxMax: integer = 100 Constant Nil: integer = 0

Type InfoType : ...{terdefinisi}

Type ElmtList : <Info: InfoType, Next: Address> TabElmt: array [IndexMin...IndexMax] of ElmtList

Type Address: Address { alamat pertama list siap dipakai}

{deklarasi variable kerja} Type List: Address P: address

Procedure IniTab {IS: sembarang}

{FS: TabElmt{IndexMin..IndexMax] terinisialisasi untuk dipakai sebagai elemn list berkait elemen pertama yang dapat dipakai adalah FistAvail =1}

{inisialisasi tabel yang akan dipakai sebagai memori list}

Function Memfull boolean

{true jika semua elemen tabel sudah dipakai, false jika tidak}

(25)

Jika didefinisi : P: Address

Maka untuk mengacu elemen dengan alamat P adalah: Info(P) dituliskan menjadi: TabElmtp. Info

Next(P) dituliskan menjadi: TabElmtp. Next

*Untuk Menginisialisasi Tabel

Procedure IniTab {IS: sembarang}

{FS: TabElmt[IndexMin...IndexMax] terinisialisasi untuk dipakai sebagai elemen list berkait elemen pertama yang dapat dipakai adalah FirstAvail = 1}

{inisialisasi tabel yang akan dipakai sebagai memori List} Kamus :

i: address Algoritma:

I traversal{IndexMin..IndexMax-1} TabElmt1. Next i+1

TabElmtIndexMax . Next Nil FirstAvail IndexMin

Fungsi MemFull digunakan mengecek apakah sebuah elemen tabel sudah dipakai

Function MemFull Boolean

{true jika semua elemen tabel sudah dipakai, false jika tidak}

Kamus : Algoritma:

(FirstAvail = Nil)

Procedure AllocTab(output P: Address) {IS: FirstAvail mungkin kosong}

{FS: Jika FirstAvail ntidak Nil maka P adalah FirstAvail dan FirstAvail yang baru adalah Next(firstavail)

Jika firstAvail = Nil, P=Nil, tuliskan pesan {mengambil sebuah elemen siap pakai P}

Procedure DeAllocTab (Input P: Address) {IS: FirstAvail mungkin kosong, P tidak Nil) {FS:firstAvail = P}

(26)

Prosedur Allocate digunakan jika kita akan memesan tempat untuk list Procedure Allocate(output P: Address)

{IS: FirstAvail mungkin kosong}

{FS: Jika firstAvail tidak Nil maka P adalah FirstAvail dan FirstAvail yang baru adalah Next(FirstAvail)

Jika FirstAvail = Nil, tulislah pesan „tidak tersedia lagi elemen siap Pakai‟

{mengambil sebuah elemen siap pakai P} Kamus :

Algoritma:

If (not memfull) then P FirstAvail

FirstAvail TabElmfirstAvail . Next else

output („ tidak tersedia lagi elemn siap pakai‟0 P Nil

 Jika elemen list tersebut tidak diperlukan lagi dan elemen tersebut sudah dihapus dari list maka “tempatnya” dikembalikan lagi ke tabel agar dapat digunakan untuk elemen list lainnya.

Untuk Mengembalikan elemen list adalah:

Procedure DeAllocTab (input P: Address) {IS: FirstAvail mungkin kosong, P tidak Nil} {FS: FirstAvail = P}

{mengembalikan sebuah elemen p pada FirstAvail} Kamus :

Algoritma: P FirstAvail

TabElmfirstAvail . Next FirstAvail FirstAvail P

Beberapa contoh keadaan tabel untuk elemen list

(27)

Info Next 1 2 3 4 5 6 7 8 9 10 Info Next 1 2 3 4 5 6 7 8 9 10 Info Next 1 2 3 4 5 6 7 8 9 10 Keadaan Awal

Tabel terpakai 2 elemen FirstAvail L2 L1 FirstList 2 1 FirstAvail 7 6 L1 10 9 4 5 8 1 L2 2

(28)

3.3 Representasi Fisik List secara Kontigu

Dengan representasi fisik kontigu, struktur data yang dapat menyimpan adalah tabel. Karena hanya tabel yang punya struktur Kontigu. Setiap elemen tabel mengandung informasi info. Sedangkan informasi mengenai Next tidak perlu lagi diseimpan secarabeksplisit, karena secara implisit sudah tersirat dalam struktur data yang menjadi tempat penyimpanannya. Elemen terakhirt tidak dikenali dari Next, karena Next tidak disimpan secara eksplisit, satu-satunya cara untuk mengetahui elemen terakhir adalah dari alamatnya : P = Nil, dimana N terakhir dengan harus diketahuinya alamat elemen terakhir, maka representasi list L bukan murni seperti diatas, tetapi harus mengandung First(L) dan Last(L).

{list direpresentasi pada tabel secara kontigu} KAMUS:

Constant IndekxMin: integer = 1 Constant IndekxMax: integer = 100 Constant Nil: integer = 0

Type InfoType : ...{elmtype : terdefinisi}

Info : infotype : (tidak perlu mengandung next : karena dapat dikalkulasi)

TabElmt: array [IndexMin...IndexMax] of info Type Address: integer[IndexMin...IndexMax,nil]

{deklarasi variable kerja}

N : address {nama elemen terakhir, karena field NEXT tidak ada secara eksplisit, maka satu-satunya jalan untuk mengenali elemen terakhir adalah dengan @-nya} Type List: Address

First : list

{deklarasi alamat}

P : address {address untuk traversal}

{maka first (L)..last(L) adalah indeks effektif elemen tabel anggota list

{next (P) tidak terdefinisi utk P=N next (P) P P+1 Info (P) menjadi TabelmtListp.info}

(29)

BAB 4

TUMPUKAN (STACK) 4.1 Pengertian Tumpukan (Stack)

Tumpukan atau stack adalah salah satu konsep struktur data yang memiliki sistem kerja

yang terakhir masuk adalah yang pertama keluar (LIFO = Last In First Out).

Sebuah stack hanya dapat ditambahkan dan dikurangi elemennya hanya dari sebuah sisi. Elemen paling atas dari sisi tersebut disebut elemen atas atau top of stack. Semua operasi pada sebuah stack diawali dari elemen atas ini, misalkan ingin mengambil elemen stack maka dilakukan satu persatu diawali dari elemen atas, dan jika ingin menambah elemen stack maka petunjuk elemen atas diganti menjadi elemen yang ditambahkan pada bagian atas stack.

4.2 Operasi pada Tumbukan 4.2.1 Operasi Push

Operasi push pada stack adalah operasi menambahkan elemen baru pada sebuah stack.

Elemen baru

Elemen baru

Elemen atas tumpukan (Top of Stack)

Tumpukan (stack)

(30)

Procedure Push(input/output S : Stack, input P: address)

{IS: Stack S mungkin kosong, P terdefinisi} {FS: P menjadi Top dari Stack S}

Kamus : Algoritma: If StackEmpty(S) then Top(S) P else Next (P) Top(S) Top(S) P

Procedure Push(input/output S : Stack, input E: Elmts)

{IS: Stack S mungkin kosong, E terdefinisi, alokasi} {FS: Top(S) berisi E} Kamus : P : address Algoritma: Alokasi (P) Elmt (P) E If StackEmpty(S) then Top(S) P else Next (P) Top(S) Top(S) P 4.2.2 Operasi POP

Operasi pop pada stack adalah operasi mengambil sebuah elemen dari sebuah stack.

Procedure Pop(input/output S : Stack, output P:

Tumpukan (stack)

Tumpukan (stack)

Top dikeluarkan

(31)

address)

{IS: Stack S terdefinisi, mungkin kosong} {FS: P adalah alamat elemen yang diambil} Kamus :

Algoritma: P Top(S)

If not StackEmpty(S) then Top(S) Next( Top(S))

Procedure Pop(input/output S : Stack, output E:ElmtS)

{IS: Stack S terdefinisi, tidak kosong} {FS: P adalah alamat elemen yang diambil} Kamus :

Algoritma:

P Top(S); E.Info Info(P); E.Next Nil Top(S) Next( Top(S))

Dealokasi (P)

4.3 Stack Representasi Statis

Stack dengan representasi statis biasanya diimplentasinya dengan menggunakan array. Sebuah array memiliki tempat yang dialokasikan diawal sehingga sebuah elemen yang dimasukan dalam sebuah array terbatas pada tempat yang ada pada array. Karena

menggunakan array maka stack dengan representasi statis dapat mengalami kondisi elemen penuh. 1 2 3 4 5 6 7 8 9 10 KAMUS UMUM

Constant Nmax: integer = 100 Constant Nil: integer = 0

Type Address: integer [0..NMax]

{alamat 0 untuk menyatakan stack kosong} Type Elmts:....{terdefinisi, hanya terdiri dari info} Type Stack: <TOP: Address,

TabElmt: array{1...Nmax] of Elmts> S: Stack

{cara penulisan ;

TOP (S) dituliskan S.Top

Info (P) dituliskan S.TsbElmtp.Elmts Next (P) dituliskan P P+1 elemen Elemen Elemen Elemen Elemen Elemen

Function StackEmpty (S: Stack) boolean {mengirimtrue jika stack kosong dan false jika stack kosong}

(32)

Procedure CreateStack(Output S:Stack) {IS: sembarang}

{FS:Stack S tercipta, Top = Nil} Algoritma :

S.Top Nil

4.4 Stack Representasi Dinamis

Stack dengan representasi dinamis

biasanya diimplementasikan dengan menggunakan pointer yang menunjukkan pada elemen-elemen yang dialokasikan pada memori.

Gambar Representasi Tumpukkan dinamis

Karena semua operasi pada sebuah stack diawali dengan elemen yang paling atas maka jika menggunakan representasi dinamis saat elemen ditambah akan menggunakan penambahan elemen pada awal stack (addfirst) dan saat pengambilan atau penghapusan elemen menggunakan penghapusan diawal stack (delfirst).

Kamus : Algoritma:

(S.TOP = Nil)

Procedure Pushkon(input/output S : Stack, input E:ElmtS)

{IS: Stack S dan E terdefinisi}

{FS: jika masih tersedia tempat maka E menjadi elemen paling baru dari stack S, jika tidak tersedia tempat lagi tampilkan pesan „overflow‟}

Kamus : Algoritma:

If (S.Top < Nmax) then S.Top S.Top + 1 S.tabelmtss.top E Else

Output(„overflow‟)

Procedure Popkon(input/output S : Stack, input E:ElmtS)

{IS: Stack S terdefinisi, mungkin kosong} {FS: jika stack S kosong, maka E= -99 Jikastack S tidak kosong maka Top = Top-1 E adalah elemen yang dipop}} Kamus : Algoritma: If (StackEmpty(S)) then Output(E=-99) Else E S.TabElmts.Top S.Top S.Top – 1 Kepala (first) NULL

(33)

Latihan Soal

x 3

y 5

createstack (s) KAMUS UMUM

Type infotype :...{type terdefinisi, menyimpan informasi elemen stack}

Type Address: pointer to ElmtStack Type ElmtStack: <Top: Address> S: Stack

{cara penulisan :

Top (S) dituliskan S.Top Info (P) dituliskan P . Info Next (P) dituliskan P . Next Primitif Alokasi : Allocate (P) Dealokasi : Dealocate (P)}

Function StackEmpty (S: Stack) boolean {mengirimtrue jika stack kosong dan false jika stack kosong}

Kamus : Algoritma:

(S.TOP = Nil)

Procedure CreateStack(Output S:Stack) {IS: sembarang}

{FS:Stack S tercipta, Top = Nil} Kamus :

Algoritma:

S.TOP Nil

Procedure Popkon(input/output S : Stack, input P: Address)

{IS: Stack S terdefinisi, mungkin kosong} {FS: jika stack kosong, tulis pesan “stack kosong”

Jika Stack tidak kosong P adalah alamat Top sebelum Pop, Stack mungkin menjadi kosong}}

Kamus : Algoritma: P S.Top

If not StackEmpy (S) then S.Top S.Top . Next Procedure PushP (input/output S : Stack,

input P: Address)

{IS: Stack S terdefinisi, mungkin kosong, P = Nil}

{FS: jika masih tersedia tempat maka E menjadi elemen paling baru dari stack S, jika tidak tersedia tempat lagi tampilkan pesan „overflow‟}

Kamus : Algoritma:

If Not stackEmpty (S) then P .Next S.Top

(34)

push (s,x) push (s,4) pop (s,z) push (s,y) push (s,3) push (s,z) pop (s,x) push(s,2) push(s,x)

while not EmptyStack (s) do pop (s,x) output(x) {endwhile} y 1 createStack (S) push (S,5) pop (S,X Z X+Y Pop (S,X) Push (S,3) Push(S,Z) Pop (S,X) Push(S,2) Push(S,X)

(35)

pop (s,x) output(x) {endwhile}

ANTRIAN (QUEUE) 4.1 Pengertian Antrian

Antrian atau queue adalah salah satu konsep struktur data yang memiliki sistem kerja pertama masuk maka akan menjadi yang pertama keluar (FIFO = First In First Out)

masuk

Last First

keluaran

(36)

Gambar representasi Antrian

Pada sebuah antrian elemen hanya dapat ditambahkan melalui sisi belakang queue dan elemen hanya dapat diambil dari sisi bagian depan queue. Oleh karena itu, ada dua penunjuk elemen pada sebuah queue yaitu belakang atau last sebagai penunjuk elemen paling belakang dan depan atau first sebagai penunjuk elemen bagian depan.

Kondisi antrian yang menjadi perhatian adalah:

1. Penuh

Bila elemen pada antrian mencapai kapasitas maksimum antrian. Pada kondisi ini tidak mungkin dilakukan penambahan keantrian. Penambahan elemen menyebabkan kondisi kesalahan overflow.

2. Kosong

Bila tak ada elemen pada antrian. Pada kondisi ini tidak mungkin dilakukan pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan underflow.

4.5 Operasi pada Antrian

Operasi yang dapat dilakukan pada antrian atau queue adalah memasukkan elemen dari sisi bagian belakang queue dan mengeluarkan elemen dari sisi depan queue.

Aturan Memasukkan Queue

masuk keluaran

Last First

Antrian (Queue) Antrian (Queue)

Last First Last First Last First Antrian (Queue) Antrian (Queue) keluaran

(37)

Antrian (queue) adalah list linier yang:

1. Dikenali elemen pertama (Head) dan terakhirnya (Tail) 2. Penyisipan elemen selalu dilakukan setelah elemen terakhir 3. Penghapusan elemen selalu dilakukan pada elemen pertama 4. Elemen yang satu dengan yang lain diakses melalui Next.

Contoh:

Antrian tersebut berisi 6 elemen yaitu A,B,C,D,E dan F. Elemen A terletak dibagian depan antrian, elemen F terletak dibelakang antrian.

Memasukkan elemen G maka penambahan elemen dilakukan dibelakang

Jika ada elemen yang dihapus maka elemen A akan dihapus terlebih dahulu

A B C D E F A B C D E F G A B C D E F G Depan/Front Belakang/Tail Depan/Front Belakang/Tail Depan/Front

(38)

Function QEmpty (Q: Queue) boolean {mengirim true jika antrian kosong dan false jika antrian kosong} Kamus :

Algoritma:

(Q.Head = Nil) and (Q.Tail = Nil)

Procedure CreateStack(Output Q:queue) {IS: sembarang}

{FS:terbentuk sebuah queue yang kosong}

Kamus : Algoritma:

Q.Head Nil Q.Tail Nil

rocedure InsertQ (input/output Q : Queue, input P: Address)

{IS: antrian Q terdefinisi, mungkin kosong P sudah dialokasi, P = Nil, Next (P) = Nil} {FS: P menjadi elemen Tail dari antrian Q}

Kamus :

Algoritma:

Pembuatan queue kosong Memeriksa antrian kosong

(39)

Representasi Statis

Queue dengan representasi statis biasanya diimplementasikannya dengan menggunakan array. Sebuah array memiliki tempat yang dialokasikan diawal sehingga sebuah elemen yang dimasukkan dalam sebuah array terbatas pada tempat yang ada pada array. Karena

menggunakan array maka queue dengan representasi statis dapat mengalami kondisi elemen penuh.

Karena menggunakan array yang tidak dapat diubah strukturnya secara dinamis maka operasi mengeluarkan elemen dari queue dengan representasi statis perlu penanganan secara khusus If QEmpty (Q) then

Head (Q) P Else

Next (tail (Q)) P Tail (Q) P

Procedure DeleteQ (input/output Q : Queue, output P: Address)

{IS: Q terdefinisi, tidak kosong }

{FS: P adalah alamat yang diambil, P = Nil, Next (P) = Nil, antrian mungkin jadi kosong} Kamus :

Algoritma:

P Head (Q)

Head (Q) Next (Head(Q)) If Head (Q) = Nil then Tail (Q) Nil Else

Next (P) nil

8 7 6 5 4 3 2 1

Penambahan sebuah elemen pada antrian

Penghapusan sebuah elemen pada antrian

first/Front

(40)

yaitu menggeser semua elemen kedepan begitu ada elemen yang dikeluarkan dari queue, agar lebih jelas. 1 2 3 4 5 Nmax = 5 Head = 1 Tail = 4 Nmax = 5, Inset (Q,25) 8 7 6 5 4 3 2 8 7 6 5 4 3 2 1

Procedure InsertQ (input/output Q : Queue, input ElmtQ: infotype)

{IS: Q mungkin kosong, ElmtQ terdefinisi} FS: elemen Tail dari Q bernilai ElmtQ }

{menyisipkan sebuah elemen ElmtQ sebagai Tail} Kamus :

Algoritma:

If QEmpty (Q) then

Qtail 1

QHead 1

QTabElmtQQtail elmtQ Else

If (Qtail < Nmax) then Qtail Qtail + 1

QTabElmtQQtail elmtQ

Else Output („overflow‟)

50 75 100 150 50 75 100 150 25 first/Front Last/belakang first/Front Last/belakang Tail Head Tail Head Head

(41)

1 2 3 4 5 Head = 1

Tail = 5 X=25

Procedure DeleteQ (input/output Q : Queue, input ElmtQ: infotype)

{IS: Q tidak kosong

FS: elemen yang dihapus disimpan informasinya pada ElmtQ, ElmtQ digeser}

{menyisipkan sebuah elemen ElmtQ sebagai Tail} Kamus :

Algoritma:

QEmpty Q.TabElmtQQ.Head

If (Qtail = Qhead) then (ada lebih dari satu elemen, geser semua elemen sisa) I traversal [2..Qtail] QtabElmtQ1-1 QtabElmtQ1 Qtail Qtail -1 Else QTail Nol Q.Head Nol Head Head

(42)

1 2 3 4 5 Head =1 Tail = 5 x = 200 1 2 3 4 5 Delete Q(Q,x) Head = 2 Tail = 4 x=50 50 75 100 150 200 75 100 150 200

Procedure InsertQ (input/output Q : Queue, input ElmtQ: infotype) {IS: Q mungkin kosong, ElmtQ terdefinisi}

FS: elemen Tail dari Q bernilai ElmtQ }

{menyisipkan sebuah elemen ElmtQ sebagai Tail} Kamus :

Algoritma:

If QEmpty (Q) then

Qtail 1

QHead 1

QTabElmtQQtail elmtQ Else

If (Qtail < Nmax) then Qtail Qtail + 1

QTabElmtQQtail elmtQ Else

If (Qhead > 1) then

For ( i Qhead to Qtail do)

QTabElmtQ[i-Qhead+ 1] QtabElmtQ[i]

End for

Qtail Qtail – Qhead+1` Qhead 1

Tail

Tail Head

(43)

Head = 3; tail =5 Nmax =5 1 2 3 4 5 Inser (Q,100) 1 2 3 4 5 Head = 1 Tail = 4 Overflow? Tdk Qtail Qtail +1 QtabElmtQ[Qtail] ElmtQ Else Write (overflow) Endif 5 10 15 20 25 15 20 25 100

Procedure InsertQ (input/output Q : Queue, input ElmtQ: infotype)

{IS: Q mungkin kosong, ElmtQ terdefinisi} FS: elemen Tail dari Q bernilai ElmtQ } {menyisipkan sebuah elemen ElmtQ sebagai

Head

Tail

Head

(44)

Count = 2 Newtail Head = 7 X Tail} Kamus : NewTail : Address Algoritma:

If Qcount = Nmax then Output („overflow‟) Else

Newtail Qhead + Qcount If Newtail > Nmax then

Newtail Newtail – Nmax

QTabElmtQQtail elmtQ Qcount Qcount + 1

Y Z

Z

(45)

Count = 3 Head = 7,

Tail =1

Head = 5,Tail = 1

Count = 5

Elmt =‟A‟, Nmax = 8

1 2 3 4 5 6 7 8 Insert (Q,Elmt) Head = 5, Tail = 2 Count = 6 1 2 3 4 5 6 7 8 x Y Z P Q R S T U V W P A T U V W

Procedure DeleteQ (input/output Q : Queue, input ElmtQ: infotype) {IS: Q tidak kosong}

FS: element yang dihapus disimpaninformasinyapada elmtQ {elemen Q berkurang satu}

Kamus : Algoritma:

ElmtQ QTabElmtQQhead

Qcount Qcount -1 if Qempty(Q) or Head = Nmax then Qhead 1

else

QHead Qhead + 1

Head Tail

(46)

Head = 5, Tail = 2 Count = 6 1 2 3 4 5 6 7 8 Delete(Q, T) Head = 5, Tail = 1 Count = 5 1 2 3 4 5 6 7 8 Representasi Dinamis

Queue dengan representasi Dinamis biasanya diimplementasikan dengan menggunkan pointer yang menunjuk pada elemen-elemen yang dialokasikan pada memori.

Karena semua operasi penambahan elemen pada sebuah queue ditambahkan pada akhir queue maka jika menggnakan representasi dinamis saat elemen ditambahkan akan menggunakan penambahan elemen pada akhir queue(addlast) dan saat pengambilan atau penghapusan elemen menggunakan penghapusan diawal queue (delfirst).

P A T U V W

A U V W P

Procedure insetQP (input/output Q : Queue, input P: Address) {IS: Q terdefinisi, mungkin kosong, P terdefinisi next(P) = nil} {FS:tail yang baru adalah P}

Kamus : Algoritma:

If EmptyQ(Q) then

Tail head

(47)

Antrian dengan Prioritas (Priority Qeue)

Antrian berprioritas ataun priority queue mengeluarkan elemen dari queue berdasarkan prioritas pada elemen itu, oleh karena itu elemen pada antrian berprioritas untuk menyimpan nilai prioritas pada setiap elemn.

Untuk memasukkan elemen pada sebuah antrian erprioritas tidak harus melalui sisi belakang antrian disisipkan dan diurutkan berdasarkan prioritas elemen, sedangkan mengeluarkan elemne dari antrian berdasarkan prioritas elemen.

Hal yang perlu diperhatikan saat memasukkan elen ke antrian berprioritas adalah sebagai berikut :

1. Elemen yang memiliki prioritas leih tinggi akan leih dahulu keluar dari queue 2. Jika ada dua elemen yang memiliki prioritas sama maka yang akan keluar terlebih

dahulu dari antrian adalah yang terlebih dahulu masuk kedalam antrian. Qhead P

Qtail P else

Qtail . Next P Qtail P

Procedure DeleteQP (input/output Q : Queue, input P: Address) {IS: Q tidak kosong

{FS:P adalah elemen yang dihapus, Q mungkin kosong} Kamus :

Algoritma: P Qhead

QHead Qhead .Next P . Next Nil

If (Qhead = Nil) then QTail = Nil

(48)

Operasi memasukkan elemen pada antrian berprioritas adalah sebagai berikut: Elemen baru Hasil : 1 2 4 6 9 12 1 2 4 6 9 12 1 2 3 4 6 9 12

Procedure InsertPrioQ (input/output PrioQ : Queue, input P : address)

{IS: Q terdefinisi, tidak kosong, Pterdefinisi} p FS: P menjadi elemen antrian sesuai dengan Prio(P) } {P disiisipkan dalam antrian sesuai dengan

prioritasnyal} Kamus : Pt, Prec : Address Found : Boolean head 3 Tail 3 Tail head Tail head

(49)

Algoritma: If Qempty(Q) then Qhead P Qtail P Else Found false Prec Nil Pt head(Q)

While ( Pt = Nil) and (not found) do If Prio(Pt) > Prio (P) then

Found True Else

Prec Pt Pt Next(Pt)

{Endwhile, Pt = Nil or found}

If prec = nil then {sisip dielemen ke 1} Next (P) Pt

head(Q) P else

if found then {sisip ditengah} Next(P) Pt

Next (tail(Q)) P Else{sisip dielemen ke 1} Next(Tail(Q)) P Tail(Q) P

(50)

Tugas 3. Insert(Q,H)

1. Bagaimana keluaran dari potongan algoritma

berikut: InitQ(Q)

InsertQ(Q,5) 1 2 3 4 5

InsertQ(Q,6) head = 3.,tail = 2.,Count =...

InsertQ(Q,7) InsertQ(Q,8)

DeleteQ(Q,X) 4. Delete(Q, ElmtQ) dari data diatas

DeleteQ(Q,Y) InsertQ(Q,X) InsertQ(Q,5) InsertQ(Q,Y+1) DeleteQ(Q,X) InsertQ(Q,Y) While no emptyQ(Q) do Delete(Q, X) Output (X) {endwhile} 2. a. Head = 1, Tail = 4

Setelah operasi InsertQ (Q,‟F‟) maka keadaan anrian menjadi

A D G M K

(51)

Head = .., Tail = ...

Overflow?

b.Head = 5, Tail = 3

Setelah operasi Delete (Q,‟ElmtQ‟) maka keadaan anrian menjadi

Head = ...., Tail = ..., elmt=...., overflow?

Head = 3, Tail = 3

Setelah operasi InsertQ (Q,‟F‟) maka keadaan anrian menjadi Head = .., Tail = ...

Overflow?

1. Bagaimana keluaran dari potongan algoritma berikut: InitQ(Q) X 5 Y 7 InsertQ(Q,X) InsertQ(Q,8) InsertQ(Q,y) DeleteQ(Q,z) InsertQ(Q,2) A B C D E A B C D E

(52)

InsertQ(Q,z) InsertQ(Q,6) If Z = 0 then

While not emptyQ9Q) do DeleteQ(Q, X)

Output (X) {endwhile} Else

Output(„selesai‟)

2. a. Nmax=5, Head = 1, Tail = 4

Setelah operasi InsertQ (Q,‟60‟) maka keadaan anrian menjadi Head = .., Tail = .., X=...

Overflow?

b. Nmax=5, Head = 1, Tail = 4

Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi

Head = .., Tail = ..., ElmtQ=.... Overflow?

3. a. Nmax=5, Head = 5, Tail = 4

Setelah operasi InsertQ (Q,‟200‟) maka keadaan anrian menjadi

Head = .., Tail = ..., X=....,Overflow?

b. Nmax=5, Head =5, Tail = 3

10 20 30 40 50

10 20 30 40 50

(53)

Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi

Head = .., Tail = ...,ElmtQ=...,Overflow?

4. a. Head = 1, Tail = 4

Setelah operasi InsertQ (Q,‟60‟) maka keadaan anrian menjadi

Head = .., Tail = ...,X=...,count=..., Overflow?

b. Head = 1, Tail = 3

Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi

Head = .., Tail = .., elmtQ=...,count=..., Overflow?

5. a. Head = 3, Tail = 5

Setelah operasi InsertQ (Q,‟200‟) maka keadaan anrian menjadi

Head = .., Tail = ..., X=..., count=...,Overflow?

b. Head = 2, Tail =5 30 50 70 90 100 10 20 30 40 50 10 20 30 40 50 30 50 70 90 100 30 50 70 90 100

(54)

Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi

Head = .., Tail = ..., elmtQ=...., count=....,Overflow?

6. a. Head = 1, Tail = 4

Setelah operasi InsertQ (Q,‟40‟) maka keadaan anrian menjadi Head = .., Tail = ..,X=...

b. Head = 1, Tail = 5

Setelah operasi DeleteQ (Q,‟60‟) maka keadaan anrian menjadi Head = .., Tail = ...,X=...

POHON (TREE) 5.1 Pengertian Pohon

Pohon atau tree adalah salah satu bentuk konsep struktur data yang terdiri dari akar dan simpul-simpul yang berada dibawah akar. Misalnya pohon sisilah keluarga, struktur organisasi,dll.

Pada gambar dibawah sebuah KOTAK dianggap sebagai SIMPUL (node atau vetex) sedangkan simpul yang paling atas yang berisi “Ketua Umum” dianggap sebagai AKAR

(root). Bagian simpul “Wakil Ketua 1” kebawah disebut sebagai SUBPOHON (subtree)

begitu juga dengan simpul “Wakil ketua 2” kebawah.

10 30 60 70 90

(55)

Anak(child) dan Orang tua (parent)

Jika X adalah Simpul, maka akar tiap-tiap subpohon dari X disebut anak, dan X adalah orang tua setiap akar subpohon. Pada gambar diatas, B dan C adalah anak dari A, dan A adalah orang tua dari anak-anaknya itu. Begitu juga F,G adalah anak dari C, dan C adalah orang tua dari F,G

Derajad (degree)

Derajad adalah jumlah subpohon pada setiap simpul/ banyaknya tingkat simpul turunan dari suatu simpul tertentu, Misal : “Ketua Umum(A) memiliki derajad 2, Kepala Divisi

kekeluargaan(E) memiliki derajad 1, dsb.

Daun (Leaf)

Simpul yang mempunyai derajat nol disebut daun. H,i,j,k,l adalah daun dari pohon pada gambar 1. Daun sering dinamakan simpul terminal atau yang tidak mempunyai subpohon. Dalam struktur pohon juga dukenal istilah kedalaman (depth). Simpul bukan terminal disebut simpul dalam (internal nodes).

Lintasan (path)

Lintasan dari simpul n1 ke simpul simpul nk adalah runtunan simpul n1, n2,..,nk sedemikian sehingga n1 adalah orang tua dari n(i+1) untuk 1>/ < k. Pohon pada gambar 1, lintasan dari A ke J adalah A,B,E,J. Lintasan dari B ke i adalah A,B,D,I.

Panjang lintasan adalah jumlah sisi yang dilalui dalam suatu lintasan. Panjang lintasan dari A ke i adalah 3, Panjang lintasan dari C ke K adalah 2.

1 2 3 4 Ketua Umum A

Wakil Ketua 1 B Wakil ketua 2 C

Kepala Devisi

Keuangan D Kepala Divisi kekeluargaan E Kepala Divisi Produksi F Kepala Divisi pemasaran G Bendahara 2 h Bendahara 1 i Staf Administrasi j

(56)

MENGGUNAKAN NOTASI KURUNG : (A ( B ( E, F ), C ( G ), D ( H, I ) )

5.2 POHON BINER

Pohon Biner atau binary tree adlah pohon yang setiap simpulnya memiliki simpul turunan

atau sub pohon maksimal dua yang disebut sebagai pohon kiri (left subtree) dan subpohon kanan (right subtree).

Jenis-jenis pohon iner sebagai berikut:

Pohon biner lengkap (complete binary tree) yaitu pohon biner yang setiap simpulnya mempunyai dua buah simpul turunan.

Pohon biner condong kekiri (Left skewed binary tree) A B C D E F G H I A B E

(57)

Pohon biner condong kanan (right skewed binary tree)

Pohon biner sembarang

Contoh pohon dan representasinya dengan larik

Representasi dengan larik

info kiri kanan

1 30 2 3 2 14 4 5 3 70 6 7 4 21 8 0 5 8 0 0 6 12 0 0 A D i A B C E F G A B C D E F G H I 30 14 10 70 21 8 11 12 15 27

(58)

5.2.1 Operasi pada Pohon Biner

Operasi yang dapat dilakukan pada pohon biner antara lain kunjungan terhadap simpul-simpulnya. Jenis-jenis knjungan pada pohon biner antara lain preorder, inorder, postorder, dan levelorder. Kunjungan dengan orientasi LRO(Left to Riight Oriented) dimana kunjungan selalu dimulai dari supohon kiri baru kemudian supohon kanan. Juga ada RLO (Right to Left Oriented) dimana kunjungan selalu dimulai dari subpohon kanan baru kemudian kesubpohon kiri.

PreOrder

Kunjungan preorder merupakan kunjungan pada pohon biner yang dimulai dari akar kemudian kesubpohon kiri dikunjungi baru kesubpohon kanan dikunjungi.

Maka : A – B – D – E – C – F – G - H

Maka dengan kunjungan preorder akan menghasilkan urutan simpul yang dikunjungi A – B – D – E – C – F – G – H. InOrder 7 15 9 10 8 10 0 0 9 11 0 0 10 27 0 0 A B H C D E F G

(59)

Kunjungan inorder merupakan kunjungan pada pohon biner yang dimulai dari simpul-simpul turunan subpohon kiri, akar, baru kemudian simpul-simpul turunan pada supohon kanan, misalnya pada contoh diatas maka kunjungan inorder menghasilkan simpul yang dikunjungi D – B – E – A – F – C –H – G.

PostOrder

Kunjungan postorder merupakan kunjungan pada pohon biner yang dimulai dari simpul-simpul turunan subpohon kiri, baru kemudian simpul-simpul-simpul-simpul turunan pada subpohon kanan, kemudian akar, Misalnya pada contoh diatas maka dengan kunjungan postordermenghasilkan urutan simpul yang dikunjungi D – E – B –F – H – G – C –A.

Menyalin dan Membandingkan Pohon Biner

Menyalin pohon biner ke pohon biner lainnya dapat dilakukan dengan menggunakan salah satu operasi kunjungan sambil membuat simpul baru yang sama dengan simpul yang disalin sebagai simpul pohon biner hasil dari penyalinan pohon biner yang disalin. Egitu juga dengan membandingkan dua buah pohon biner, jika semua simpul yang dikunjungi sama maka dapat dikatakan bahwa dua buah pohon biner merupakan pohon biner yang sama.

Contoh; PreOrder : * + a / b c – d *e f (prefix) InOrder :a + b / c * d – e * f (infix) Postorder : a b c / + d e f * - * (postfix)

Procedure PreOrder (input T : pohon_biner) {mengunjungi simpul pohon secara preorder IS: T mungkin kosong}

{FS:semua simpul T sudah dikunjungi secara preorder} Kamus :

*

+ b - a / e d

*

f C

(60)

Mencari apakah X terdapat didalam pohon T Algoritma: If T = then Proses (Info(T)) PreOrder(kiri(T)) PreOrder(kanan(T))

Procedure InOrder (input T : pohon_biner) {mengunjungi simpul pohon secara InOrder IS: T mungkin kosong}

{FS:semua simpul T sudah dikunjungi secara InOrder} Kamus : Algoritma: If T = then InOrder (Kiri(T)) Proses (Info(T)) InOrder(kanan(T))

Procedure PostOrder (input T : pohon_biner) {mengunjungi simpul pohon secara postOrder IS: T mungkin kosong}

{FS:semua simpul T sudah dikunjungi secara postOrder} Kamus : Algoritma: If T = then PostOrder(kiri(T)) PostOrder(kanan(T)) Proses (Info(T))

Procedure cariX (input T : pohon_biner, x: infotype output ketemu : boolean)

{mengunjungi apakah X terdapat didalam pohon} IS: T mungkin kosong, x adalah info yang dicari} {FS:ketemu=true jika X ditemukan, false jika tdk} Kamus : Algoritma: If T = then Ketemu false else if info(T) = X then ketemu true

(61)

Pohon n-er

Pengertian pohon n-er

Pohon n-er adalah struktur pohon yang memiliki simpul turunan lebih dari dua.

Pada sebuah pohon n-er juga dapat dilakukan kunjungan pada simpul-simpulnya seperti halnya pada pohon biner, misalkan jika pohon pada gambar diatas dikunjungi secara preorder akan menghasilkan urutan simpul A – B – E – F – C – G – D – H – I – J – K – L - M. Jika dilakukan kunjungan secara post order akan menghasilkan urutan simpul E – F – B – G – C – H – I - K – L – M – J – D – A. CONTOH ; a*b – 3^x else CariX(kiri(T), X, ketemu) CariX(kanan(T), X, ketemu) A B C D E F G H I K L M - * ^ a b 3 X

(62)

GRAF(GRAFH)

GRAF(GRAFH) adalah sebuah konsep struktur data yang terdiri dari kumpulan simpul (node) dan garis (arc). Sebuah garis harus diawali dan diakhiri dengan sebuah simpul.

Misalnya garis a dinyatakan dengan a={A, B) diartikan bahwa garis a diawali dengan simpul A dan diakhiri dengan simpul B sedangkan simpul yang terhubung dengan sebuah garis disebut dengan simpul tetanggga sehingga dapat dikatakan simpul A bertetangga dengan simpul B.

Pada sebuah Graf juga terdapat istilah yang disebut jalur (path) dimana jalur adalah

kumpulan garis dan simpul yang berawal dari suatu simpul menuju simpul tertentu, misal P adalah sebuah jalur dari simpul A ke simpul G maka dapat dinyatakan bahwa P={A,B,E,G}. Sebah jalur yang memiliki simpul akhir sama dengan simpul awal disebut dengan jalur

tetutup (closed path) sedangkan jalur yang terbentuk dari simpul-simpul yang berbeda disebut dengan jalur sederhanan (simple path) seperti halnya jalur dari simpul A ke simpul G.

Sebuah graf dikatakan sebagai graf lengkap (complete graph) jika dari semua simpul yang ada dapat dibuat sebuah garis ke semua simpul yang lain.

f A C B D E F G a e c d b g h i A C B D a e f b d c

(63)

Sebuah graf disebut graf terhubung (connected graph) jika semua simpul yang ada terhubung dengan minimal satu simpul lain seperti pada gambar diatas tidak ada sebuah simpul yang berdiri sendiri.

Sebuah graf pada garisnya memiliki arah disebut dengan graf berarah (directed graph) seperti gambar. Dimana pada graf berarah sebuah garis atau jalur harus ditulis sesuai dengan arah yang ada pada graf.

Implementasi Graf

Representasi statis

Sebuah graf dapat diimplementasikan dengan representasi statis dengan menggunakan array. Ada beberapa cara mengimplementasikan sebuah graf dengan menggunakan sebuah array:

a. Matrik tetangga

Matrik tetangga merupakan salah satu cara untuk merepresentasikan graf berarah dengan menggunakan array.

Dimana angka 1 (satu) menyatakan bahwa simpul awal tidak mempunyai jalur ke simpul tujuan. Simpul-simpul yang memiliki jalur adalah sebagai berikut:

A B C D E F A 0 1 O O O 0 B 0 0 0 1 1 0 C 1 0 0 0 0 0 D 1 0 1 0 0 0 E 0 0 0 1 0 1 F 0 0 0 1 0 0 A C B D E F a f b e d g h c i SIMPUL AWAL SIMPUL TUJUAN

(64)

 Simpul A memiliki jalur dan bertetangga dengan simpul B

 Simpul B memiliki jalur dan bertetangga dengan simpul D dan E

 Simpul C memiliki jalur dan bertetangga dengan simpul A

 Simpul D memiliki jalur dan bertetangga dengan simpul A dan C

 Simpul E memiliki jalur dan bertetangga dengan simpul D dan F

 Simpul F memiliki jalur dan bertetangga dengan simpul D

Implementasi dengan bahasa algoritmik :

Matgraph : array [1..6, 1..6] of integer

 (0, 1, 0, 0, 0, 0),  (0, 0, 0, 1, 1, 0),  (1, 0, 0, 0, 0, 0),  (1, 0, 1, 0, 0, 0),  (0, 0, 0, 1, 0, 1),  (0, 0, 0, 1, 0, 0) Matrik Jalur

Matrik jalur merupakan salah satu cara untuuk merepresentasikan graf berarah dengan menggunakan array.

Dimana angka 1 (satu) menyatakan bahwa simpul awal tidak memiliki jalur ke simpul tujuan, dan angka 0 (nol) menyatakan bahwa simpul awal tidak memiliki jalur ke simpul tujuan. Bedanya dengan matrik tetangga, angka 1 menyatakan jika simpul

A C B D F a f b e d g h c i E

(65)

awal bertetangga secara langsung dengan simpul tujuan, sedangkan matrik jalur, simpul awal tidak harus bertetangga secara langsung dengan simpul tujuan, asalkan ada jalur yang dari simpul awal ke simpul tujuan melewati simpul manapun maka dianggap bernilai 1. A B C D E F A 1 1 1 1 1 1 B 1 1 1 1 1 1 C 1 1 1 1 1 1 D 1 1 1 1 1 1 E 1 1 1 1 1 1 F 1 1 1 1 1 1

Dari representasi diatas bahwa semua simpul dapat ditempuh dari simpul manapun. Implementasi dengan ahasa algoritmik:

array [1..6, 1..6] of integer matgraph ={

 (1, 1, 1, 1, 1, 1),  (1, 1, 1, 1, 1, 1),  (1, 1, 1, 1, 1, 1),  (1, 1, 1, 1, 1, 1),  (1, 1, 1, 1, 1, 1),  (1, 1, 1, 1, 1, 1) 3. Matrik Beban

Matrik beban merupakan salah satu cara untuk merepresentasikan graf berrarah yang memiliki beban dengan menggunakan array. Matrik beban biasa digunakan untuk merepresentasikan graf berarah yang pada jalurnya terdapat nilai atau eban tempuh. Graf berarah yang memiliki beban biasanya digunakan untuk menggambarkan letak-letak kota-kota besarta jarak tempuhnya. Representasi graf dengan menggunakan matrik beban:

Dimana angka bukan nol menyatakan bahwa simpul awal memiliki jalur ke simpul tujuan dengan beban yang dituliskan pada matrik, dan angka 0 (nol) menyatakan bahwa simpul awal tidak memiliki jalur ke simpul tujuan. Pada dasarnya matrik beban sama dengan matrik tetangga hanya berbeda penanda adanya jalur, angka 1 (satu) pada matrik tetangga dan nilai beban pada matrik beban.

(66)

A B C D E F A 0 3 O O O 0 B 0 0 0 3 7 0 C 3 0 0 0 0 0 D 8 0 3 0 0 0 E 0 0 0 4 0 4 F 0 0 0 2 0 0 MATRIK BEBAN

Matgraph : array [1..6, 1..6] of integer

Matgraf = {  (0, 3, 0, 0, 0, 0),  (0, 0, 0, 3, 7, 0),  (3, 0, 0, 0, 0, 0),  (8, 0, 3, 0, 0, 0),  (0, 0, 0, 4, 0, 4),  (0, 0, 0, 2, 0, 0) CONTOH SOAL

Buatlah graf yang memggunakan matrik tetangga:

A C B D F 3 7 3 3 3 4 2 8 4 E

(67)

A B C D E F A 0 1 O O O 0 B 0 0 0 1 1 0 C 1 0 0 0 0 0 D 1 0 1 0 0 0 E 0 0 0 1 0 1 F 0 0 0 1 0 0 SIMPUL AWAL SIMPUL TUJUAN

Gambar

Gambar 1 Ilustri Struktur data  1.2.1 Tujuan Struktur Data
Gambar 2 Senarai dengan Tigah Buah Elemen
Gambar 7 senarai berputar  2.2.3 List ganda
Tabel  terpakai 2 elemen FirstAvail  L2  L1  FirstList                                2                1 FirstAvail                                              7                 6 L1                      10                          9                4

Referensi

Dokumen terkait

Menganalisis dan mengkaji interaksi politik dan hukum dalam penyusunan legislasi daerah di Dewan Perwakilan Rakyat Daerah Kabupaten Ciamis konseptualisasi yang lazim diterima bahwa

Dalam pembelajaran matematika pengembangan komunikasi matematik dan aspek afektif sebagai bagian dari hasil belajar matematik berlangsung secara bersamaan, dan secara

1) Jasa Akses Internet, maksudnya adalah penyedia jasa sebuah akses internet yang diberikan kepada masyarakat untuk digunakan dan diambil manfaatnya. 2) Alat

Mengidentifikasi perlunya tindakan segera yang dilakukan oleh bidan atau dokter untuk dikonsultasikan atau ditangani bersama anggota tim kesehatan lain sesuai

Penerapan hukum terhadap harta dalam perjanjian perkawinan adalah berlaku saat perkawinan dilangsungkan yang bertujuan untuk melakukan proteksi terhadap harta

Petani yang memiliki umur yang semakin tua (&gt;50 tahun) biasanya semakin lamban mengadopsi ilmu baru atau inovasi baru yang dijelaskan oleh penyuluh dan cenderung hanya

Karena proses pendataan yang dipakai di PT.Kharisma Prima Abadi sela ma ini masih menggunakan proses manual dan menggunakan Microsoft Office Excel, maka penulis ingin membuat

Adapun hasil penelitian pada perusahan yang dinyatakan pailit, para pekerja harus mendapatkan hak yang bersifat ekonomis, hak yang bersifat politis dan hak yang bersifat