• Tidak ada hasil yang ditemukan

Document - IKK112111 - STMIK EL RAHMA chapt 04 Stack

N/A
N/A
Protected

Academic year: 2017

Membagikan "Document - IKK112111 - STMIK EL RAHMA chapt 04 Stack"

Copied!
34
0
0

Teks penuh

(1)

STRUKTUR DATA

Chapt 04 : Stack

(2)

STACK

 Stack adalah suatu tumpukan dari benda.

 Stack adalah suatu kumpulan data yang

seolah-olah ada data yang diletakkan di atas data lain.

 Satu hal yang perlu diingat adalah bahwa kita

bisa menambahkan (menyisipkan) data,

mengambil (menghapus) data lewat ujung yang sama, yang disebut sebagai ujung atas

tumpukan (top of stack).

 Konsep utamanya adalah LIFO (Last In First

(3)
(4)

Pada gambar di atas, jika kita ingin

mengambil sesuatu dari tumpukan maka kita harus mengambil benda paling atas dahulu, yakni compo.

Misalnya jika VCD langsung diambil,

compo akan jatuh.

Prinsip stack ini bisa diterapkan dalam

pemrograman. Di C++, ada dua cara penerapan prinsip stack, yakni dengan

(5)

Setidaknya stack haruslah memiliki

operasi-operasi sebagai berikut :

Push Untuk menambahkan item pada tumpukan paling atas

Pop Untuk mengambil item teratas

Clear Untuk mengosongkan stack

IsEmpty Untuk memeriksa apakah stack kosong

IsFull Untuk memeriksa apakah stack sudah penuh

(6)

Stack dengan Array

Sesuai dengan sifat stack, pengambilan /

(7)

Operasi-operasi pada Stack

dengan Array

IsFull

Fungsi ini memeriksa apakah stack yang

ada sudah penuh.

Stack penuh jika puncak stack terdapat

tepat di bawah jumlah maksimum yang dapat ditampung stack atau dengan kata lain :

(8)

Push

Fungsi ini menambahkan sebuah elemen

ke dalam stack dan tidak bisa dilakukan lagi jika stack sudah penuh.

IsEmpty

Fungsi menentukan apakah stack kosong

atau tidak.

Tanda bahwa stack kosong adalah Top

(9)

Pop

 Fungsi ini mengambil elemen teratas dari stack

dengan syarat stack tidak boleh kosong.

Clear

 Fungsi ini mengosongkan stack dengan cara

mengeset Top dengan -1.

 Jika Top bernilai kurang dari nol maka stack

dianggap kosong.

Retreive

 Fungsi ini untuk melihat nilai yang berada pada

(10)
(11)
(12)
(13)

Stack dengan Single Linked List

Selain implementasi stack dengan array

seperti telah dijelasnkan sebelumnya, ada cara lain untuk mengimplementasi stack dalam C++, yakni dengan single linked list.

 Keunggulannya dibandingkan array tebtu

saja adalah penggunaan alokasi memori yang dinamis sehingga menghindari

(14)

 Misalnya saja pada stack dengan array

disediakan tempat untuk stack berisi 150

elemen, sementara ketika dipakai oleh user

stack hanya diisi 50 elemen, maka telah terjadi pemborosan memori untuk sisa 100 elemen, yang tak terpakai.

 Dengan penggunaan linked list maka tempat

yang disediakan akan sesuai dengan banyaknya elemen yang mengisi stack.

 Oleh karena itu pula dalam stack dengan linked

list tidak ada istilah full, sebab biasanya

program tidak menentukan jumlah elemen stack yang mungkin ada (kecuali jika sudah dibatasi oleh pembuatnya).

 Namun demikian sebenarnya stack ini pun

(15)
(16)
(17)
(18)

PENULISAN UNGKAPAN

NUMERIS

Salah satu pemanfaatan tumpukan adalah

untuk menulis ungkapan menggunakan notasi tertentu.

Seperti kita ketahui, dalam penulisan

ungkapan, khususnya ungkapan numeris, kita selalu menggunakan tanda kurung

(19)

Sebagai contoh, dalam ungkapan:

(A + B) * (C - D)

suku (A + B ) akan dikerjakan lebih

dahulu, kemudian suku ( C - D ) , dan

(20)

Sedangkan pada ungkapan:

A + B * C - D

maka B * C akan dikerjakan lebih dahulu,

diikuti yang lain.

Dalam hal ini pemakaian tanda kurung

akan sangat mempengaruhi hasil akhir.

Cara penulisan ungkapan sering disebut

dengan notasi infix, yang artinya adalah bahwa operator ditulis di antara dua

(21)

Dalam ungkapan-ungkapan yang rumit,

pemakaian tanda kurung ini tidak bisa dihindari.

Semakin rumit suatu ungkapan semakin

banyak dibutuhkan tanda kurung.

Hal ini membawa suatu konsekuensi

bahwa penulisan tanda kurung itupun harus benar-benar terhindar dari

(22)

kemudian dikembangkan satu cara

penulisan ungkapan numeris yang

selanjutnya disebut notasi Polish atau

(23)

Berikut disajikan beberapa contoh notasi

prefix dari notasi infix (simbol $ adalah simbol perpangkatan):

Infix Prefix

A + B + A B

A+ B- C -+ A B C

(A + B) * (C - D) * + A B - C D

(24)

Secara sederhana, proses konversi dari

infix menjadi prefix dijelaskan sebagai berikut. Misalnya ungkapan yang akan dikonversi-kan adalah:

(A + B) * ( C - D)

Dengan menggunakan tanda kurung

bantuan, ungkapan di atas kita ubah enjadi:

(25)

 Jika [- A B] kita misalkan P, dan [- C D) kita

misalkan Q, maka ungkapan di atas bisa ditulis sebagai:

P * Q

 Selanjutnya, notasi infix di atas kita ubah

menjadi notasi prefix

* P Q

 Dengan mengembalikan P dan Q pada

notasinya semula dan menghapus tanda kurung bantuan, kita peroleh notasi prefix dari

persamaan (A + B ) * (C - D ) , yaitu:

(26)

Notasi lain, yang merupakan kebalikan

notasi prefix, adalah notasi postfix atau notasi suffix, atau lebih dikenal dengan notasi Polish Terbalik (Reverse Polish Notation atau RPN).

Dalam hal ini operator ditulis sesudah

operand.

Sama halnya dengan notasi prefix, maka

(27)

Proses konversi dari notasi infix ke notasi

postfix juga sama dengan konversi dari infix ke prefix. Sebagai contoh, ungkapan:

(A + B) * (C - D)

 Dengan kurung bantuan kita peroleh:

(28)

 Kemudian dengan memisalkan [ A B + ] sebagai P, dan [

C D - ] sebagai Q, dan kemudian dilakukan konversi dan substitusi kembali, kita peroleh notasi postfix untuk

ungkapan di atas, yaitu:

A B + C D - *

 Dalam hal inipun urutan penulisan operator juga

menentukan operasi mana yang harus dikerjakan lebih dahulu. Pada halaman ber-ikut disajikan beberapa

contoh lain hasil konversi notasi infix menjadi postfix.

Infix Postfix

A + B – C A B + C –

( A + B ) * ( C – D ) A B + C D - *

(29)

Algoritma INFIX ke POSTFIX

Langkah 0

Baca ungkapan dalam notasi infix, misal S;

Tentukan panjang ungkapan tersebut, misalnya N karakter;

Siapkan sebuah tumpukan kosong dan siapkan derajad masing-masing operator,

$ berderajad 3,

/ dan * berderajad 2, + dan - berderajad 1,

(30)

Langkah 1 Dimulai dari I = 1 sampai N kerjakan langkah-langkah berikut:

a. R = S[I]

b. Test nilai R. Jika R adalah:

operand : langsung ditulis.

kurung buka : push ke dalam tumpukan.

kurung tutup : pop dan tulis semua isi tumpukan sampai ujung tumpukan ='('. Pop juga tanda '(' ini, tetapi tidak usah ditulis.

operator : jika tumpukan kosong, atau derajad R lebih tinggi dibanding derajad ujung tumpukan, push

operator ke dalam tumpukan. Jika tidak, pop ujung tum-pukan dan tulis; kemudian ulangi pembandingan R

(31)

Langkah 2 Jika akhir notasi infix telah tercapai, dan tumpukan masih belum

(32)
(33)
(34)

Referensi

Dokumen terkait

Demikian pengumuman pemenang lelang ini disampaikan, apabila ada peserta yang keberatan atas penetapan pemenang ini, dapat menyampaikan sanggahan secara tertulis kepada Kelompok

Demikian pengumuman pemenang lelang ini disampaikan, apabila ada peserta yang keberatan atas penetapan pemenang ini, dapat menyampaikan sanggahan secara tertulis kepada Kelompok

Sehubungan dengan Seleksi Sederhana dan Seleksi Umum Jasa Konsultansi pada Dinas Sosial, Tenaga Kerja dan Transmigrasi, maka dengan ini diberitahukan / diumumkan kepada

Data D2 yang tidak masuk pada D3 Serdos Gelombang 201602 ini akan dicek kembali pada database di PDPT untuk penyusunan data D3 Serdos selanjutnya.. PT dapat mengusulkan dosen yang

[r]

Berdasarkan Surat Penet apan Peringkat Teknis Kelompok Kerja (POKJA) I Unit Layanan Pengadaan (ULP) Kabupat en. Indragiri Hilir Tahun Anggaran 2011 Nomor : 234.13/ BP2M PD-ULP/

Pokja paket pengadaan jasa 2017 akan melaksanakan Pengadaan Secara Elektron 1. Pendaftaran dan penga aplikasi SPSE

Demikian pengumuman pemenang lelang ini disampaikan, apabila ada peserta yang keberatan atas penetapan pemenang ini, dapat menyampaikan sanggahan secara tertulis kepada Kelompok