PENGERTIAN STACK BESERTA JENIS DAN CONTOHNYA PADA C++
PENGERTIAN STACK BESERTA JENIS DAN CONTOHNYA PADA C++
Pengertian Stack
Stack atau tumpukan adalah salah satu struktur data di dalam pemrograman. Stack merupakan suatu struktur data yang seolah-olah terlihat seperti data yang tersusun secara„menumpuk‟, dimana ada data yang terletak di atas data yang lainnya. Bersifat LIFO (Last In First Out), yaitu objek yang terakhir masuk ke dalam stack, akan dikeluarkan terlebih dahulu dari stack.
Operasi semua pada Stack :
Menginisialisasi Stack baru
IsFull mengecek apakah STACK sudah penuh
IsEmpty mengecek apakah STACK sudah kosong
Push menambah data pada STACK pada tumpukan paling atas
Pop mengambil data pada STACK pada tumpukan paling atas
Show mencetak semua data dalam tumpukan
Sebagai ilustrasi dari penggunaan operator-operator di atas, perhatikan contoh berikut ini: Dimulai dari sebuah stack S kosong, S = [ ]. S.top = belum terdefinisi.
Mula-mula kita PUSH elemen A, diperoleh Stack S = [A]. S.top = A.
Setelah itu kita PUSH elemen B, diperoleh Stack S = [B, A]. S.top = B.
Kemudian kita PUSH kembali elemen C, diperoleh Stack S = [C, B, A]. S.top = C.
Apabila kita lakukan POP sekali, diperoleh Stack S = [B, A]. S.top = B.
Kemudian kita PUSH elemen D, diperoleh Stack S = [D, B, A]. S.top = D.
Agar lebih jelas, perhatikan Gambar 4.1.
Gambar 4.1
C. Scenario
1. Kegiatan 1: Memahami Stack
Step 1 : Perhatikan Gambar 4.2. Terdapat 3 tempat paku (A,B,C) dan 3 balok dengan ukuran berbeda-beda (B1, B2, B3, B4). Pindahkan keempat balok ke paku A dengan syarat, Balok yang lebih kecil, tidak boleh berada di bawah balok yang lebih besar.
Gambar 4.2
Step 2 : Kita anggap, paku-paku tersebut sebagai Stack, sehingga, mengambil balok dari paku merupakan Pop, memasukkan balok ke paku merupakan Push dan variabel X bertipe balok yang digunakan untuk menyimpan balok yang sedang diambil.
Step 3 : Dari hasil analisis yang dilakukan, maka akan didapatkan hasil sebagai berikut:
1 X = POP(B) 11 X = POP(A) 21 X = POP(A)
2 PUSH(C, X) 12 PUSH(C, X) 22 PUSH(B, X)
3 X = POP(B) 13 X = POP(B) 23 X = POP( C )
4 PUSH(A, X) 14 PUSH(C, X) 24 PUSH(A, X)
5 X = POP( C ) 15 X = POP(B) 25 X = POP(B)
6 PUSH(A, X) 16 PUSH(A, X) 26 PUSH(C, X)
7 X = POP(B) 17 X = POP( C ) 27 X = POP(B)
8 PUSH(C, X) 18 PUSH(A, X) 28 PUSH(A, X)
9 X = POP(A) 19 X = POP( C ) 29 X = POP( C )
10 PUSH(B, X) 20 PUSH(B, X) 30 PUSH(A, X)
2. Kegiatan 2: Stack menggunakan Array
Dengan menggunakan contoh kasus paku dan donat, kita dapat membuat Stack menggunakan Array sebagai berikut:Step 1 : Buat struck Balok. Balok dalam hal ini kita anggap memiliki nama dan diameter.
struct Balok{
string nama;
double diameter;
};
Step 2 : Buat struck Paku (Paku merupakan Array yang menyimpan data dengan tipe Balok). Selain menyimpan Balok, Paku juga menyimpan kapasitas maksimum balok yang dapat disimpan dan banyak balok yang sedang disimpan.
struct Paku{
Balok tumpukan[4];
int max;
int top;
};
Step 3 : Buat method untuk menginisialisasi stack baru.
void newStack(Paku &S, int kapasitas){
S.top = 0;
S.max = kapasitas;
}
Step 4 : Buat method isFull. Method ini digunakan untuk mengecek apakah stack dalam keadaan penuh atau tidak.
int isFull(Paku S){
return ( S.max <= S.top);
}
Step 5 : Buat method isEmpty. Method ini digunakan untuk mengecek apakah stack dalam keadaan kosong atau tidak.
int isEmpty(Paku S){
return ( S.top <= 0);
}
Step 6 : Buat method push. Digunakan untuk memasukkan objek ke dalam stack pada posisi paling atas
Algoritma:
• Cek apakah stack penuh
• Jika stack belum penuh, masukkan objek pada stack dengan indeks top of stack
• Naikkan nilai top of stack
void push(Paku &S, Balok B){
if(isFull(S)){
cout<<"Paku Penuh"<<endl;
} else{
S.tumpukan[S.top] = B;
S.top++;
}
}
Step 7 : Buat method pop. Digunakan untuk mengambil objek teratas dari sebuah stack. Algoritma:
• Cek apakah stack dalam keadaan kosong atau tidak
• Jika tidak ambil objek teratas dari stack
• Kurangi nilai top of stack
Balok pop(Paku &S){
if(isEmpty(S)){
cout<<"Paku Kosong"<<endl;
} else{
S.top--;
return S.tumpukan[S.top];}
}
Step 8 : Buat method show. Digunakan untuk menampilkan semua data dari indeks ke-top sampai indeks ke 0.
void show(Paku S){
for(int i=S.top-1; i>=0;i--){
cout<<S.tumpukan[i].nama<<"\t"<<S.tumpukan[i].diameter<<endl;
}
}
Step 9 : Buat method main. Untuk method ini, buat sesuai kebutuhan. Misal, pada kasus ini untuk melakukan pengecekan saja. Dari method main ini, maka didapatkan output seperti pada Gambar 4.3.
int main(){
Paku A;
newStack(A,2);
cout<<isFull(A)<<endl;
cout<<isEmpty(A)<<endl;
Balok B1;
B1.nama = "Balok satu";
B1.diameter = 10;
Balok B2;
B2.nama = "Balok dua";
B2.diameter = 5;
push(A,B1);
push(A,B2);
push(A,B1);
show(A);
pop(A);
show(A);
pop(A);
show(A);
pop(A);
show(A);
getch();
return 0;
}
Gambar 4.3
3. Kegiatan 3: Stack menggunakan Pointer
Dengan menggunakan contoh kasus paku dan donat, kita dapat membuat Stack menggunakan Pointer sebagai berikut:Step 1 : Buat struck Balok
struct Balok{
string nama;
double diameter;
};
Step 2 : Buat struck Paku (Paku menyimpan data paling atas dari suatu stack yang dengan tipe pointer Balok).
struct Paku{
Balok *top;
};
Step 3 : Buat method untuk menginisialisasi stack baru
void newStack(Paku &S){
S.top = NULL;
}
Step 4 : Buat method isEmpty. Method ini digunakan untuk mengecek apakah stack dalam keadaan kosong atau tidak. Karena menggunakan pointer, maka stack dianggap kosong jika top of stack menunjuk ke NULL. Method isFull tidak perlu dibuat karena jika menggunakan pointer, panjang stack bisa dinamis.
int isEmpty(Paku S){
return ( S.top == NULL);
}
Step 5 : Buat method push. Digunakan untuk memasukkan objek ke dalam stack pada posisi paling atas.
Algoritma:
• Masukkan objek pada stack dan set nilai next dari objek baru menuju top of stack.
• Set top of stack menjadi objek baru.
void push(Paku &S, Balok *&B){
B->next = S.top;
S.top = B;
}
Step 6 : Buat method pop. Digunakan untuk mengambil objek teratas dari sebuah stack. Algoritma:
• Cek apakah stack dalam keadaan kosong atau tidak
• Jika tidak ambil objek teratas dari stack
• Set nilai top of stack menjadi nextnya
Balok pop(Paku &S){
if(isEmpty(S)){
cout<<"Paku Kosong"<<endl;
}
else{
Balok *d = S.top;
S.top = S.top->next;
return *d;}
}
Step 7 : Buat method show. Digunakan untuk menampilkan semua data dari indeks ke-top sampai terakhir.
void show(Paku S){
Balok *p; p=S.top;
while(p != NULL){
cout<<p->nama<<"\t"<<p->diameter<<endl;
p=p->next;
}
}
Step 8 : Buat method main. Untuk method ini, buat sesuai kebutuhan. Misal, pada kasus ini untuk melakukan pengecekan saja. Dari method main ini, maka didapatkan output seperti pada Gambar 4.4.
int main(){
Paku A;
newStack(A);
cout<<isEmpty(A)<<endl; Balok *B1 = new Balok;
B1->nama = "Balok satu"; B1->diameter = 10;
Balok *B2 = new Balok;
B2->nama = "Balok dua";
B2->diameter = 5; push(A,B1);
push(A,B2);
show(A);
pop(A);
show(A);
pop(A);
show(A);
pop(A);
show(A);
getch();
return 0;
}
Gambar 4.4