PENGERTIAN STACK BESERTA JENIS DAN CONTOHNYA PADA C++

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

Related Posts

Previous
Next Post »