Anda di halaman 1dari 64

UPT PELATIHAN KERJA JEMBER 2018

KATA PENGANTAR

Dengan rasa syukur Alhamdulillah kami panjatkan kehadirat Tuhan

Yang Maha Kuasa atas limpahan Rahmat-Nya sehingga buku saduran dengan

judul “PENGENALAN ALGORITMA DAN STRUKTUR DATA (ARRAY,

MATRIKS DAN STACK)” ini dapat kami selesaikan.

Buku ini disusun hanya untuk kalangan sendiri yaitu UPT Pelatihan

Kerja Jember sekaligus sebagai sarana untuk meningkatkan kualitas

profesionalime Instruktur agar tidak ketinggalan dengan kemajuan teknologi yang

semakin hari semakin berkembang dengan pesat.

Buku ini masih terbuka untuk berbagai perbaikan-perbaikan demi

peningkatan kualitas penulisan maupun isinya. Oleh karena itu penulis

mengharapkan adanya masukan-masukan saran maupun kritik dari pembaca.

Penulis juga mengucapkan banyak terima kasih atas dukungan semua pihak yang

telah mendukung pembuatan buku ini sehingga buku ini dapat terselesaikan.

Semoga buku ini bermanfaat bagi penulis maupun pembaca lainnya

untuk meningkatkan pengetahuan, ketrampilan dan produktivitas kerja dalam

rangka berperan serta untuk pembangunan ketenagakerjaan.

Jember, November 2018

Penulis,

pengenalan algoritma dan struktur data


I
(array, matriks dan stack)
UPT PELATIHAN KERJA JEMBER 2018

DAFTAR ISI

KATA PENGANTAR..........................................................................i
DAFTAR ISI...................................................................................ii
BAB I PENDAHULUAN...................................................................1
1.1 Latar Belakang..........................................................................1
1.2 Tujuan.....................................................................................1
BAB II ALGORITMA & STRUKTUR DATA........................................3
2.1 Paradigma Rekayasa Perangkat Lunak.......................................3
2.2 Algoritma dan Struktur Data......................................................5
2.2.1 Algoritma..............................................................................5
2.2.2 Struktur Data.........................................................................7
2.3 Tujuan Pembentukan Struktur Data..........................................10
BAB III ARRAY DAN MATRIKS (LARIK)......................................15
3.1 Definisi Array..........................................................................15
3.2 Kamus Data Array...................................................................16
3.3 Pemrosesan Array...................................................................16
3.4 Panjang Array.........................................................................18
3.5 Pengalamatan Array dalam Memory.........................................21
3.6 Traversing (Pengunjungan Array).............................................23
3.7 Menyisipkan Dan Menghapus Array..........................................24
3.8 Sorting Array..........................................................................26
3.9 Pencarian...............................................................................29
3.10 Definisi Matriks.......................................................................30
3.11 Kamus Data Matriks................................................................31
3.12 Pemrosesan Matriks................................................................31
3.13 Pengalamatan Matriks.............................................................34
BAB IV STACK (TUMPUKAN).......................................................38
4.1 Definisi Stack..........................................................................38
4.2 Representasi Lojik...................................................................39
4.3 Traversal dan Search...............................................................39

pengenalan algoritma dan struktur data


II
(array, matriks dan stack)
UPT PELATIHAN KERJA JEMBER 2018

4.4 Operasi dan Fungsi Dasar........................................................40


4.5 Representasi Fisik Kontigu.......................................................41
4.6 Kamus Data............................................................................45
4.7 Operasi Dasar Pada Stack........................................................45
4.8 Representasi Stack (Penerapan Stack)......................................47
4.9 Ekspresi Aritmetik...................................................................48
4.10 Notasi Aritmatik (Infix, Prefix dan Postfix).................................51
4.11 Rekursif..................................................................................56
DAFTAR PUSTAKA.......................................................................58
COVER BUKU YANG DISADUR.....................................................59
DAFTAR ISI BUKU YANG DISADUR.......................................................60

pengenalan algoritma dan struktur data


III
(array, matriks dan stack)
BAB I PENDAHULUAN

I.1 Latar Belakang

Buku Saduran ini bertujuan memberi bekal pengetahuan dan

ketrampilan kepada peserta pelatihan tentang algoritma dan struktur data

yang merupakan sub materi dari Pemrograman. Pemrograman merupakan

mata pelajaran yang membekali siswa agar dapat membangun sebuah

aplikasi atau software sesuai dengan kebutuhan dengan bahasa

pemrograman yang telah ditentukan. Dalam proses pembelajaran, siswa

dapat mengomunikasikan gagasan atau konsep berupa logika dan

algoritma yang dikemukakan orang lain dan mewujudkannya melalui

bahasa pemrograman, dengan tujuan membangun sebuah Sistem

Informasi . Ruang lingkup saduran ini berkenaan dengan pengenalan

tentang dasar algoritma dan struktur data yang merupakan pengetahuan

dasar dalam memasuki dunia pemrograman di dunia teknologi informasi

ini.

I.2 Tujuan

Adapun tujuan dari penyaduran buku ini adalah:

1. Sebagai bahan untuk proses belajar mengajar di lingkungan UPT

PK Jember sehingga peserta pelatihan akan terarah sesuai dengan

tujuan dari proses latihan.

pengenalan algoritma dan struktur data


1
(array, matriks dan stack)
2. Bagi peserta pelatihan sebagai panduan belajar dalam bidang

teknologi informasi dan komunikasi.

3. Bagi penulis untuk memenuhi persyaratan dalam mendapatkan

angka kredit sehingga dapat dipertimbangkan untuk kenaikan

pangkat satu tingkat yang lebih tinggi.

pengenalan algoritma dan struktur data


2
(array, matriks dan stack)
BAB II ALGORITMA & STRUKTUR DATA

II.1 Paradigma Rekayasa Perangkat Lunak

Sebelum kita membuat program sebaiknya megenal beberapa

paradigma dalam menghasilkan suatu perangkat lunak atau yang dikenal

dengan nama rekayasa perangkat lunak. Beberapa paradigma yang umum

digunakan adalah :

1. Daur Hidup Klasik (The Classic Life Cycle atau Waterfall), terdiri dari

beberapa tahapan seperti berikut :

a. Pengumpulan kebutuhan

b. Analisa kebutuhan

c. Desain

d. Pemrograman

e. Pengujian

f. Pemeliharaan

S y s te m
E n g in e r in g

A n a ly s is

D e s a in

C ode

T e s t in g

M a in t e n a n c e

2. Prototipe (prototyping), terdiri dari beberapa tahap sebagai berikut :

pengenalan algoritma dan struktur data


3
(array, matriks dan stack)
a. Pengumpulan kebutuhan

b. Desain Cepat

c. Bangun Prototipe

d. Evaluasi prototipe

e. Perbaikan prototipe, jika prototipe belum selesai ulang langkah b

f. Produk perangkat lunak

P ro to ty p in g
S ta rt

R e q u ir e m e n t s
S to p g a t h e r in g &
s n a l y s is

M odel E N g in e e r Q u ic k
P ro d u c t D e s ig n
P a p e r p r o t o t ip e
w o r k i n g p r o t i t ip e
E x i s t in g P r o g r a m

R e f in in g B u li d
P r o t o t ip e P r o t o t ip e

C u s to m e r
E v a lu a t io n

3. Model Spiral, terdiri dari beberapa tahap seperti berikut :

a. Perencanaan dan pengembangan

b. Analisa resiko oleh pengembang dan pemesan

c. Rekayasa perangkat lunak

d. Evaluasi oleh pemesan, bila rekayasa perangkat lunak belum selesai

ulangi langkah a.

pengenalan algoritma dan struktur data


4
(array, matriks dan stack)
P la n n in g R is k A n a lis y s

R is k a n a l is y s b a s e d o n
I n it i a l r e q u r e m e n t s
in it i a l r e q u ir e m e n t s
g a t h e r in g a n d
p r o j e c t p la n n in g R is k a n a lis y s b a s e d o n
c u s t o m e r r e a c t io n

P la n n i n g b a s e d - o n
c o s tu m e r c o m m e n ts
T o w a r d a c o m p le t e d
s y s te m
C o s t u m e r e v a l u a t io n
I n it ia l s o f t w a r e p r o t o t ip e

N e x t le v e l p r o t o t ip e

E n g in e e r e d s y s t e m
C o s tu m e r
e v a lu a tio n E n g in e e r in g

II.2 Algoritma dan Struktur Data

Secara garis besar perangkat lunak atau biasa dikenal dengan

nama ‘program’ terdiri dari kumpulan algoritma dan struktur data.

PROGRAM = ALGORITMA + STRUKTUR DATA

Apakah kaitan antara algirtma dengan struktur data? mengapa

perlu mempelajari struktur data dan algoritma? Untuk labih jelasnya akan

diperkenalkan istilah-istilah berikut.

II.2.1 Algoritma

Algoritma adalah deskripsi langkah-langkah penyelesaian masalah

yang tersusun secara logis atau urutan logis pengambilan

keputusan untuk pemecahan masalah.

- Ditulis dengan notasi khusus

- Notasi mudah dimengerti

pengenalan algoritma dan struktur data


5
(array, matriks dan stack)
- Notasi dapat diterjemahkan menjadi sintaks suatu bahasa

pemrograman.

Algoritma sebenarnya mirip dengan yang kita temui dalam

kehidupan kita sehari-hari, misalnya resep makanan, resep kue,

cara merawat kendaraan, dsb. Disana akan ditemukan langkah-

langkah logis untuk penyelesaian suatu masalah. Bedanya, pada

algoritma setiap langkah difokuskan pada sistem komputer atau

data.

Contoh :

- Algoritma untuk mencari nilai maksimum pada sekumpulan

data yang tiak terurut.

- Algoritma untuk mengurutkan data, sehingga menjadi

terurut (sorting)

- Algoritma untuk mencetak bilangan ganjil dari 1 sampai

dengan 19, dll.

Hal-hal yang perlu diperhatikan dalam membuat algoritma adalah

mencari langkah-langkah yang paling sesuai untuk pemecahan

masalah, karena setiap algoritma mempunyai karakteristik tertentu

yang memiliki kelebihan dan kekurangan. Beberapa hal yang perlu

dipahami dalam mencari algoritma antara lain :

- Masalah seperti apa yang hendak dilakukan ?

- Gagasan apa yang ada pada algoritma tersebut ?

- Berapa lama yang diperlukan untuk menyelesaikan masalah?

pengenalan algoritma dan struktur data


6
(array, matriks dan stack)
- Berapa jumlah data yang dapat ditangani oleh algoritma

tersebut?

Untuk mengetahui seberapa besar kualitas suatu algoritma,

biasanya dinyatakan dengan notasi-O besar (big O-notation). Notasi

ini digunakan oleh ahli komputer untuk menyatakan kelas

kekompleksian sesuatu algoritma.

II.2.2 Struktur Data

Struktur data adalah model logika / matematika yang secara khusus

mengorganisasikan data. Sebuah model harus dapat mencerminkan

keterhubungan data dengan dunia nyata dan bentuknya

sederhana/efektif (dapat memproses data sesuai kebutuhan).

Seiring perkembangan teknologi informasi, masalah-masalah yang

harus diselesaikan dengan komputerisasi semakin besar dan

konpleks. Dengan demikian analisis sistem maupun programmer

dituntut untuk semakin profesional dalam mengimplementasikan

masalah dalam sistem program yang dirancangnya.

Beberapa masalah yang dihadapi dalam penyelesaian masalah

dengan komputer adalah :

1. Memahami secara menyeluruh hubungan elemen-elemen

data yang relevan terhadap solusi masalah

2. Penentuan operasi-operasi yang dilakukan terhadap elemen-

elemen data

pengenalan algoritma dan struktur data


7
(array, matriks dan stack)
3. Perancangan metode representasi elemen-elemen data di

memeory sehingga memenuhi kriteria :

4. Memenuhi hubungan logika antar elemen-elemen data

5. Operasi terhadap elemen-elemen data dapat dilakukan

secara mudah dan efesien

6. Menentukan bahasa pemrograman untuk menerjemahkan

solusi masalah

Istilah-istilah dalam struktur data :

- Data : Nilai / kumpulan data

- Tipe data : Jenis data yang ditangani bahasa

pemrograman

- Objek data : Kumpulan elemen data

- Entity : Sesuatu yang mempunyai atribut atau

sifat tertentu dan mempunyai harga (numerik/non numerik)

- Entity Set : Kumpulan entity dengan atribut yang

sama

- Informasi : Data dengan atribut tertentu, sudah

diproses dan mempunyai arti

- Struktur data : Model logika atau matematik dari

organisasi data tertentu

Untuk membuat suatu objek data menjadi struktur data, ada

beberapa proses yang harus dilakukan terhadap objek data

tersebut antara lain :

pengenalan algoritma dan struktur data


8
(array, matriks dan stack)
1. Mendeskripsikan kumpulan operasi yang diterapkan terhadap

elemen-elemen objek data

2. Menunjukkan mekanisme kerja operasi-operasi

Struktur data berbeda dengan objek data, karena struktur data

mendeskripsikan tiga hal, yaitu :

1. Kumpulan objek data

2. Operasi-operasi dasar terhadap objek data

3. hubungan (relasi) antar objek data

4. jadi STRUKTUR DATA = Objek data + (Operasi/manipulasi)

Struktur data dapat dinyatakan sebagai triple (D,F,A) disingkat d,

yaitu :

1. Domain D,d  D

2. kumpulan fungsi F, yaitu kumpulan-kumpulan operasi

terhadap anggota didalam D

3. Kumpulan Aksiom A, yaitu kumpulan relasi atau inverian

yang dipenuhi oleh anggota di domain D

II.3 Tujuan Pembentukan Struktur Data

Tujuan Pembentukan Struktur data adalah sebagai information

hiding encapsulation, yaitu :

1. Perubahan implementasi struktur data tidak mengubah program

yang menggunakan struktur data bila interface cara panggil

pengenalan algoritma dan struktur data


9
(array, matriks dan stack)
terhadap prosedure dan fungsi pada struktur data itu telah

dirancang secara bagus sehingga tidak berubah.

2. Pemakaian dan pembuatan struktur data dapat dilakukan secara

terpisah yang hanya perlu kesepakatan mengenai interface

pemakaian struktur data.

3. Struktur data merupakan sarana pemrograman modular dan

menjadi landasan terbentuknya tim pemrograman

Operasi-Operasi dalam Struktur Data :

1. Traversing : Mengunjungi record tepat satu kali

2. Searching : Menemukan lokasi record dengan kunci

tertentu atau menemukan lokasi semua record yang

memenuhi satu kali / lebih

3. Inserting : Menambah record baru ke struktur

4. Deleting : Menghapus record baru dari struktur

5. Sorting : Menyusun recor dalam urutan tertentu

6. Margening : Menggabungkan dua file terurut

menjadi dua file terurut

7. Updating : Mengganti item di record dengan data

baru

Terdapat dua jenis struktur data, yaitu :

- Struktur data statis – yaitu struktur data yang tidak

berubah, seperti array / larik, record, himpunan

pengenalan algoritma dan struktur data


10
(array, matriks dan stack)
- Struktur data dinamis – yaitu struktur data yang berubah,

seperti list / senarai, queue / antrian / giliran, stack /

tumpukan.

Beberapa jenis struktur data telah disediakan pada bahasa

pemrograman ( bahasa pascal), yaitu struktur data Array, set, record,

string, int, dll. Serta struktur data lainnya yang belum ada dapat dibentuk

sendiri misalnya struktur data LIST BERKAIT / SENERAI, STACK, QUEUE,

TREE, GRAF.

Contoh-contoh struktur data :

1. Array

Array adalah struktur data yang diproses melalui indeksnya.

Struktur data ini termasuk yang paling mudah digunakan. Ada yang terdiri

darti satu dimensi (array linier), dua dimensi (matriks) dan multidimensi.

Contoh array A dengan delapan indeks sebagai berikut :

Array A satu dimensi :

8 indeks (1 /sd 8) dan data 1, 7, 18, dsb.

1 7 18 03 69 24 08 70

1 2 3 4 5 6 7 8

2. Link List

Link list adalah struktur data yang diproses melalui alamat kepala

(awal). Info adalah tempat untuk datanya, Next adalah untuk menyimpan

alamat berikutnya. Struktur ini merupakan struktur data dinamis dimana

ukurannya boleh berubah (bertambah) pada saat ekseskusi program.

pengenalan algoritma dan struktur data


11
(array, matriks dan stack)
Aw al In fo N ext

s A B C

q X

3. Tree

Tree adalah struktur data yang diproses melalui alamat akarnya

(root) struktur ini merupakan struktur data dinamis dimana ukurannya

boleh berubah. Atanya mempunyai hubungan hirarki di antara elemennya.

B C D

E F

4. Stack

Struktur data ini diproses (penambahan dan penghapusan data)

hanya pada satu ujung yaitu pada posisi TOP-nya. Struktur data ini

menggunakan sistem LIFO (Last In First Out)

pengenalan algoritma dan struktur data


12
(array, matriks dan stack)
T u m p u k a n d e n g a n t ig a d a t a
(1 8 , 0 3 , 6 9 y a n g m e ru p a k a n
p o s is i T O P

69 T O P

03

18

5. Queue

Struktur data ini diproses dari dua ujung, penambahan pada posisi

belakang sedangkan penghapusan pada posisi depan. Struktur data ini

menggunakan sistem FIFO (First In First Out). Contoh : queue pembelian

karcis di loket.

A n tr ia n d e n g a n tig a e le m e n ( 1 8 , 0 3 , 6 9 )
p o s is i d e p a n a d a la h 1 d a n p o s is i
b e la k a n g a d a la h 3

18 03 69

B e la k a n g D ep a n

6. Graf

Struktur data graf mirip dengan struktur data tree, hanya saja

hubungan antara data tidak selalu hubungan hirarki. Contoh : jalan yang

menghubungkan beberapa kota misalnya S, Y, T S

pengenalan algoritma dan struktur data


13
(array, matriks dan stack)
G r a f d e n g a n s im p u l X ,
Y, T dan S
7
3
X Y

6 2
1

T S
4
5

pengenalan algoritma dan struktur data


14
(array, matriks dan stack)
BAB III ARRAY DAN MATRIKS (LARIK)

III.1 Definisi Array

Array / larik adalah struktur data yang mengacu pada sebuah /

sekumpulan elemen yang di akses melalui indeks. Setiap elemen array

dapat diakses melauli indeksnya, misalnya mengisi elemen array yang ke

3 dengan nilai 100, maka cara mengisinya adalah A[3]  100. contoh

array bernama A dengan 8 buah elemen dapat dilihat pada gambar

berikut ini :

1 2 3 4 5 6 7 8

Elemen array : A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]

Indek array : 1 2 3 4 5 6 7 8
Mengisi elemen array : A[3]  100

Keuntungan struktur data array :

- paling mudah pengoperasiannya

- Ekonomis dalam pemakaian memory, bila semua elemen terisi

- Akses kesetiap elemen memerlukan waktu yang sama

Kerugiannya :

- Memboroskan tempat jika banyak elemen yang tidak

digunakan

pengenalan algoritma dan struktur data


15
(array, matriks dan stack)
III.2 Kamus Data Array

Sebelum elemen array dapat digunakan, perlu didefinisikan dahulu

pada kamus data sebagai berikut :

KAMUS
Nama: array [1..400] of string {array dengan tipe data string}
Panjang : array [a..e] of real {array dengan tipe data real}
Type TITIK : record <X:real, Y:real>
Kurva: array[0..30] of Titik {array dengan tipe data record}

Yang perlu diingat bahwa :

1. elemen array harus memiliki tipe data yang sama atau sejenis

(homogen), seperti integer, real, char, string, boolean, record.

Artinya array tersebut didefinisikan sebagai integer maka nilai

yang boleh masuk kedalam elemen array harus bertipe

integer.

2. indeks array harus memiliki tipe data yang menyatakan

keterurutan, seperti integer atau karakter.

III.3 Pemrosesan Array

Ada beberapa pemrosesan yang dapat dilakukan terhadap array.

Algoritma yang paling mudah untuk melakukan pemrosesan yaitu dengan

menggunakan bentuk perulangan For-To-Do, dengan alasan bahwa

elemen array memiliki indeks yang berturut.

Berikut adalah satu pola untuk memproses array :

pengenalan algoritma dan struktur data


16
(array, matriks dan stack)
III.3.1.1.1 KAMUS
Cons : N=10 {jumlah elemen array}
Indeks : integer
A : array[1..N] of integer {deklarasi array A dengan tipe integer}

III.3.1.1.2 ALGORITMA
For Indeks  1 to N do
III.3.1.1.2.1 PROSES ARRAY
EndFor

Proses array bisa diganti dengan proses lainnya, misalnya :

- Mengisi elemen array dengan 0 (inisialisasi)

- Mengisi elemen array dengan piranti masukan

- Mencetak elemen array ke piranti keluaran

Proses array dapat dimodifikasi untuk proses berikut, misal :

- Mencari bilangan maksimum /minimum pada array

- Menjumlahkan nilai seluruh elemen array

- Membuat rata-rata nilai seluruh elemen array

- Mencari nilai tertentu pada array

Berikut beberapa contoh pemrosesan array :

1. Menginisialisasi array : mengisi semua elemen array dengan

harga awal (biasanya dengan harga 0)

Program INISIALISASI
KAMUS
Cons : N=10 {jumlah elemen array}
Indeks : integer
A : array[1..N] of integer {deklarasi array A dengan tipe integer}

III.3.1.1.3 ALGORITMA
For Indeks  1 to N do
III.3.1.1.3.1 A[Indeks]  0 {proses inisialisasi}
EndFor

pengenalan algoritma dan struktur data


17
(array, matriks dan stack)
Supaya algoritma inisialisasi berlaku umum untuk semua array,

dapat disajikan procedure degan parameter input/output seperti berikut :

Procedure INISIALISASI (input / output A : Larik, input N : integer)


{menginisialisasi setiap elemen array A dengan nol}
{IS :A array dengan jumlah N buah}
{FS : Seluruh elemen array A berharga nol}

KAMUS LOKAL
Indeks : Integer
ALGORITMA
For Indeks  1 to N do
A[Indeks]  0
EndFor

2. Mengisi elemen array dari piranti masukan

Program Mengisi_elemen
KAMUS
Cons : N=10 {jumlah elemen array}
Indeks : integer
A : array[1..N] of integer {deklarasi array A dengan tipe integer}

III.3.1.1.4 ALGORITMA
For Indeks  1 to N do
III.3.1.1.4.1 Input A[Indeks] {jika ingin mencetak ganti dengan output}
EndFor

III.4 Panjang Array

Struktur array biasanya mudah untuk dikunjungi ( travers), dicari

(search), diurutkan (sort) dan sering digunakan untuk menyimpan

kumpulan data yang permanen. Akat tetapi ukuran data yang didalam

struktur selalu berubah, maka struktur data Link List akan lebih berguna.

Array Linier yaitu kumpulan terhingga elemen data homogen

(jenis sama) yang terdiri atas :

- Elemen array dinyatakan dengan indeks berupa n buah

bilangan

pengenalan algoritma dan struktur data


18
(array, matriks dan stack)
- Elemen array disimpan dalam memory pada lokasi yang

berhimpitan

Bilangan n menyatakan ukuran data array.

Untuk mengetahui panjang elemen suatu array dapat dihitung

dengan rumus sebagai berikut :

Panjang (L) = UB – LB + 1
dimana
UB = upper bound (indek terbesar)
LB = lower bound (indek terkecil)

Atau

L = BA – BB + 1
Ket : L = Banyaknya Elemen array
BB = Batas Bawah
BA = Batas Atas
Jika BB = 1  L = BA

1 BB
2
3
4

n BA

indeks Elemen array


Contoh :

1. Jika DATA adalah array dengan 6 elemen, yaitu : DATA[1] = 247,

DATA[2] = 56, DATA[3] = 429, DATA[4] = 135, DATA[5] = 87,

DATA[6] = 156.

Digambarkan sebagai berikut :

DATA
DATA
1 247
247 56 429 135 87 156 2 56
1 2 3 4 5 6 3 429
pengenalan algoritma dan struktur data
4 135 19
(array, matriks dan stack)
5 87
6 156
2. Seorang pedagang mobil menggunakan array untuk menyimpan

data penjualan dari tahun 1994 sampai tahun 2005. berapa

panjang (jumlah elemen) array yang harus disediakan ?

LB = 1994
UP = 2005
Jadi pajang = UB – LB + 1
= 2005 – 1994 + 1
= 12

Artinya jumlah elemen array yang diperlukan adalah sebanyak 13

buah, untuk pendefinisian array tersebut sebagai berikut :

Kamus
JUAL : array [1994..2005] of integer

3. Perusahaan mobil menggunakan array AUTO untuk merekam

banyaknya penjualan setiap tahun dari 2000 sampai 2005. Array

tersebut bisa tidak dimulai dari 1, tatapi dari 2000 sehingga

AUTO[K] = banyaknya mobil terjual pada tahun K.

Dari perusahaan tersebut dapat disimpulkan :

BB = 2000, BA = 2005, sehingga L = BA – BB+1

= 2005 – 2000+1

=6

Jadi array AUTO terdiri dari 6 elemen dan indeksnya mulai dari

2000 sampai 2005.

pengenalan algoritma dan struktur data


20
(array, matriks dan stack)
Jika array tersebut didefinisikan dalam bahasa pemrograman

menjadi :

Var DATA : ARRAY[1..6] OF REAL;

AUTO : ARRAY[2000..2005] OF INTEGER;

Selanjutnya kita akan menulis array semacam itu sebagai :

AUTO (2000 : 2005)

Beberapa bahasa pemrograman menyediakan tempat dimemory

untuk array secara statik, selama kompilasi program. Ukuran dari array

adalah tetap selama program dilaksanakan. Beberapa bahasa

pemrograman yang lain membolehkan untuk membaca harga n, kemudian

menyatakan suatu array dengan n elemen yang dialokasikan secara

dinamik.

III.5 Pengalamatan Array dalam Memory

Penyimpanan elemen array di dalam memeory komputer disusun

berurutan sehingga komputer tidak perlu menentukan setiap elemen array

tetapi cukup menyimpan alamat awal / pertama. Berikut cara menetukan

alamat elemen array dengan indeks tertentu :

LOK(LA[K]) = Awal (LA) + W(K-LB)

Dimana :

LOK(LA[K]) = lokasi elemen array dengan indeks K yang dicari

K = indeks array yang dicari

Awal (LA) = lokasi awal dari array

pengenalan algoritma dan struktur data


21
(array, matriks dan stack)
W = jumlah byte untuk menyimapn 1 elemen array

LB = lower bound / batas bawah

Contoh :

Misalkan Awal (JUAL) = 100 dan W = 4, maka

LOK(JUAL[1994]) = 100

LOK(JUAL[1995]) = 104

LOK(JUAL[1996]) = 108

Berapa lokasi JUAL[2005] ?

Untuk mendapatkan lokasi tersebut sebagai berikut :

LOK(LA[K]) = Awal(LA) + W(K-LB)


= 100 +4*(2005-1994)
= 140

Dalam contoh 3 diatas, misalkan tampak dimemory sebagai

berikut :

BASE(AUTO)=200, W=4, AUTO[2000]

maka

LOC(AUTO[2000]) = 200

200 LOC(AUTO[2001]) = 204


201
202 LOC(AUTO[2002]) = 208
203
204
205 Dan untuk mencari alamat AUTO[2004] dapat
206 dicari dengan rumus :
207 LOC(AUTO[2004]) = BASE(AUTO) + W (K-
208 BB)
= 200 + 4 (2005 – 2000)

pengenalan algoritma dan struktur data


22
(array, matriks dan stack)
= 200 + 4 (5)
= 200 + 20
= 220
Dan elemen ini bisa didapatkan tanpa harus
membaca elemen lain.

III.6 Traversing (Pengunjungan Array)

Operasi traversing array dapat dilakukan untuk memproses data

yang ada didalam memori. Misalkan di memori kita mempunyai kumpulan

elemen data A dan akan mencetak seluruhnya atau ingin menghitung

banyaknya elemen A dengan sifat tertentu setiap elemen tepat satu kali.

Algoritma berikut ini bisa digunakan :

K := BB
WHILE K  BA atau FOR K = BB TO BA
DO WRITE LA[K]
WRITE LA[K] EXIT
K := K + 1
EWHILE
EXIT

Contoh:
Dari Array AUTO :
a. Cari tahun NUM (Jumlah) tempat data mobil yang terjual lebih dari
300 disimpan
NUM := 0
FOR K= 2000 TO 2005
IF AUTO[K] > 300 THEN
WRITE AUTO[K]
NUM:=NUM + 1
EXIT
b. Cetak setiap tahun dan jumlah mobil yang terjual
FOR K = 2000 TO 1984
WRITE K, AUTO[K]
EXIT

III.7 Menyisipkan Dan Menghapus Array

Misalkan A adalah kumpulan elemen data di memori komputer;

pengenalan algoritma dan struktur data


23
(array, matriks dan stack)
Menyisipkan adalah operasi untuk menambahkan elemen array

lain ke A.

Menghapus adalah operasi untuk menghilangkan salah satu

elemen A.

Untuk menyisipkan sebuah elemen pada akhir array mudah

dilakukan dengan menyediakan tempat di memori yang cukup besar untuk

menenpatkan elemen tambahan tersebut. Penyisipan pada bagian tengah

array, separuh elemen harus digeser kebawah pada lokasi baru.

Sedangkan bagian yang lain tetap.

Dengan cara yang sama, menghapus ujung elemen array yang

terakhir tidak ada kesulitan, tetapi setelah menghapus array yang berada

ditengah memerlukan operasi pergeseran data dari lokasi bagian bawah

ke lokasi bagian atasnya (ke sub-script yang lebih kecil).

Contoh :

Misalnya TES didefinisikan sebagai array dengan 5 lokasi memori,

tetapi hanya terdapat 3 data yang tersimpan pada TES[1], TES[2],

TES[3]. Bila X adalah nilai untuk TES[4] dan TES[5] akan ditambahkan

elemen lagi. Sekarang array telah penuh dan tidak dapat menambahkan

elemen baru ke memori.

1. Misalkan ada array NAMA dengan 8 lokasi memori yang berisi 5 elemen urut
menurut abjad.
NAMA NAMA NAMA NAMA
1 Bita 1 Bita 1 Bita 1 Bita
2 Dul 2 Dul 2 Dul 2 Jono
3 Jono 3 Jono 3 Jono 3 Rita
4 Sarip 4 Rita 4 Rita 4 Sarip
5 Wito 5 Sarip 5 Sarip 5 Tono
6 6 Wito 6 Tono 6 Wito
7 7 7 Wito 7
8 8 8 8
pengenalan algoritma dan struktur data
24
(array, matriks dan stack)
1. Rita akan disisip

2. Tono akan disisip

3. Dul akan dihapus

Algoritma yang digunakan untuk menyisipkan elemen data DATA

ke posisi ke-K pada array LA dengan N elemen, empat langkah pertama

menyediakan ruang di LA dengan menurunkan satu posisi setiap elemen

dari posisi ke-15, yang dilakukan mulai dari L[N], L[N-1].

INSERT (LA, N, K, ITEM)


J := N
WHILE J  K
DO
LA[J+1] := LA[J]  LA[J] := LA[J-1]
J := J-1
EWHILE Ket :
LA[K] :=ITEM K = Elemen array yang ditentukan
N := N+1 J = Jumlah elemen array

Algoritma untuk menghapus elemen ke-K dari array ITEM


DELETE (LA, N, K, ITEM)
ITEM := LA[K]
FOR J := K TO N-1
LA[J] := LA[J+1]
N := N-1

III.8 Sorting Array

Elemen suatu array A dapat disusun lagi sehingga tersusun

menaik (ascending) atau menurun (descending). Algoritma untuk

menyusun array menaik (ascending) adalah sebagai berikut :

A[1] < A[2] < A[3] < … < A[N]

pengenalan algoritma dan struktur data


25
(array, matriks dan stack)
Algoritma untuk menyusun array menurun (descending) adalah

sebagai berikut :

A[1] > A[2] > A[3] > … > A[N]

Contoh :

Jika susunan elemen suatu array adalah sebagai berikut : 8, 4,

19, 2, 7, 13, 5, 16

setelah diurutkan menjadi : 2, 4, 5, 7, 8, 13, 16, 19

Bubble Sort

Algoritma “bubble sort” bekerja sebagai berikut :

Langkah ke-1

- Bandingkan A[1] dengan A[2] dan susun sehingga A[1] < A[2]

- Bandingkan A[2] dengan A[3] dan susun sehingga A[2] < A[3]

- Bandingkan A[n-1] dengan A[n] dan susun sehingga A[n-1] <

A[n] setelah (n-1) kali perbandingan, A[n) akan merupakan

elemen terbesar peratama terurut.

Langkah ke-2

- Ulangi step 2 sampai kita telah mebandingkan dan

kemungkinan menyusun A[n-2], A[n-1]. Setelah (n-2)

perbandingan, (n-1) akan merupakan elemen terbesar kedua.

- Dst

Langkah ke(n-1)

- Bandingkan A[1] dengan A[2] dan susun sehingga A[1] < A[2]

pengenalan algoritma dan struktur data


26
(array, matriks dan stack)
- sesudah (n-1) langkah, array akan tersususn dalam urutan

naik.

Contoh :

Sebuah array sebagai berikut :

D[1] D[2] D[3] D[4] D[5]


30 60 5 25 50

Step 1 : Step = K – 1 = 5 – 1= 4
 D[1] > D[2]  T
ALGORITMANYA :
30 60 5 25 50
BUBBLE (DATA,N)
 D[2] > D[3]  Y FOR K= 1 to N - 1 DO
PTR : = 1
WHILE PTR <= N – K DO
30 5 60 25 50
IF DATA [PTR] > DATA[PTR+1] THEN
X:= DATA[PTR]
 D[3] > D[4]  Y DATA[PTR] := DATA[PTR+1]
D[1] D[3] D[4] D[2] D[5] DATA[PTR+1] := X
30 5 25 60 50 ENDIF
PTR := PTR + 1
EWHILE
 D[4] > D[5]  Y

30 5 25 50 60

Step 2 :
 D[1] > D[2]  Y

5 30 25 50 60

 D[2] > D[3]  Y

pengenalan algoritma dan struktur data


27
(array, matriks dan stack)
5 25 30 50 60

 D[3] > D[4]  Y

5 25 30 50 60
 D[4] > D[5]  Y

5 25 30 50 60

Step 3 :
 D[1] > D[2]  Y

5 25 30 50 60

 D[2] > D[3]  Y

5 25 30 50 60

 D[3] > D[4]  Y

5 25 30 50 60

 D[4] > D[5]  Y

5 25 30 50 60

Step 4 :
 D[1] > D[2]  Y

5 25 30 50 60

 D[2] > D[3]  Y

5 25 30 50 60

 D[3] > D[4]  Y

5 25 30 50 60

 D[4] > D[5]  Y

5 25 30 50 60

III.9 Pencarian
a. Linier Search

pengenalan algoritma dan struktur data


28
(array, matriks dan stack)
ALGORITMA
DATA [N+1] := ITEM (yang ditentukan)
LOC = 1
WHILE DATA[LOC] <> ITEM
DO
LOC := LOC+1
EWHILE
IF LOC:=N+1 THEN
LOC:=NOL

b. Binary Search

ALGORITMA
BINARY (DATA, BB,BA,ITEM,LOC)
BEG:=BB
END:=BA
MID:=INT((BEG+END)/2)
WHILE (BEG<=END) AND (DATA[MID]<>ITEMP)
DO
IF ITEM < DATA[MID] THEN
END:=MID – 1
ELSE
BEG:=MID+1
EWHILE
IF DATA[MID] = ITEM THEN
LOC:=MID
ELSE
LOC:=NOL
ENDIF

III.10 Definisi Matriks

Matriks adalah array dua dimensi adalah struktur data yang

mengacu pada sebuah / sekumpulan elemen yang diakses melalui indeks.

Berbeda dengan array linier, pada matriks indeks terdiri dari dua bagian

yaitu indeks baris dan indeks kolom. Setiap elemen matriks dapat diakses

melalui indeksnya.

A 1 a b c
2 d e f

1 2 3

pengenalan algoritma dan struktur data


29
(array, matriks dan stack)
Elemen matriks : A[1,1], A[1,2], A[,3], A[2,1], A[2,2], A[2,3],
Indeks baris dari martiks A : 1, 2
Indeks kolom dari matriks A : 1, 2 , 3
Mengisi elemen matriks : A[2,1]  100

Keuntungan struktur data matriks :

- Paling mudah dioperasikan

- Ekonomis dalam pemakaian memory, bila semua elemen terisi

- Akses ke setiap elemen memerlukan waktu yang sama

Kerugian :

- Memboroskan tempat jika elemen banyak yang kosong

III.11 Kamus Data Matriks

Sebelum elemen matriks dapat dipergunakan perlu didefinisikan

dahulu kamus data sebagai berikut :

KAMUS
A : aray [1..2, 1..3] of string { ukuran matriks 2x3 bertipe string
Nilai : array [1..50, 1..4] og real
Type Wakru : Record
< JJ : Integer[0..23]
MM : integer[0..59]
DD : integer[0..59]>
Absensi : array[1..100, 1..2] of waktu

III.12 Pemrosesan Matriks

Ada beberapa pemrosesan yang dilakukan terhadap matriks.

Algoritma yang paling mudah untuk melakukan pemrosesan yaitu dengan

menggunakan for-to-do, dengan alasan bahwa elemen matriks memiliki

pengenalan algoritma dan struktur data


30
(array, matriks dan stack)
indeks yang terurut. Pemrosesan matriks dapat dilakukan dengan dua

cara, yaitu :

- Matriks diproses baris demi baris (Row Ordering)

- Matriks diproses kolom demi kolom (Column Ordering)

Pola pemrosesan matriks :

Program proses
KAMUS
Cons : M = 2
Cons : N = 3
Baris, Kolom : integer
A : array [1..M, 1..N] of integer

ALGORITMA 1
For Baris  1 to M do
For Kolom  1 to N do
PROSES MATRIKS
Endfor
Endfor

ALGORITMA 2
For Kolom  1 to N do
For Baris  1 to M do
PROSES MATRIKS
Endfor
Endfor

Pada kedua algoritma tersebut memiliki pola yang sama, untuk

pemrosesan baris demi baris “For Baris” lebih dahulu diikuti “For Kolom”,

sedangkan pada kolom demi kolom kebalikannya. Proses matriks bisa

diganti dengan proses lainnya misalnya :

- Mengisi elemen matriks dengan nol

- Mengisi elemen matriks dari piranti masukan

- Mencetak elemen matriks ke piranti keluaran

Proses matriks dapat dimodifikasi sebagai berikut :

- Menjumlahkan nilai pada setiap baris

- Membuat rata-rata pada setiap baris atau kolom

pengenalan algoritma dan struktur data


31
(array, matriks dan stack)
- Mencari nilai tertentu pada matriks

- Menjumlahkan atau mengurangkan dua buah matriks

- Mengalikan dua buah matriks

Beberapa contoh pemrosesan matriks :

1. Menginisialisasi matriks

Program inisialisasi
KAMUS
Cons : M = 2
Cons : N = 3
Baris, Kolom : integer
A : array [1..M, 1..N] of integer

ALGORITMA
For Baris  1 to M do
For Kolom  1 to N do
A[Baris,Kolom]  0 {baris demi baris}
Endfor
Endfor

2. Mengalikan dua buah matriks

Program proses
{matriks A[M,P], B[P,N] dan hasil perkalian disimpan pada matriks C[M,N])
KAMUS
Const : M = 2
Const : N = 3
Const : P = 2
Baris, Kolom, K : integer
A : array [1..M, 1..P] of integer
B : array [1..P, 1..N] of integer
C : array [1..M, 1..N] of integer

ALGORITMA
For Baris  1 to M do
For Kolom  1 to N do
C[Baris,Kolom]  0
For K  1 to P do
C[Baris,Kolom]  C[Baris,Kolom] + A[Baris,K] + B[K, Kolom]
Endfor
Endfor
Endfor

3. Menjumlahkan dua buah matriks

Program proses
KAMUS

pengenalan algoritma dan struktur data


32
(array, matriks dan stack)
Const : M = 2
Const : N = 3
Baris, Kolom : integer
A,B,C : array [1..M, 1..N] of integer

ALGORITMA
For Baris  1 to M do
For Kolom  1 to N do
C[Baris,Kolom]  A[Baris,Kolom] + B[Baris, Kolom]
Endfor
Endfor

III.13 Pengalamatan Matriks

Penyimpanan elemen matriks dalam memori komputer disusun

berurutan, sehingga komputer tidak perlu menentukan setiap elmen

matriks tetapi cukup menyimpan alamat awal/pertama. Ada dua cara

pengalamatan /penyimpanan elemen matrisks di dalam komputer, yaitu :

- Row major order (disimpan baris demi baris)

- Column major order (disimpan kolom demi kolom)

Contoh matriks segitiga A dengan ukuran 2 x 3 :

1 2 3
1 A[1,1] A[1,2] A[1,3]
2 A[2,1] A[2,3] A[2,3]

Urutan lokasi penyimpanan matriks A dalam komputer adalah :

- A[1,1], A[1,2], A[1,3], A[2,1], A[2,2], A[2,3]  jika row major

- A[1,1], A[2,1], A[2,1], A[2,2], A[3,1], A[3,2]  jika column

major

Untuk lebih jelasnya perhatikan ilustrasi penyimpanan didalam

komputer secara :

pengenalan algoritma dan struktur data


33
(array, matriks dan stack)
ROW MAJOR COLUMN MAJOR
X[1,1] Baris ke-1 Kolom ke-1 A[1,1]
X[1,2] Baris ke-1 Kolom ke-1 A[2,1]
X[1,3] Baris ke-1 Kolom ke-2 A[2,1]
X[2,1] Baris ke-2 Kolom ke-2 A[2,2]
X[2,2] Baris ke-2 Kolom ke-3 A[3,1]
X[2,3] Baris ke-2 Kolom ke-3 A[3,2]

Berikut cara menentukan lokasi / alamat elemen matriks dengan

indeks tertentu :

- Mencari lokasi pada row-major order

LOC(A[B,K]=Base(A) + W[N(B-1) + (K-1))

- Mencari lokasi memory pada column-major order

LOC(A[B,K]=Base(A) + W[M(K-1) + (J-1))

Ket :

Base (A) : lokasi awal di memori (alamat A[1,1])

W : jumlah word/byte untuk menyimpan 1 elemen

M : jumlah baris pada matriks A

N : jumlah kolom pada matriks A

Ada cara lain untuk menentukan lokasi sebuah elemen matriks,

bila rumus tersebut sukar untuk diingat. Perhatikan contoh berikut :

X[1,1] = 400

Lebar (W=width) : 1 elemen = 4 byte

pengenalan algoritma dan struktur data


34
(array, matriks dan stack)
Maka alamat setiap elemen jika pengalamatannya dengan ROW

MAJOR adalah :

1 2 3 4 5 6
1 400 404 408 412 416 420
2 424 428 …
3Alamat
448 elemen pertama
4 …
5
6
7
8

- Berapa alamat X[3,5] ? jawabnya adalah 400 + (16 * 4) = 400 +

64 = 464

Angka 16 didapat dari jumlah locatan dari X[1,1] ke X[3,5]

- Berapa alamat X[8,6] ? jawabnya adalah 400 + (47 * 4) = 400 +

188 = 588

Angka 47 didapat dari jumlah locatan dari X[1,1] ke X[8,6]

X[1,1] = 400

Lebar (W=width) : 1 elemen = 4 byte

Maka alamat setiap elemen jika pengalamatannya dengan

COLUMN MAJOR adalah :

1 2 3 4 5 6
1 400 432 464 …
2 404 436 …
3 408 …
4 412
5 416
6 420
7 424
8 428

pengenalan algoritma dan struktur data


35
(array, matriks dan stack)
- Berapa alamat X[3,5] ? jawabnya adalah 400 + (34 * 4) = 400 +

136 = 536

Angka 34 didapat dari jumlah locatan dari X[1,1] ke X[3,5]

- Berapa alamat X[8,6] ? jawabnya adalah 400 + (47 * 4) = 400 +

188 = 588

Angka 47 didapat dari jumlah locatan dari X[1,1] ke X[8,6]

pengenalan algoritma dan struktur data


36
(array, matriks dan stack)
BAB IV STACK (TUMPUKAN)

IV.1 Definisi Stack

Stack (tumpukan) adalah list linier yang dikenali elemen

puncaknya (TOP). Aturan penyisipan dan penghapusan elemennya

tertentu, yaitu :

- penyisipan selalu dilakukan “di atas” TOP

- penghapusan selalu dilakukan pada TOP

TOP adalah satu-satunya alamat tempat terjadi operasi. Dengan

kata lain, elemen yang ditambahkan paling akhir akan menjadi elemen

yang pertama dihapus (LIFO / Last In First Out). Perhatikan gambar

berikut ini :

Stack digunakan untuk merepresentasikan :

- pemanggilan prosedur

- perhitungan ekspresi aritmatika

- rekursivitas

pengenalan algoritma dan struktur data


37
(array, matriks dan stack)
- backtracking

- dan algoritma lanjut lainnya

IV.2 Representasi Lojik

Stack direpresentasikan secara lojik sebagai list linier dengan

setiap elemennya adalah :

typedef struct TElmtStack


{ InfoType Info;
address Next;
} ElmtStack;

InfoType adalah sebuah tipe terdefinisi yang menentukan

informasi yang disimpan pada setiap elemen stack. Address adalah

“alamat” dari elemen.

Jika P adalah sebuah address, maka terdapat selektor sebagai

berikut :

- Info(P) adalah informasi yang disimpan pada alamat P

- Next(P) adalah alamat suksesor P

Stack kosong adalah stack dengan Top = NIL

IV.3 Traversal dan Search

Traversal pada stack jarang dilakukan, karena keunikan stack

yaitu operasi hanya dilakukan terhadap elemen TOP. Namun jika

diperlukan traversal untuk mencetak isi stack, maka dapat dilakukan

traversal seperti pada list linier biasa dengan mengganti First dengan Top.

pengenalan algoritma dan struktur data


38
(array, matriks dan stack)
Search hampir tidak pernah dilakukan pada stack, karena elemen

yang diproses hanyalah elemen pada TOP.

IV.4 Operasi dan Fungsi Dasar

Definisi fungsional stack :

1. IsStackEmpty

int IsStackEmpty(address Top)


{ /* Test stack kosong : mengirim 1 jika stack kosong, dan 0
jika stack tidak kosong */

return(Top == NIL);
}

2. CreateEmptyStack

void CreateEmptyStack(address *Top)


{ /* I.S. sembarang
F.S. sebuah stack yang kosong siap dipakai, terdefinisi

Membuat stack kosong */

*Top = NIL;
}

3. Push

void Push(address *Top, InfoType X)


{ /* I.S. Stack mungkin kosong, X terdefinisi
(terdefinisi informasinya)
F.S. Info(Top) = X

Menambahkan sebuah elemen X pada TOP sebuah stack */

address P;

// Alokasi P; dimana Info(P) = X

Next(P) = *Top; // insert sebagai elemen pertama


*Top = P;
}

4. Pop

pengenalan algoritma dan struktur data


39
(array, matriks dan stack)
void Pop(address *Top, InfoType *X)
{ /* I.S. Stack tidak kosong
F.S. X adalah info dari elemen TOP

Menghapus elemen stack yang tidak kosong, stack mungkin menjadi


Kosong */

address P;

P = *Top;
*Top = Next(P);
Next(P) = NIL;

*X = Info(P);
// Dealokasi P
}

IV.5 Representasi Fisik Kontigu

Stack direpresentasikan dengan sebuah tabel [0..NMax].

Perhatikan gambar berikut ini :

Perhatikan struktur stack berikut ini :

// Definisi sebuah stack dengan representasi kontigu

#define NMax 99
#define NIL -1 // alamat tak terdefinisi

typedef int address; // -1 untuk stack yang kosong : TOP = NIL

pengenalan algoritma dan struktur data


40
(array, matriks dan stack)
typedef ... InfoType; // tipe info terdefinisi

// di dalam main
address Top;
InfoType TabElmt[NMax + 1];

Sedangkan penulisan untuk :

- Info(P) menjadi TabElmt[P]

- Next(P) menjadi P - 1

Stack adalah kumpulan elemen-elemen data yang disimpan dalam satu

lajur linier. Kumpulan elemen data hanya boleh diakses pada satu lokasi

saja yaitu pada posisi ATAS (TOP) stack. Stack digunakan dalam algoritma

pengimbas (parsing), algoritma penilaian (evaluation) dan algoritma

penjelajahan balik (backtrack). Elemen-elemen didalam stack dapat

bertipe data integer, real, record dalam bentuk sederhan atau terstruktur.

Stack tersebut juga “PUSH DOWN STACK” yaitu penambahan

elemen baru (PUSH) dan penghapusan elemen dari stack (POP). Contoh

pada PDA (Push Down Automaton). Sistem pada pengaksesan pada stack

menggunakan sistem LIFO (Last In First Out), artinya elemen yang

terakhir masuk itu yang akan pertama dikeluarkan dari stack. Ilustrai stack

dapat digambarkan seperti stack CD atau stack sate.

Contoh stack kosong, stack dengan satu elemen dan stack dengan

n elemen.

Tumpukan kosong Tumpukan 1 elemen Tumpukan n elemen

D
C
TOP=0 TOP=1 B TOP=N
A A

pengenalan algoritma dan struktur data


41
(array, matriks dan stack)
Atau Stack yaitu suatu list elemen dimana untuk menyisipkan dan

menghapus satu elemen hanya bisa dilakukan pada satu ujung yang

disebut “TOP” dari stack.

Operasi pada stack : “PUSH” dan “POP”

Contoh :

Misalnya 6 elemen kita tambahkan secara berurutan pada stack

kosong. Yaitu A, B, C, D, E, F, maka stacknya adalah A, B, C, D, E, F dan

dapat digambarkan sbb:

A B C D E F
TOP
1 2 3 4 5 6

Ket : elemen yang paling kanan adalah elemen puncak (TOP),

penyisipan dan penghapusan hanya terjadi pada TOP, artinya E tidak bisa

dihapus sebelum F dihapus, D tidak bisa dihapus sebelum E dihapus, dst.

Akibatnya elemen bisa dihapus dari stack hanya pada urutan

terbalik dengan urutan waktu ditambahkan.

Stack sering digunakan untuk menunjukkan urutan pemrosesan

data ketika langkah-langkah tertentu dari pemrosesan harus

ditunda sampai kondisi lain terpenuhi.

Contoh :

Suatu program utama A memanggil sub program B yang

memanggil sub program C, dst.

Program A Program B Program C Program D


-------- -------- -------- --------
--------
pengenalan --------
algoritma dan struktur data -------- --------
B matriks dan stack) C D -------- 42
(array,
-------- -------- -------- --------
End. End. End. End.
Jika program / procedur tersebut dimasukkan kedalam stack, akan

menjadi :

C
B B B
A A A A A

Ketika program A dilaksanakan, kontrol program akan berpindah

ke procedure B yang diperlukan untuk bisa menyelesaikan pelaksanaan A,

maka A disimpan di stack, B mulai dilaksanakan dan memerlukan

procedure C, maka B disimpan B ke stack diatas A, dan mulai memproses

C yang juga perlu D dan C disimpan kestack. Jika D sudah selesai

dilaksanakan maka diteruskan pelaksanaan C, bila C sudah selesai

dilanjutkan pelaksaan B dan akhirnya pelaksanaan program A.

IV.6 Kamus Data

Sebelum struktur data ini bisa digunakan, harus dideklarsikan

dahulu dalam bentuk kamus data. Ada beberapa cara mendeklarasikan

struktur data ini, salah satunya adalah dengan menggunakan tata susunan

linier (larik) dan sebuah variabel yang dikemas dalam tipe data record.

Berikut ini pendeklarasian struktur data stack dalam kamus data :

Kamus Data
Const
MAKSTUM = 80; {kapasitas maksimal stack)
Type

pengenalan algoritma dan struktur data


43
(array, matriks dan stack)
JenisElemen =char;
Stack = record
Elemen : array[1..MAKSTUM] of JenisELemen;
Atas: 0..MAKSTUM;
End;

Stack adalah struktur data bertipe rocord yang terdiri dari field

elemen bertpie array dengan indeks dari 1 sampai dengan MaksTum, atas,

bertipe integer berkisar dari 0 (kosong) sampai dengan MksTum.

IV.7 Operasi Dasar Pada Stack

Operasi yang sering diterapkan pada struktur data stack adalah

Push dan Pop. Operasi dasar yang dapat diterapkan adalah sebagai

berikut :

1. CREATESTACK(S) : Membuat stack S, dengan jumlah

elemenkosong

2. MAKENULL (S) : Mengosongkan stack S, jika ada elemen maka

semua elemen dihapus

3. EMPTY : Stack kosong ? menguji apakah stack kosong.

4. PUS (x,S) : memasukkan elemen baru x kedalam stack S

5. POP (S) : mengeluarkan elemen posisi atas pada stack S

Ilustrasi operasi POP dan PUSH terhadap stack.

OPERASI ISI STACK NILAI TOP


1 CREATESTACK(S) :<kosong> 0
2 PUSH(’a’,S) :a 1
3 PUSH(’b’,S) :a b 2
4 PUSH(’c’,S) :a b c 3
5 POP (S) :a b 2
6 PUSH(’d’,S) :a b d 3
7 PUSH(’e’,S) :a b d e 4
8 POP (S) :a b d 3

pengenalan algoritma dan struktur data


44
(array, matriks dan stack)
9 POP (S) :a b 2
10 POP (S) :a 1

Apa yang terjadi bila dilakukan POP (Sebanyak dua kali lagi ?

Underflow. Artinya stack kosong tidak ada elemen yang dapat diambil.

Apa yang terjadi jika dilakukan PUSH (’x’S) sebanyak sepuluh kali, jika

kapasitas stack 5 lagi ? Overflow, artinya stack penuh tidak ada elemen

yang dapat dimasukkan kedalam stack.

Pada proses PUSH, stack harus diperiksa apakah jumlah elemen

sudah mencapai maksimum atau tidak. Jika sudah mencapai maksimum

maka OVERFLOW. Sedangkan pada proses POP, stack harus diperiksa

apakah ada elemen yang hendak dikeluarkan atau tidak. Jika tidak ada

maka UNDERFLOW.

Algoritma PUSH: PUSH(S,TOP,MAKSTUM,ELEMEN)


1. [periksa kandungan stack, apakah penuh ?]
jika TOP = MAKSTUM, cetak ‘OVERFLOW’
2. [tambahkan TOP dengan 1]
TOP:=TOP + 1
3. [Masukkan ELEMEN kedalam lokasi TOP yang baru]
S[TOP]:=ELEMEN
4. RETURN

Algoritma POP: POP(S,TOP,MAKSTUM,ELEMEN)


1. [periksa kandungan stack, apakah kosong ?]
jika TOP = 0, cetak ‘UNDERFLOW’
2. [simpan nilai teratas pada ELEMEN]
ELEMEN :=S[TOP]
3. [keluarkan TOP dengan 1]
TOP:=TOP - 1
4. RETURN

pengenalan algoritma dan struktur data


45
(array, matriks dan stack)
IV.8 Representasi Stack (Penerapan Stack)

Stack bisa dinyatakan dalam bentuk list atau array, biasanya

dalam bentuk array stack. Pointer TOP yang menyatakan lokasi elemen

TOP dari stack dan variabel.

MAXSTX yang menyatakan banyaknya elemen maximum yang

bisa ditampung stack. Keadaan TOP=0 (null) menyatakan stack kosong.

X Y Z
6 = MAXSTK
1 2 3 4 5 6

3 = TOP
TOP = 3  Stack mempunyai 3 elemen

Maxstk = 8

Untuk menambah satu elemen ke stack, harus dicek apakah masih

ada ruang kosong atau tidak, jika tidak ada maka akan oferflow, untuk

mengambil satu elemen dari stack harus dicek apakah stack mempunyai

elemen atau tidak, jika stack kosong maka stack Underflow.

Contoh :

a). Tinjauan Stack diatas, lakukan operasi PUSH (stack, n)

1). Karena TOP=3, lanjut ke step 2

2). TOP = 3 + 1 = 4

3). Stack [TOP] = Stack[4]=W

4). Return

Sekarang W elemen puncak stack.

b). Lakukan Operasi POP(stack, item)

pengenalan algoritma dan struktur data


46
(array, matriks dan stack)
1). Karena TOP = 3 ke step 2

2). ITEM = 2

3). TOP = 3-1 = 2

4). Return

sekarang stack[TOP] = stack [2] = Y dan menjadi elemen puncak

dari Stack.

IV.9 Ekspresi Aritmetik

Misalnya list A mempunyai 12 elemen bilangan : (44), 33, 11, 55,

77, 90, 40, 60, 99, 22, 88, (66) dimulai dari bilangan terakhir menuju

kekiri kita bandingkan setiap bilangan dengan bilangan pertama, jika

ketemu yang lebih kecil kita berhenti dan kita tukar.

Sehingga list menjadi :

 (22), 33, 11, 55, 77, 90, 40, 60, 99, (44), 88, 66

kemudian mulai dari 22 kekanan kita cari elemen yang lebih besar dari 44

dan kita tukar, sehingga list menjadi :

 22, 33, 11, (44), 77, 90, 40, 60, 99, (55), 88, 66

mulai dari 55 kekiri, kita cari elemen yang lebih kecil dan kita tukar,

sehingga list menjadi :

 22, 33, 11, (40), 77, 90, (44), 60, 99, (55), 88, 66

dan seterusnya sehingga menghasilkan urutan yang berturut-turut:

 22, 33, 11, 40, (44), 90, (77), 60, 99, (55), 88, 66

Ket :

pengenalan algoritma dan struktur data


47
(array, matriks dan stack)
Sampai disini semua elemen telah kita bandingkan dengan (44)

dan semua bilangan yang lebih kecil dari 44 telah berada disebelah kiri

(44) dan semua bilangan yang lebih dari (44) berada disebelah kanan

(44). Berarti (44) berada pada posisi yang benar. Pengurutan berikutnya

dilakukan terhadap masing-masing dengan 2 sub list diatas dan diulang

dengan setiap sub list mengandung dua atau lebih elemen.

Karena dalam satu waktu kita hanya memproses satu sub list, kita

harus bisa menjejaki sub list yang lain untuk proses berikutnya yang bisa

dilakukan dengan menggunakan 2 satck, yaitu :

LOWER dan UPPER, untuk menyimpan sementara sub list

tersebut. Jadi alamat dari elemen pertama dan terakhir dari setiap sub list

dimasukkan berturut-turut kelower dan upper dan pengurutan dilakukan

hanya sesudah nilai batas suatu sub list diambil dari stack.

Contoh :

Dari List A diatas dengan n=12, nilai batas adalah Lower = 1 dan

Upper = 12. kita ambil nilai I dan 2 stac dari sehingga lower=0 dan upper

=0.

Dan kemudian kita lakukan langkah reduksi terhadap A[1],A[2],

…,A[12] yang akhirnya menempatkan elemen pertama 44 pada A[5].

pengenalan algoritma dan struktur data


48
(array, matriks dan stack)
Kemudian nilai batas 1 dan 4 dari sub list pertama dan nilai batas 6 dan

12 dari sub list kedua kita masukkan ke stack.

Lower = 1,6 Upper = 4,12

Untuk melakukan langkah reduksi lagi kita ambil nilai TOP 6 dan

12 dari stack sehingga :

Lower = 1 Upper =4

Dan kita lakukan step reduksi terhadap sublist A[6],A[7],…,A[12],

sehingga menjadi :

A[6] A[7] A[8] A[9] A[10] A[11] A[11]


(90) 77 66 99 55 88 (66)
66 77 60 99 55 88 (90)
66 77 60 (99) 55 88 99
66 77 60 (90) 55 88 99
66 77 60 88 55 88 99

Sublist Pertama Sublist kedua

Sublist kedua hanya mengadung satu elemen, maka hanya nilai 6

dan 10 yang dimasukkan kestack sehingga :

Lower=1, 6 Upper=4,10

Proses berhenti jika stack sudah tidak ada sublist uantuk diproses.

IV.10 Notasi Aritmatik (Infix, Prefix dan Postfix)

Infix, Notasi aritmatik biasa ditulis dalam notasi infix, misalnya A +

B – C. notasi infix mudah dimengerti oleh manusia, hanya saja dalam

notasi infix perlu diperhatikan prioritas pengerjaannya karena

pengenalan algoritma dan struktur data


49
(array, matriks dan stack)
berhubungan dengan hirarki operator pada komputer. Prioritas

pengerjaannya adalah :

1. Tanda kurung ( …..)

2. Eksponensial atau pangkat : 

3. perkalian, pembagian : *, /

4. Penjumlahan, pengurangan : +, -

Contoh :

(A – B) * (C + D)

Priorotas pengerjaan soal diatas adalah

1. dalam kurung yang paling kiri

2. dalam kurung yang kedua

3. perkalian hasil pengurangan dengan hasil penjumlahan

notasi infix untuk penulisan aritmatik biasa diubah kedalan motasi

Prefix atau posfix saat kompilasi. Notasi prefix maupun postfix akan lebih

mudah dikerjakan oleh komputer, karena tidak perlu mencari urutan

pengerjaan seperti pada notasi infix.

Aturan notasi infix, prefix dan postfix :

- Notasi Infix : operand operator operand  A + B

- Notasi Prefix : operato operand operand  + AB (disebut

Polish Notation –NP)

- Notasi Postfix : operand operand operator  AB + (disebut

Reverse Polish Notation – RNP)

pengenalan algoritma dan struktur data


50
(array, matriks dan stack)
Prefix Adalah keadaan dimana simbol operator diletakkan sebelu

dua operand. Postfix adalah keadaan dimana simbol operator diletakkan

sesudah dua operand.

Untuk lebih jelasnya, berikut contoh konversi dari suatu notasi ke

notasi lainnya :

1. INFIX ke PREFIX : (A + B) – (C*D)

a. pengerjaan dalam kurung ke-1 : (A+B), prefixnya adalah +AB

b. pengerjaan dalam kurung ke-2 : (C*D), prefixnya adalah *CD

c. terakhir adalah operator - ,  +AB - *CD

2. INFIX ke POSTFIX :

a. pengerjaan dalam kurung ke-1 : (A+B), prefixnya adalah AB+

b. pengerjaan dalam kurung ke-2 : (C*D), prefixnya adalah CD*

c. terakhir adalah operator - ,  AB+ – CD*

3. PREFIX ke INFIX : +/*A B C D

Untuk pengerjaan prefix, mencari operator dimulai dari operand

terkanan sebagai berikut :

a. cari operator ke-1: *, ambil dua operand sebelumnya, A dan

B, sehingga postfixnya adalah (A*B)

b. cari operator ke-2: / , ambil dua operand sebelumnya, (A*B)

dan C, sehingga infixnya adalah ((A*B)/C)

pengenalan algoritma dan struktur data


51
(array, matriks dan stack)
c. cari operator k-3: +, ambila dua operan sebelumnya,

((A*B)/C) dan D, sehingga infixnya menjadi ((A*B)/C) + D

4. PREFIX ke POSTFIX : +/*A B C D

a. cari operator ke-1: *, ambil dua operand sebelumnya, A dan

B, sehingga postfixnya adalah AB*

b. cari operator ke-2: / , ambil dua operand sebelumnya, AB*

dan C, sehingga infixnya adalah AB* C/

c. cari operator k-3: +, ambila dua operan sebelumnya, AB* C/

dan D, sehingga infixnya menjadi AB* C/ D+

5. POSTFIX ke INFIX : A B C D * / -

Untuk pengerjaan postfix, mencari operator dimulai dari operand

terkiri sebagai berikut :

a. cari operator ke-1: * , ambil dua operand sebelumnya C dan

D sehingga infixnya menjadi (C*D)

b. cari operator ke-1: / , ambil dua operand sebelumnya B dan

(C*D), sehingga infixnya menjadi (B/ (C*D))

c. cari operator ke-3 : -, ambil dua operand seblumnya A dan (B/

(C*D)), sehingga infixnya menjadi A-(B/ (C*D))

6. POSTFIX ke PREFIX

a. cari operator ke-1: * , ambil dua operand sebelumnya C dan

D sehingga infixnya menjadi *CD

pengenalan algoritma dan struktur data


52
(array, matriks dan stack)
b. cari operator ke-1: / , ambil dua operand sebelumnya B dan

*CD, sehingga infixnya menjadi /B *CD

c. cari operator ke-3 : -, ambil dua operand seblumnya A dan /B

*CD, sehingga infixnya menjadi -A /B *CD

7. Evaluasi nilai postfix menggunakan stack

Misal perhitungan aritmatik dalam notasi INFIX : 2 – 4 * 3 + 1

Ubah ke POSTFIX : 243*-1+, evaluasinya sebagai berikut :

2 4 3 * - 1 +
IV.10.1.1.1.1.1.1
IV.10.1.1.1.1.1.2 Op
3
2
IV.10.1.1.1.1.1.2.1 O IV.10.1.1.1.1.1.2.2 O
4 4 Op1 12 p 1 p IV.10
2 2
- - -
2 2 2 2 Op1 Op1
10 10 9

Ket : op1=operand ke-1 (kiri); op2=operand ke-2 (kanan)

Algoritma : evaluasi nilai notasi POSTFIX

1. Buat stack kosong

2. Ulangi langkah berikut sampai elemen habis

a. ambil elemen satu persatu dari aritmatik

b. jika elemen itu adalah operan, masukkan kedalam stack;

jika operator maka keluarkan dua nilai terbatas dari stack

(op2 dan op1), lalu hitung dengan operator yang

bersangkutan.hasilnya dimasukkan kedalam stack (jika

tidak ada 2 operan dalam stack maka ada kesalahan

pada notasi tersebut.

pengenalan algoritma dan struktur data


53
(array, matriks dan stack)
3. Bila elemen dari notasi tersebut habis, maka nilai yang

tertinggal (teratas dalam stack) adalah hasilnya.

8. Evaluasi nilai prefix menggunakan stack

Misal perhitungan aritmatik dalam notasi INFIX : 2 – 4 * 3 + 1

Ubah ke PREFIX : + -2*431, evaluasinya sebagai berikut :

1 3 4 * 2 - +
IV.10.1.1.1.1.1.3
IV.10.1.1.1.1.1.4 Op IV.10.1.1.1.1.1.5 Op
4 2
1 1
IV.10.1.1.1.1.1.5.1 O
- IV.10.1.1.1.1.1.6 Op
3 3 Op2 12 p 12 Op2 IV.10.1.1.1
10 1
1
-
1 1 1 1 Op2 1 1 Op2
9

Ket : op1=operand ke-1 (kiri); op2=operand ke-2 (kanan)

Algoritma : evaluasi nilai notasi PREFIX

1. Buat stack kosong

2. Ulangi langkah berikut sampai elemen habis

a. ambil elemen satu persatu dari aritmatik

b. jika elemen itu adalah operan, masukkan kedalam stack

dan jika operator maka keluarkan dua nilai teratas dari

stack (op1 dan op2, kebalikan dari postfix) lalu hitung

dengan operator yang bersangkutan. Hasilnya dimasukkan

ke stack (jika tidak ada 2 operan dalam stack maka ada

kesalahan pada notasi tersebut)

3. Bila elemen dari notasi tersebut habis, maka nilai yang

tertinggi (teratas dalam stack) adalah hasilnya.

pengenalan algoritma dan struktur data


54
(array, matriks dan stack)
IV.11 Rekursif

Fungsi/prosedur rekursif adalah fungsi atau prosedur yang

memanggil dirinya sendiri, sebagai contoh adalah faktorial/ pemanggilan

terhadap dirinya sendiri, menyebabkan fungsi melakukan proses

pengulangan (looping). Agar pengulangan tidak terjadi terus menerus,

maka harus ada kondisi yang menyebabkan proses pengulangan berhenti.

Kondisi ini disebut sebagai base. Dengan demikian badan fungsi akan

dibagi menjadi dua bagian, yaitu :

- Base : kondisi berhenti

- Recuuence : proses pengulangan (pemanggilan dirinya sendiri)

Dalam perhitungan matematis diperlihatkan contoh berikut :

Fungsi ekusif untuk mencari nilai faktorial, dimana fungsi

matematis untuk mencari nilai faktorial adalah sebagai berikut :

n! = n * (n-1)*(n-2)*…*3*2*1
n!=n*(n-1) !
Dengan
(n-1) ! = (n-1) * (n-2) !
dan (n-2) ! = (n-2) * (n=3) !

Terlihat bahwa fungsi ini akan melakukan proses pengulangan (n-

x) !, dengan nilai x selalu berkurang 1 dan baru akan berhenti bila (n-

x)=1.

Tanpa Rekursif
Fact :=1;
For i := 1 to n do
Fact :=Fact* i ;
End
Dengan Rekursif
Function fact(n:integer):integer
Begin

pengenalan algoritma dan struktur data


55
(array, matriks dan stack)
If(n=0) or(n=1) then
Fact:=1
Else
Fact:= n*fac(n-1);
End

Prinsipnya rekursip adalah proses yang memanggil dirinya sendiri

dengan parameter yang berbeda sampai pengulangan berhenti.

pengenalan algoritma dan struktur data


56
(array, matriks dan stack)
DAFTAR PUSTAKA

 Lamhot Sitorus, 2015. Algoritma Dan Pemrograman, Andi Offset,

Yogyakarta.

 Heri Sismoro, Kusrini Iskandar, 2004. Struktur Data Dan Pemrograman

Dengan Pascal, Andi, Yogyakarta.

 Ema Utami, Windha Mega P D, 2017. Langkah Mudah Belajar Struktur

Data Menggunakan C/C++, Elex Media Computindo, Jakarta.

 Munir Rinaldi, 2002. Algoritma & Pemrograman Dalam Bahasa Pascal

dan C, Informatika Bandung.

 Dwi Sanjaya, 2005. Asyiknya Belajar Struktur Data Di Planet C++, Elex

Media Computindo, Jakarta.

pengenalan algoritma dan struktur data


57
(array, matriks dan stack)
COVER BUKU YANG DISADUR

pengenalan algoritma dan struktur data


58
(array, matriks dan stack)
DAFTAR ISI BUKU YANG DISADUR

pengenalan algoritma dan struktur data


59
(array, matriks dan stack)
pengenalan algoritma dan struktur data
60
(array, matriks dan stack)
pengenalan algoritma dan struktur data
61
(array, matriks dan stack)

Anda mungkin juga menyukai