Algoritma
Tentang
STACK
Kelompok 1
Fernando P. Busman :12205060
Riki Rinaldi
:10205057
Intan wahyuli
:13205055
:13205053
:13205058
Halim taufik
:13205049
Khairul Ikhwan
:13205059
DOSEN PEMBIMBING:
Lita Sari Muklis, M.Kom
Kata Pengantar
Segala puji bagi Allah SWT, atas limpahan rahmat dan kasih sayangnya.
Dan shalawat dan salam kepada nabi Muhammad SAW. Rasa syukur yang
mendalam ini muncul dari hari sanubari yang sangat mendalam, karena telah
dapat membuat makalah Algoritma ini tentang Stack.
Makalah ini sangat dibutuhkan, karena dijadikan sebagai panduan dalam
pembelajaran dan sebagai wujud dalam pengembangan pembelajaran.
Dalam kesempatan ini, ucapan terima kasih kami aturkan bagi penyusun
makalah ini. Disamping itu, kami juga menyadari bahwa makalah ini tidak luput
dari sisi-sisi kelemahannya. Oleh karena itu, kami mengharapkan kritik dan saran
demi pencapaian yang maksimal terhadap makalah ini.
Daftar isi
Kata pengantar.................................................................................
Bab 2. Isi
A. Stack . 2
Bab 3. Penutup
1. Kesimpulan ................................................................................... 21
2. Saran ................................................................................................21
Daftar pustaka . 22
BAB I
PENDAHULUAN
I.1 Latar Belakang
Salah satu konsep yang sangat berguna didalam ilmu komputer adalah satu
bentuk struktur data yang di sebut dengan tumpukan. Dalam hal ini kita coba
mengenali mengapa stack (tumpukan) sangat berguna dan memainkan peranan
penting dalam pemograman dan bahasa pemograman.
I.2 Rumusan Masalah
A. Pengertian Stack (Tumpukan)
B. Definisi Stack
C. Deklarasi Stack
D. Operasi Pada Stack (Tumpukan)
1. Inisialisasi
2. Push
3. pop
4. Size
5. Empty/kosong
6. Full/penuh
BAB II
PEMBAHASAN
2.1 PENGERTIAN STACK (TUMPUKAN)
A. Pengertian Stack (Tumpukan)
STACK (tumpukan) dapat di katakan sebagai list yang operasi
penghapusan dan penyisipan elemennya dilakukan di satu ujung. atau bisa juga di
artikan sebagai suatu kumpulan data yang seolah-olah ada data yang di letakkan di
atas data yang lain. Satu hal yang perlu kita ingat adalah bahwa kita bisa
menambah (menyisipkan) data, dan mengambil (menghapus) data lewat ujung
yang sama, yang disebut sebagai ujung atas tumpukan (top of stack).
Dalam kehidupan sehari-hari terdapat banyak kejadian yang mempunyai sifat
seperti stack, untuk lebih memahami pengertian stack kita ambil contoh sebagai
berikut:
Perhatikan sebuah tumpukan piring di sebuah warung makan. Piringpiring tersebut tersusun rapat dari atas ke bawah (membentuk barisan beruruntan).
Setiap kali ada pembeli datang, maka iring yang paling atas akan di ambil
(menghapus elemen) yang berarti mengurangi jumlah piring dalam tumpukan.
Bila tumpukan itu sudah habis atau tinggal sedikit, maka pegawai warung akan
menambahkan piring lain yang masih bersih (menambah elemen). Piring yang
terakhir kali dimasukan pasti akan terletak ditumpukan paling atas dan piring
yang terletak paling atas dalam tumpukan itu pasti merupakan piring yang terakhir
kali dimasukan.
Kesimpulannya adalah penambahan dan penghapusan elemen hanya dapat di
lakukan di ujung atas tumpukan piring. Proses seperti ini biasa disebut Last In
Firts Out (LIFO).
Tumpukan hanya bisa menambah atau mengambil dari sebuah kotak lewat
satu ujung, yaitu ujung bagian atas. Tumpukan merupakan kumpulan data yang
sifatnya dinamis, artinya kita bsa menambah dan mengambil data darinya.
Sebuah contoh:
Misalnya kita mempunyai dua buah kotak yang kita tumpuk, sehinga kotak kita
letakan di atas kotak yang lain. jika kemudian tumpukan dua buah kotak itu kita
tambah dengan kotak ketiga, keempat dan seterusnya, maka akan kita peroleh
sebuah tumpukan kotak, yang terdiri dari N kotak.
Dari gambar ini kita bisa mengatakan bahwa kotak B ada di atas kotak A
dan ada di bawah kotak C. Gambar ini menunjukan bahwa dalam Tumpukan kita
hanya bisa menambah atau mengambil sebuah kotak lewat satu ujung, yaitu ujung
bagian atas. Dapat dilihat pula bahwa Tumpukan merupakan kumpulan data yang
sifatnya dinamis, artinya kita bisa menambah dan mengambil data darinya.
Kotak F adalah bagian atas dari tumpukan tersebut, jika ada kotak lain yang akan
di sisipkan maka ia akan di letakan di atas kotak F, dan jika ada kotak yang akan
diambil maka kotak F yang akan di ambil pertama kali.
Dengan memperhatikan ilustrasi tersebut maka kita bisa melihat bahwa
tumpukan merupakan suatu senarai (list) yang mempunyai watak masuk terakhir
keluar pertama (last in firts out LIFO).
B. Penyajian Tumpukan (stack)
Seperti di jelaskan di atas Tumpukan adalah kumpulan data. Dalam pasca
kita sudah mengenal tipe data terstruktur yang di sebut larik (array). Dengan
demikian kita bisa menggunakan larik ini untuk menyajikan sebuah tumpukan.
Tetapi bisa segera kita lihat bahwa penyajian tumpukan menggunakan larik adalah
kurang tepat. Alasannya adalah bahwa banyaknya elemen dalam larik sudah
tertentu (statis), sedangkan dalam tumpukan banyaknya elemen bisa sangat
bevariasi (dinamis).
Meskipun demikian larik bisa kita gunakan untuk menyajikan sebuah
tumpukan, dengan anggapan bahwa banyaknya elemen maksimum dari tumpukan
tersebut tidak akan melebihi batas maksimum banyaknya elemen dalam larik.
Pada suatu saat ukuran tumpukan akan sama dengan ukuran larik. Kalau kita
teruskan menambah data lagi, akan terjadi overflow. Dengan demikan perlu data
tambahan
untuk
mencatat
posisi
ujung
tumpukan.
Dengan kebutuhan seperti ini kita bisa menyajikan tumpukan menggunakan tipe
data terstruktur yang lain, yaitu tipe rekaman (record)yang terdiri dari dua medan.
Medan pertama bertipe larik untuk menyimpan elemen tumpukan, Medan kedua
bertipe integeruntuk mencatat posisi ujung tumpukan.
Dengan anggapan ini maka kita bisa mendeklarasikan tumpukan seperti ini:
Const MaxElemen = 255;
Type Tumpukan = record
Isi : array [1. . . MaxElemen ] of integer;
Atas : 0. . . MaxElemen
Var T : Tumpukan ;
Deklarasi di atas kita menganggap bahwa elemen tumpukan T, yang
tersimpan dalam larik T. Isi, adalah bertipe integerdan banyaknya elemen
tumpukan maksimum adalah sebesar MaxElemen =255 elemen.
Sesungguhnya elemen tumpukan tidak harus berupa integer, tetapi bisa
berupa data dengan tipe yang lain, misalnya real atau cher.Tetapi, tipe data dari
medan atas harus bilangan bulat antara 0 sampai MaxElemen, karena nilainya
menunjukan banyaknya elemen yang ada dalam suatu tumpukan, yang sekaligus
menunjukan posisi elemen teratas dalam tumpukan yang di maksud.
Contoh:
jika T.Atas = 5, berarti dalam tumpukan ada 5 elemen, yaitu T.Isi[1],...,
T.Isi[5]. Jika ada data yang diambil, maka nilai medan T.Atas dikurangi 1menjadi
4,
yang
berarti
T.Isi[4]adalah
elemen
teratas.
Sebaliknya, jika kedalam tumpukan ditambahkan sebuah elemen, maka nilai
T.Atas ditambah dengan 1 menjadi 6, sehingga T.Isi[6]adalah elemen teratas.
A. Operasi Pada Tumpukan (stack)
Ada dua operasi dasar yang bisa digunakan pada sebuah tumpukan, yaitu
operasi menyisipkan data atau memPush data dan operasi menghapus data atau
memPop data.
Operasi Push
Dengan penyajian tumpukan seperti diatas, maka operasi Push dapat
diimplementasikan, yaitu:
Procedure PUSH (var T : Tumpukan; X : integer);
Begin
T.Atas := T.Atas + 1;
T.Isi [T.Atas] := X
End;
Prosedur diatas akan menyiapkan tempat untuk X yang akan diPush kedalam
tumpukan, yaitu dengan menambah nilai medanT.Atasdengan 1 dan kemudian
menyisipkan
X
kedalam
larik
T.Isi.
tetapi jika suatu saat nilai T.Atas sama dengan MaxElemen dan kita akan
memPush lagi, maka akan terjadi overflow pada larik T.Isiberhubung deklarasi
banyaknya elemen larik tidak mencukupi .
Pada proseur diatas perlu ditambahkan dengan testing untuk memastikan
bahwa sebelum suatu data diPush nilai T.Atas belum mencapai MaxElemen.
Prosedure diatas perlu diubah menjadi:
Procedure PUSH (var T : Tumpukan; X : integer);
Begin
if T.Atas = MaxElemen then
writeln (TUMPUKAN SUDAH PENUH)
else
begin
T.Atas := T.Atas + 1; T.Isi [T.Atas] := X
End
end;
Dengan ditambahnya testing untuk mencetak nilai T.Atas, maka prosedur di atas
menjadi lebih sempurna.
Kita juga bisa mengubah pesan yang ditampilkan mengunakan statemen
writelndengan kata lain yang bertipe boolean, sehingga pesan salahnya kita
letakkan pada program utama . Dengan menggunakan kontrol berupa data bertipe
boolean, maka prosedur diatas bisa diubah menjadi seperti terlihat pada program
ProgramProsedur PUSH
Pemanggilan prosedur diatas dari program utama atau dari bagian lain
dilaksanakan dengan:
PUSH (T, Penuh, X);
Dengan T adalah perubah bertipe tumpukan, penuh bertipe boolean dengan X
bertipe integer. Berdasarkan nilai perubah penuh bisa ditentukan langkah
selanjutnya yang perlu diambil.
Operasi Pop
Adalah operasi untuk menghapus elemen yang terletak pada posisi paling atas
dari sebuah tumpukan. Sama halnya dengan operasi Push, maka dengan deklarasi
tumpukan di atas prosedur untuk operasi Pop bisa diimplementasikan, yaitu:
Prosedure Pop (var T : Tumpukan );
Begin
T.Atas := T.Atas 1
end;
Timbul pertanyaan, seandainya tumpukan sudah kosong lalu apa yang akan
diPop? Jawabannya tentu saja adalah tidak mungkin memPop suatu tumpukan jika
tumpukan
tersebut
sudah
kosong.
prosedur diatas perlu ditambah testing untuk mencetak kosong tidaknya sebuah
tunpukan sebelum proses memPop suatu elemen tumpukan dilaksanakan.
Tumpukan yang kosong ditunjukan dengan nilai T.Atas sama dengan 0.
Sehingga kita bisa melengkapi prosedur diatas menjadi:
Prosedur Pop (var T : Tumpukan);
Begin
if T.Atas = 0 then
writeln (TUMPUKAN SUDAH KOSONG)
else
T.Atas : = T.Atas 1
End;
Cara lain untuk melihat kosong tidaknya tumpukan adalah dengan
membuat suatu fungsi yang menghasilkan suatu data yang bertipe boolean. Cara
ini lebih disarankan dari cara di atas, karena dengan mengetahui nilai fungsi
tersebut kita segera bisa tahu kosong tidaknya suatu tumpukan. alasan lain adalah
supaya
sifat
modularitas
program
tetap
dijalankan.
Kecuali itu sering akli kita juga perlu mengetahui nilai data yang baru saja diPop.
Untuk itu prosedur di atas bisa diubah menjadi sebuah fungsi seperti:
Program fungsi Pop(dengan fungsi untuk mentest kosong tidaknya tumpukan)
end;
{* fungsi Pop *}
Dalam program utama kita bisa memanggil program di atas dengan:
X : = pop (T) ;
Dengan x (dalam contoh) adalah data bertipe integer.
B. Contoh Pemakaian Tumpukan
Untuk lebih memahami operasi yang terjadi pada tumpukan, berikut sajian
contoh program yang memanfaatkan tumpukan untuk membalik kalimat. Dalam
hal ini yang dibalik adalah seluruh kalimat, bukan perkata. Bisa dicoba dengan
B. Definisi
Begin
Pop (X ,S ) ;
write (X ,
);
End ;
Writeln ;
Write (coba lagi dengan data yang lain
Gotoxy (wherex-2 , wherey) ; temp
until upcase (temp) = N
End.
(Y /N) ? [ ] ) ;
: = readkey
Prefix
+A B
- + AB C
* + AB C D
- A/ B * C $ D E
[+ A B] * [- C D]
Jika [- A B] dimisalkan P, dan [- C D] kita misalkan Q, maka ungkapan
diatas bisa diitulis sebagai:
P*Q
Selanjunya, notasi infix diatas diubah menjadi notasi prefix:
*P Q
Dengan mengembalikan P dan Q pada notasi semula dan menghpus tanda
kurung bantuan, diperoleh notasi prefix dari persamaan (A + B) * (C D), yaitu:
*+ A B C D
Dari contoh tersebut, bisa diperhatikan bahwa dalam penulisan ungkapan,
bahkan yang rumit sekalipun, tidak pernah digunakan tanda kurung untuk
pengelompokkan. Dalam hal ini urutan oenulisan oprator akan menentukan
operasi mana yang harus dikerjakan lebih dahulu.
Notasi lain yang merupakan kebalikan notasi prefix adalah notasi posifx
atua notasi suffix, atau lebih dikenal dengan notasi Polish terbalik (Reserve Polish
Notation atau RPN). Dalam hal ini oprasi ditulis sesudah operand. Sama halnya
dengan notasi prefix, maka dalam notasi postfix ini pun tidak diperlukan adanya
tanda kurung pengelopokkan.
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 diperoleh:
[ A B +] * [ C D -]
Kemudian dengan memisalkan [ A B +] sebagai P, dan [ - C D ] sebagai Q,
dan kemudian dilakukan konversi dan subtitusi kembali, kita peroleh notasi
postfix untuk ungkapan diatas, yaitu:
AB+CD-*
Dalam hal ini pun rutan penlisan operator juga menentukan operasi mana
yang harus dikerjakan lebih dahulu. Beberapa contoh lain hasil konversi notasi
infix menjadi postfix.
Infix
A+BC
(A + B) / (C * D $ E)
A B / (C * D $ E)
Postfix
AB+C
AB+CD-*
ABCDE$*/ -
Algorima INFIX_KE_POSTFIX
Langkah 0 : Baca ungkapan dalan notasi infix, misalnya S; tentukan panjang
ungkapan tersebut. Misalnya N karakter; siapkan sebuah tumpukan kosong dan
siapkan derajat masing-masing operator, misalnya:$ berderajat 3, * dan /
berderajat 2, + dan berdrajat 1 dan ( berderajat 0.
Langkah 1 : Dimulai dari 1=1 sampai N kerjakan langkah-langkah berikut:
a. R=S[I]
b. Test nilai R. Jika R adalah:
Operand
: langsung ditulis
Kurung buka
: push kedalam tumpukan
Kurung tutup
Operator
Langkah 2 : Jika akhir notasi infix telah tercapai, dan tumpukan masih belum
kosong, pop semua isi tumpukan dan tulis hasilnya.
Untuk dapat memahami algoritma diatas ditulis menggunakan notasi infix
menjadi notasi postfix.
(A + B) / ( (C D) * E $ F)
Ilustrasi pengubahan notasi infix diatas menjadi notasi postfi secara
lengkap tersaji dalam tabel berikut:
Proses
ke
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Karakter
dibaca
(
A
+
B
)
/
(
(
C
D
)
*
E
$
F
)
Isi
Tumpukan
(
+(
+(
/
(/
((/
((/
-( ( /
-( ( /
(/
*( /
*( /
$*(/
$*(/
*( /
(/
/
Karakter
tercetak
Notasi postfix
Yang terbentuk
B
+
AB
AB+
AB+C
D
-
AB+CD
AB+CD
AB+CDE
F
$
*
AB+CDEF
AB+CDEF$
AB+CDEF$*
AB+CDEF$*
Ujung tumpukan
Dari ilustrasi diatas dapat dilihat notasi posfix darii ungkapan:
(A + B) / ( (C D) * E $ F)
adalah
AB+CDEF$*/
Program konversi notasi infix menjadi notasi postfix disajikan sebagai
berikut.
BAB III
A. Kesimpulan
1. Stack adalah list yang operasi penyisipan dan penghapusan elemennya
dilakukan di satu ujung atau biasa juga disebut tumpukkan.
2. Stack dapat dideklarasikan dengan sebuah record yang mempunyai
elemen sebuah array data untuk menyimpan elemen stack dan sebuah
variabel top untuk menunjuk elemen stack teratas (top element).
3. Operasi pada stack adalah: Inisialisasi, push pop, size, empty, full.
B. Saran
1. Pelajarilah Stack dalam struktur data sebagai materi dalam sistem
pembelajaran.
DAFTAR PUSTAKA