STACK (TUMPUKAN)
Stack merupakan bagian dari struktur data yang dikategorikan ke dalam
 bentuk linear data, dimana operasi pemasukan maupun pengeluaran data 
selalu dilakukan pada salah satu sisinya[1]. Dalam dunia komputer, 
penggunaan stack (tumpukan) merupakan suatu hal yang umum digunakan 
seperti untuk penentuan alamat memory, penempatan ruang data dan 
aplikasi lain. Sebagai bagian dari struktur data, aplikasi stack  juga 
digunakan untuk berbagai macam keperluan seperti pengujian kalimat 
palindrome, penguji tanda kurung (matching parentheses), dan juga 
berfungsi sebagai konversi dari notasi infix menjadi notasi postfix.
Pada perhitungan aritmatika, notasi infix adalah notasi yang 
menempatkan operator ditengah dua operand sedangkan notasi Postfix 
adalah notasi yang menempatkan operator setelah dua operand. Penggunaan 
notasi infix merupakan hal yang lumrah digunakan dalam perhitungan 
aritmatika dibandingkan dengan penggunaan notasi Postfix, akan tetapi 
bagi mesin kompilasi notasi Postfix merupakan notasi yang digunakan 
untuk melakukan suatu perhitungan.
Tulisan ini dibuat untuk memberikan gambaran secara jelas proses 
simulasi konversi atas dua notasi aritmatika tersebut, berdasarkan studi
 literatur dari beberapa buku dan dituangkan dengan bantuan bahasa 
pemrograman Pascal. Adapun proses konversi ini ditujukan untuk 
menjelaskan bagaimana mesin kompilasi dapat merubah notasi infix yang 
biasa digunakan oleh berbagai kalangan menjadi notasi Postfix yang 
dimengerti oleh mesin kompilasi sehingga suatu proses perhitungan 
aritmatika dapat dilaksanakan oleh komputer. Alasan pemilihan bahasa 
pemrograman Pascal digunakan karena fleksibilitas bahasa tersebut dalam 
menerangkan implementasi dan aplikasi dari struktur data dalam bentuk 
pemrograman (2).
TEORI
1. Definisi
Dalam dunia komputer, penggunaan stack atau tumpukan merupakan salah 
satu komponen penting untuk menjamin proses penanganan suatu data 
disamping hal lain seperti Queue (antrian), linked list, dan tree.
Definisi 1.
Stack adalah suatu koleksi atau kumpulan item data yang teroganisasi 
dalam bentuk urutan linear, yang operasi pemasukan dan penghapusan 
datanya dilakukan pada salah satu sisinya[1]
Definisi 2.
Diberikan suatu himpunan yang terurut himpunan sebagai S = {S1, S2, 
……., ST}, T pada anggota S merupakan linear order, sehingga stack dari 
himpunan tersebut memiliki informasi sebagai berikut [1] :
1. Elemen puncak dari stack dalam himpunan S dikatakan sebagai TOPSleep, sehingga :
    TOP[S} = ST ………………………………………………………………….(1)
2. Banyaknya elemen stack dalam himpunan S dikatakan sebagai 
NOELSleep, sehingga NOELSleep = T, dimana himpunan dari S tersebut dapat
 disusun sebagai :
    S = {S1, S2, ………., SNOEL} ………………………..(2)
Dari dua definisi tersebut di atas maka suatu stack dapat digambarkan sebagai berikut :
1. Suatu stack dalam keadaan kosong akan memiliki informasi NOEL(S) = 0 dan TOP(S)= undefined.
    clip_image002
        S
2. Untuk stack yang bukan kosong, maka akan memiliki informasi 
seperti yang digambarkan di bawah ini dimana informasi yang ada adalah 
NOEL(S) = 1 dan TOP(S) = Merah
    clip_image006
          S
Untuk stack yang berisi lebih dari n jumlah data maka informasi yang 
ada pada stack tersebut berisikan NOEL(S) = 2 (jika berisi 2 data) dan 
TOP(S) = Biru seperti ditunjukan pada gambar di bawah ini :
    clip_image008
           S
Elemen-elemen yang berada dalam stack tersebut di atas, memiliki 
prinsip dasar dalam pengoperasiannya yaitu prinsip LIFO (Last In First 
Out) atau yang masuk paling belakang akan memiliki prioritas untuk 
keluar paling depan.
Suatu stack dapat digambarkan sebagai suatu array (larik) berdimensi 
satu yang elemen-elemennya berkisar antara 1 sampai n elemen. Dengan 
demikian jika suatu stack didefinisikan dengan n elemen maka dapat 
dikatakan jumlah maksimum dari stack atau NOEL(S) nya adalah n, sehingga
 penambahan elemen stack yang ke n+1 tidak diperkenankan atau stack 
tersebut dalam kondisi overflow. Hal tersebut juga berlaku untuk stack 
dengan nilai minimum yaitu NOEL(S) dari stack dalam kondisi 0, jika 
dilakukan operasi pengambilan elemen atas stack tersebut akan 
mengakibatkan stack tersebut dalam kondisi underflow. Dua kondisi 
tersebut merupakan dasar dalam merancang suatu aplikasi pemrograman 
komputer.
 
2. Operasi-operasi Stack
Dalam penggunaannya suatu stack memiliki beberapa operasi yang dapat 
diterapkan seperti membuat stack, penambahan eleme ke dalam stack, 
menghapusan elemen dari dalam stack, dan operasi lain yang berhubungan 
dengan stack tersebut. Adapun operasi-operasi dasar dari suatu stack 
adalah :
a) Create(Stack)
Operasi Create(Stack) digunakan untuk membuat suatu stack baru dengan
 nama stack, yang nilai elemen saat stack tersebut dibuat adalah NOEL(S)
 = 0, TOP(S) = NULL (tidak terdefinisikan)
b) IsEmpty(Stack)
Operasi ini merupakan operasi untuk mencek isi dari suatu stack dalam
 keadaan kosong atau berisi. Operasi ini memiliki 2 (dua) kondisi 
boolean yaitu :
a. True jika stack tersebut kosong atau dapat dikatakan NOEL(S) = 0
b.False jika stack tersebut tidak dalam kondisi kosong atau dapat dikatakan NOEL(S) > 0
c) Push(Stack, Elemen)
Operasi ini merupakan operasi untuk menambahkan satu elemen dengan 
nilai X pada puncak suatu stack, sehingga posisi TOP(S) akan bernilai X,
 penerapan operasi push pasa suatu stack S akan berakibat overflow jika 
NOEL(S) dari stack tersebut telah bernilai maksimum.
d) Pop(Stack)
Operasi ini berfungsi untuk menghapus satu elemen dari stack S, 
sehingga posisi NOEL(S) akan berkurang satu elemen, dan TOP(S) akan 
berubah. Operasi pop dapat menyebabkan kondisi underflow jika suatu 
stack S yang berada dalam kondisi minimum dikenakan operasi pop.
 
| Operasi yang dilakukan | Isi Stack | Keterangan | 
| Kondisi Awal | kosong | - | 
| PUSH('A',S) | A | - | 
| PUSH('B',S) | AB | - | 
| PUSH('C',S) | ABC | - | 
| POP(Data,S) | AB | Variabel Data berisi 'C' | 
| PUSH('D',S) | ABD | - | 
| POP(Data,S) | AB | Data berisi 'D' | 
| POP(Data,S) | A | Data berisi 'B' | 
3. Notasi Infix dan Postfix
Suatu perhitungan aritmatika biasanya berhubungan dengan operand dan 
operator. Operand merupakan suatu karakter atau elemen yang nilainya 
dioperasikan dengan bantuan suatu operator untuik menghasilkan suatu 
solusi.
Misalkan jika diberikan suatu ekspresi aritmatika 2 * 3, maka elemen 
‘dua’ dan elemen ‘tiga’ merupakan operand dari ekspresi tersebut dan 
elemen ‘*’ merupakan operator perkalian atas dua operand yang 
menghasilkan suatu solusi. Suatu ekspresi aritmatika dapat dibedakan 
dalam tiga bentuk notasi perhitungan yaitu :
1) Notasi prefix, jika operator ditempatkan sebelum dua operand
2) Notasi infix, jika operator ditempatkan diantara dua operand
3) Notasi postfix, jika operator ditempatkan setelah dua operand
Dalam penggunaannya, dalam kehidupan sehari-hari notasi infix 
merupakan notasi aritmatika yang paling banyak digunakan untuk 
mengekspresikan suatu perhitungan artimatik dibanding dengan dua notasi 
yang lain, akan tetapi notasi Postfix merupakan notasi yang digunakan 
oleh mesin kompilasi pada komputer dengan maksud untuk mempermudah 
proses pengkodean, sehingga mesin kompilasi membutuhkan stack untuk 
proses translasi ekspresi tersebut.