Pengertian Stack
(Tumpukan)
Stack (Tumpukan) adalah kumpulan elemen-elemen data yang disimpan
dalam satu lajur linear. Kumpulan elemen-elemen data hanya boleh
diakses pada satu lokasi saja yaitu posisi ATAS (TOP) tumpukan.
Tumpukan digunakan dalam algoritma pengimbas (parsing), algoritma
penilaian (evaluation) dan algoritma penjajahan balik (backtrack).
Elemen-elemen di dalam tumpukan dapat bertipe integer, real, record
dalam bentuk sederhana atau terstruktur.
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO
(Last In First Out), benda yang terakhir masuk dalam stack akan
menjadi benda pertama yang dikeluarkan dari stack. Tumpukan disebut
juga “Push Down Stack” yaitu penambahan elemen baru (PUSH)ndan
penghapusan elemen dari tumpukann(POP). Contoh pada PDA (Push Down
Automaton). Sistem pada pengaksesan pada tumpukan menggunakn system
LIFO (Last In First Out), artinya elemen yang terakhir masuk itu yang
akan pertama dikeluarkan dari tumpukan (Stack). Ilustrasi tumpukan
(Stack) dapat digambarkan seperti tumpukan CD atau tumpukan sate.
Stack merupakan suatu susunan koleksi data dimana dapat ditambahkan
dan dihapus selalu dilakukan pada bagian akhir data, yang disebut
dengan Top Of Stack.
Sebelum struktur data tumpukan ini bisa digunakan, harus
dideklarasikan dahulu dalam kamus data. Ada beberapa cara
pendeklarasian struktur data ini, salah satunya dengan menggunakan
tata susunan linear (larik) dan sebuah variable, yang dikemas dalam
tipe data record. Stack (tumpukan) adalah struktur data bertipe
record yang terdiri dari field elemen, bertipe larik/array dengan
indek dari 1 sampai dengan MaksTum (Maksimum Tumpukan), atas, bertipe
interger berkisar dari 0 (saat kosong) sampai dengan MaksTum
(Maksimum Tumpukan).
B. Operasi – operasi pada Stack (Tumpukan)
Operasi yang sering diterapkan pada struktur data
Stack (Tumpukan) adalah Push dan Pop. Operasi – operasi yang dapat
diterapkan adalah sebagai berikut :
1. Push : digunakan untuk menembah item pada Stack
pada Tumpukan paling atas.
2. Pop : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.
3. Clear : digunakan untuk mengosongkan Stack.
4. Create Stack : membuat Tumpukan baru S, dengan jumlah elemen kosong.
5. MakeNull : mengosongkan Tumpukan S, jika ada elemen maka semua elemen dihapus.
6. IsEmpty : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.
7. Isfull : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh.
2. Pop : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.
3. Clear : digunakan untuk mengosongkan Stack.
4. Create Stack : membuat Tumpukan baru S, dengan jumlah elemen kosong.
5. MakeNull : mengosongkan Tumpukan S, jika ada elemen maka semua elemen dihapus.
6. IsEmpty : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.
7. Isfull : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh.
Pada proses Push, Tumpukan (Stack) harus diperiksa apakah jumlah
elemen sudah mencapai masimum atau tidak. Jika sudah mencapai
maksimum maka OVERFLOW, artinya Tumpukan penuh tidak ada elemen yang
dapat dimasukkan ke dalam Tumpukan. Sedangkan pada proses Pop,
Tumpukan harus diperiksa apakah ada elemen yang hendak dikeluarkan
atau tidak. Jika tidak ada maka UNDERFLOW, artinya tumpukan kosong
tidak ada elemen yang dapat diambil.
C. Macam – macam Stack
1. Stack dengan Array
Sesuai dengan sifat stack, pengambilan atau
penghapusan elemen dalam stack harus dimulai dari elemen teratas.
2. Double Stack dengan Array
Metode ini adalah teknik khusus yang dikembangkan
untuk menghemat pemakaian memori dalam pembuatan dua stack dengan
array. Intinya adalah penggunaan hanya sebuah array untuk menampung
dua stack.
Ilustrasi Stack pada saat Inisialisasi
Ilustrasi Stack pada saat full
Contohnya :
Class Tumpukan
{
private int ukuran;
private long[] tumpukan;
private int top;
public Tumpukan(int s)
{
ukuran = s;
tumpukan = new long[ukuran];
top = -1;
}
public void push(long j)
{
tumpukan[++top] = j;
}
public long pop()
{
return tumpukan[top--];
}
public long peek()
{
return tumpukan[top];
}
public boolean isEmpty()
{
return (top == -1);
}
public boolean isFull()
{
return (top == ukuran-1);
}
public void baca()
{
int i = top;
while( i>=0 )
{
System.out.print(tumpukan[i]);
System.out.print(" ");
i--;
}
System.out.println(" ");
}
}
class ApliStack
{
public static void main(String[] args)
{
Tumpukan stack = new Tumpukan(10);
stack.push(56);
stack.baca();
stack.push(45);
stack.baca();
stack.push(67);
stack.baca();
stack.push(83);
while( !stack.isEmpty() )
{
long nilai = stack.pop();
System.out.print(nilai);
System.out.print(" ");
}
System.out.println(" ");
}
}
-perbedaan ubuntu dengan windows
{
private int ukuran;
private long[] tumpukan;
private int top;
public Tumpukan(int s)
{
ukuran = s;
tumpukan = new long[ukuran];
top = -1;
}
public void push(long j)
{
tumpukan[++top] = j;
}
public long pop()
{
return tumpukan[top--];
}
public long peek()
{
return tumpukan[top];
}
public boolean isEmpty()
{
return (top == -1);
}
public boolean isFull()
{
return (top == ukuran-1);
}
public void baca()
{
int i = top;
while( i>=0 )
{
System.out.print(tumpukan[i]);
System.out.print(" ");
i--;
}
System.out.println(" ");
}
}
class ApliStack
{
public static void main(String[] args)
{
Tumpukan stack = new Tumpukan(10);
stack.push(56);
stack.baca();
stack.push(45);
stack.baca();
stack.push(67);
stack.baca();
stack.push(83);
while( !stack.isEmpty() )
{
long nilai = stack.pop();
System.out.print(nilai);
System.out.print(" ");
}
System.out.println(" ");
}
}
-perbedaan ubuntu dengan windows