Stack adalah salah satu struktur data yang memiliki sistem kerja
Last In First Out (LIFO), yang terakhir masuk pertama keluar. Dapat di
ilustrasikan seperti sebuah tumpukan buku, ketika mengambil sebuah buku di
dalam tumpukan itu maka harus diambil satu persatu dari buku yang paling atas
dari tumpukan buku tersebut.
Sebuah stack hanya dapat ditambahkan dan
dikurangi elemennya hanya dari satu sisi yakni elemen atasnya atau biasa
disebut Top Of Stack.
Fungsi dalam Stack:
- Fungsi init: fungsi yang digunakan untuk inisialisasi atau membuat stack baru yang masih kosong.
- Fungsi full: digunakan untuk mengetahui stack penuh atau tidak.
- Fungsi empty: digunakan untuk mengetahui stack kosong atau tidak.
- Fungsi clear: digunakan untuk mengosongkan stack. Stack dianggap kosong apabila puncak stack berada pada posisi -1.
- Fungsi push: digunakan untuk menambahkan data ke dalam stack. Penambahan data tidak bisa dilakukan apabila stack sudah penuh. Urutan perintahnya adalah: menambahkan nilai top dan menambahkan data pada posisi nilai top. Jika dalam Linked List menggunakan method addLast
- Fungsi pop: digunakan untuk mengeluarkan data teratas stack dengan syarat bahwa stack tidak kosong. Urutan perintahnya adalah : menghapus data pada posisi nilai top dan menurunkan nilai top. Jika dalam Linked List menggunakan method removeLast
Contoh
penerapannya :
package PERCOBAAN_STACK;
import java.util.Stack;
public class StackArray {
private int maxsimum; //penentu batas
elemen stack maksimum
private double [] stackarray; //array untuk
menyimpan stack
private int top; //indeks array
public void total (int s) //menentukan ukuran
kapasitas stack
{
maxsimum = s; // batas elemen
stack sama dengan total stack yang di
pushkan
stackarray = new double [maxsimum]; //wadah /tempat penyimpanan stack
top = -1; // posisi top berada
di top - 1
}
public void push(double data) //pengimplementasian data bertipe double
{
if (top >= maxsimum-1) //kondisi dimana
wadah penyimpanan penuh
System.out.println("Karena
stack penuh , Jadi " +data+ " tidak bisa masuk "); //mencetak pernyataan bila wadah penuh
else
{
top ++;
stackarray[top] = data;
System.out.println(data + "
Bisa masuk ke stack ");//kondisi jika stack masih bisa diisi
}
}
public double pop()
{
double temp;
if (top>=0) //kondisi pop dimulai dari 0
{
temp = stackarray[top];
System.out.println(temp + "
Dikeluarkan dari stack ");
//kondisi dimana push
mengeluatkan daata yang berada dalam posisi top
top --;
return (temp);
}
else
{
System.out.println(" isi stack
kosong ");
return( - 1);
}
// kondisi jika isi stack
kosong
}
public void view()
{
System.out.print(" isi stack =
" );
for(int i=0; i<=top; i++)
System.out.print(stackarray[i] +
" ~ ");
System.out.println();
}
//menampilkan isi dari
stack
public static void main(String[]
args) // method main untuk menjalankan program
{
StackArray stack = new StackArray
(); // tempat masukan data pada stack
stack.total(5);
stack.push(7.6);
stack.push(6.4);
stack.push(9.1);
// memasukkan data pada
stack
stack.view();
//melihat isi stack
stack.push(5.6);
stack.push(1.7);
stack.push(7.1);
// memasukkan data pada
stack
stack.view();
//melihat isi stack
stack.pop();
stack.pop();
// mengurangi atau
mengeluarkan data pada stack
stack.view();
//melihat isi stack
stack.pop();
stack.pop();
// mengurangi atau
mengeluarkan data pada stack
stack.view();
//melihat isi stack
stack.push(8.9);
stack.push(4.5);
stack.push(3.7);
stack.push(8.12);
// memasukkan data pada
stack
stack.pop();
// mengurangi atau
mengeluarkan data pada stack
stack.view();
//melihat isi stack
}
}
Queue adalah kumpulan data dengan penambahan data hanya melalui
satu sisi, yaitu belakang (tail) dan penghapusan data hanya melalui sisi depan
(head). Berbeda dengan stack yang bersifat LIFO maka queue bersifat FIFO(First
In First Out), yaitu data yang pertama masuk akan keluar terlebih dahulu dan
data yang terakhir masuk akan keluar terakhir.
Fungsi dalam Queue:
- Fungsi init : digunakan untuk membuat queue baru atau kosong, yaitu dengan memberi nilai awal (head) dan nilai akhir (tail) dengan -1.
- Fungsi full: digunakan untuk mengetahui apakah queue sudah penuh atau belum. Dilakukan dengan memeriksa nilai akhir (tail) apakah sudah sama dengan maksimal queue.
- Fungsi empty: digunakan untuk mengetahui apakah queue masih kosong atau tidak. Dilakukan dengan memeriksa nilai akhir (tail) bernilai -1 atau tidak.
- Fungsi enqueue : digunakan untuk menambahkan elemen ke dalam queue.
- Fungsi dequeue : digunakan untuk mengambil elemen dari queue, dengan cara memindahkan semua elemen satu langkah ke posisi depannya sehingga elemen yang paling depan tertimpa.
- Fungsi clear : digunakan untuk menghapus semua elemen dalam queue. Ada dua cara yang bisa digunakan, yaitu menuliskan fungsi seperti inisialisasi atau memanggil fungsi remove sampai queue kosong.
public class Queue {
int queue[]=new int[3];
public void push(int value){
if(queue[0]==0){
queue[0]=value;
System.out.println("PUSH "+queue[0]);
}else if(queue[1]==0){
queue[1]=value;
System.out.println("PUSH "+queue[1]);
}else if(queue[2]==0){
queue[2]=value;
System.out.println("PUSH "+queue[2]);
}else{
isFull();
}
}
public void isFull(){
System.out.println("QUEUE IS FULL");
}
public void pop(){
if(queue[0]!=0){
System.out.println("POP "+queue[0]);
queue[0]=0;
}else if(queue[1]!=0){
System.out.println("POP "+queue[1]);
queue[1]=0;
}else if(queue[2]!=0){
System.out.println("POP "+queue[2]);
queue[2]=0;
}else{
isEmpty();
}
}
public void isEmpty(){
System.out.println("QUEUE IS EMPTY");
}
public void clear(){
queue[0]=0;
queue[1]=0;
queue[2]=0;
System.out.println("Queue is clear");
}
public void cetak(){
System.out.println("-------------Print--------------");
for(int i=0;i<queue.length;i++){
if(queue[i]!=0){
System.out.println(queue[i]+" ");
}
}
System.out.println("--------------------------------");
}
public static void main(String[] args) {
Queue s=new Queue();
s.push(5);
s.push(3);
s.push(2);
s.cetak();
s.pop();
s.cetak();
s.clear();
}
}
int queue[]=new int[3];
public void push(int value){
if(queue[0]==0){
queue[0]=value;
System.out.println("PUSH "+queue[0]);
}else if(queue[1]==0){
queue[1]=value;
System.out.println("PUSH "+queue[1]);
}else if(queue[2]==0){
queue[2]=value;
System.out.println("PUSH "+queue[2]);
}else{
isFull();
}
}
public void isFull(){
System.out.println("QUEUE IS FULL");
}
public void pop(){
if(queue[0]!=0){
System.out.println("POP "+queue[0]);
queue[0]=0;
}else if(queue[1]!=0){
System.out.println("POP "+queue[1]);
queue[1]=0;
}else if(queue[2]!=0){
System.out.println("POP "+queue[2]);
queue[2]=0;
}else{
isEmpty();
}
}
public void isEmpty(){
System.out.println("QUEUE IS EMPTY");
}
public void clear(){
queue[0]=0;
queue[1]=0;
queue[2]=0;
System.out.println("Queue is clear");
}
public void cetak(){
System.out.println("-------------Print--------------");
for(int i=0;i<queue.length;i++){
if(queue[i]!=0){
System.out.println(queue[i]+" ");
}
}
System.out.println("--------------------------------");
}
public static void main(String[] args) {
Queue s=new Queue();
s.push(5);
s.push(3);
s.push(2);
s.cetak();
s.pop();
s.cetak();
s.clear();
}
}
perbedaan
Stack dan Queue :
Stack
memakai sistem LIFO atau last in first out (yang pertama masuk akan keluar
terakhir, begitu pula yang terakhir masuk akan keluar pertama kali) yang
apabila kita mengahapus/ keluar data, maka data yang terakhirlah yang akan
terhapus/ keluar terlebih dahulu.
Sementara
queue memakai siste FIFO atau first in first out (yang pertama masuk akan
keluar pertama, begitu pula yang masuk terakhir akan keluar terakhir) yang
apabila kita menghapus / mengeluarkan data, maka data yang pertamalah yang akan
terhapus/ keluar terdahulu dan data yang terakhir akan terhapus/ keluar
terakhir.
Operasi pada stack :
§ Push : digunakan untuk menembah item
pada Stack pada Tumpukan paling atas.
§ Pop : digunakan untuk mengambil item
pada Stack pada Tumpukan paling atas.
§ Clear : digunakan untuk mengosongkan
Stack.
§ Create Stack : membuat Tumpukan baru
S, dengan jumlah elemen kosong.
§ MakeNull : mengosongkan Tumpukan S,
jika ada elemen maka semua elemen dihapus.
§ IsEmpty : fungsi yang digunakan
untuk mengecek apakah Stack sudah kosong.
§ Isfull : fungsi yang digunakan untuk
mengecek apakah Stack sudah penuh.
Operasi
pada Queue :
§ Create Queue (Q) : membuat antrian
baru Q, dengan jumlah elemen kosong.
§ Make NullQ (Q) : mengosongkan
antrian Q, jika ada elemen maka semua elemen dihapus.
§ EnQueue : berfungsi memasukkan data
kedalam antrian.
§ DeqQueue : berfungsi mengeluarkan
data terdepan dari antrian.
§ Clear : Menghapus seluruh Antrian
§ IsEmpty : memeriksa apakah antrian
kosong
§ IsFull : memeriksa apakah antrian
penuh.
Emoticon