MODUL5
MODUL5
STACK
I. Tujuan
Data 5
Data 5
Data 5
Data 4 Data 4
Data 3 Data 3
Data 2 Data 2
Data 1 Data 1
Data 0 Data 0
data seolah-olah berada diatas data yang lain, susunan data yang dimulai dari
bawah dan terus bertambah keatas. Penambahan dan pengurangan data
seolah-olah dilakukan hanya pada satu ujung yakni ujung atas, “Come In And
Come Out Of The Top”, seperti yang diilustrasikan pada gambar 01. Penambahan
(push) dan pengurangan (pop) data pada stack mengikuti kaidah/aturan FILO
(First In Last Out), data yang pertama masuk akan menjadi yang terakhir keluar
atau LIFO (Last In First Out), data yang terakhir masuk akan menjadi data yang
pertama keluar.
Posisi/letak data pada suatu stack ditandai dengan indeks yang dimulai dari
0. Semisal pada stack terdapat satu data maka data tersebut terdapat pada
indeks 0, sehingga jika stack masih kosong, belum memiliki data sama sekali
maka dapat dikatakan indeks matriks tersebut -1 (minus satu). Ukuran stack
memiliki batasan atau maksimal jumlah data yang tertumpuk, biasanya
(minus 1), hal ini untuk menunjukkan jika tumpukan/stack masih kosong belum
ada data sama sekali. Dalam praktik disini untuk proses inisialisasi nilai posisi
dibuat dalam sebuah fungsi (prosedur) dengan nama posisi_awal yang akan
dipanggil pada fungsi main atau fungsi lainnya.
Kondisi tumpukkan yang dicek yakni apakah tumpukan masih kosong belum
ada isinya sama sekali dan apakah tumpukan sudah penuh, mencapai posisi
maksimum. Manfaat dari proses pengecekan ini untuk menentukan apakah stack
masih dapat ditambahkan data atau apakah masih ada data pada tumpukkan
untuk diambil/dihapus.
bool kosong(){ bool penuh(){
if(buku.posisi == -1){ if(buku.posisi == max_stack-1){
return true; return true;
}else{ }else{
return false; return false;
} }
} }
Ketika terjadi penambahan data maka posisi pun akan berubah (bertambah).
Urutannya posisi dahulu ditambah kemudian data ditambahkan.
indeks.
void pop_tumpukan(){
if(kosong() == true){
cout<<"Tumpukan kosong"<<endl;
}else{
matkul.posisi--;
}
}
III. Guided
3.1 Guided I
Buatlah program utuh yang menerapkan struktur data stack, yang memiliki
struct tumpukan{
int posisi;
string data[maksimal_tumpukan];
};
tumpukan buku;
void inisialisasi(){
buku.posisi = -1;
}
bool kosong(){
if(buku.posisi == -1){
return true;
}else{
return false;
}
}
bool penuh(){
if(buku.posisi == maksimal_tumpukan - 1){
return true;
}else{
return false;
}
}
void pop_tumpukan(){
if(kosong() == true){
cout<<"Tumpukan kosong"<<endl;
}else{
buku.posisi--;
cout<<"Data berhasil dihapus"<<endl;
}
}
void tampil_data(){
if(kosong() == true){
cout<<"Tidak ada data"<<endl;
}else{
for(int c = buku.posisi; c >= 0; c--){
cout<<buku.data[c]<<endl;
}
}
}
int main()
{
inisialisasi();
do{
cout<<"\t"<<"Stack Apps"<<endl;
cout<<"1. Masukkan data kedalam Stack"<<endl;
cout<<"2. Hapus data dari Stack"<<endl;
cout<<"3. Tampilkan data Stack"<<endl;
cout<<"4. Keluar"<<endl;
cout<<"Silahkan pilih (1-4) : ";
cin>>pilihan;
switch(pilihan){
case 1 :
cout<<"Silahkan masukkan data : ";
cin>>data_masuk;
push_tumpukan(data_masuk);
cout<<"Keluar (y/t) ? ";
cin>>ya_tidak;
if(ya_tidak == 'y' || ya_tidak == 'Y'){
cout<<" Jumpa kembali "<<endl;
keluar = true;
}else{
system("cls");
}
break;
case 2 :
pop_tumpukan();
cout<<"Keluar (y/t) ? ";
cin>>ya_tidak;
if(ya_tidak == 'y' || ya_tidak == 'Y'){
cout<<" Terima kasih"<<endl;
keluar = true;
}else{
system("cls");
}
break;
case 3 :
tampil_data();
cout<<"Keluar (y/t) ? ";
cin>>ya_tidak;
if(ya_tidak == 'y' || ya_tidak == 'Y'){
cout<<" Terima kasih"<<endl;
keluar = true;
}else{
system("cls");
}
break;
case 4 :
cout<<"Yakin ingin keluar (y/t) ? ";
cin>>ya_tidak;
if(ya_tidak == 'y' || ya_tidak == 'Y'){
cout<<" Terima kasih"<<endl;
keluar = true;
}
system("cls");
break;
default :
cout<<"Pilihan tidak tersedia..."<<endl;
cout<<"Keluar (y/t) ? ";
cin>>ya_tidak;
if(ya_tidak == 'y' || ya_tidak == 'Y'){
cout<<" Terima kasih"<<endl;
keluar = true;
}else{
system("cls");
}
}
}while(keluar == false);
return 0;
}
3.2 Guided II
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(){
char kata[100];
panjang = strlen(kata);
penghitung++;
}
if(penghitung == panjang){
cout<< kata <<" adalah palindrom"<<endl;
}else{
cout<< kata <<" bukan palindrom"<<endl;
}
return 0;
}
void push_data(char huruf){
tumpukan[++posisi] = huruf;
}
char pop_data(){
return tumpukan[posisi--];
}
IV. Unguided
1. Modifikasi tugas guided 1, sehingga tumpukan dapat menyimpan data buku
A*(B+C)/D^E–F
V. Sumber
1. Lafore, Robert. 2003. Data Structures and Algorithms in Java, Second Edition.
2. Sjukani, Moh. 2007. Struktur Data (Algoritma & Struktur Data 2) dengan C,
C++. Jakarta : Penerbit Mitra Wacana Media.