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.
0 Comments