0% menganggap dokumen ini bermanfaat (0 suara)
10 tayangan15 halaman

MODUL5

Modul ini membahas tentang struktur data Stack, termasuk definisi, konsep, dan operasi dasar seperti push dan pop. Stack diimplementasikan dalam pemrograman menggunakan bahasa C++, dengan penjelasan tentang deklarasi, inisialisasi, dan pengecekan kondisi tumpukan. Selain itu, terdapat contoh program yang menerapkan struktur data Stack untuk menambah, menghapus, dan menampilkan data.

Diunggah oleh

FATHIA ISMI RAHMA
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
10 tayangan15 halaman

MODUL5

Modul ini membahas tentang struktur data Stack, termasuk definisi, konsep, dan operasi dasar seperti push dan pop. Stack diimplementasikan dalam pemrograman menggunakan bahasa C++, dengan penjelasan tentang deklarasi, inisialisasi, dan pengecekan kondisi tumpukan. Selain itu, terdapat contoh program yang menerapkan struktur data Stack untuk menambah, menghapus, dan menampilkan data.

Diunggah oleh

FATHIA ISMI RAHMA
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 15

MODUL IV

STACK
I. Tujuan

1. Mahasiswa mampu menjelaskan definisi dan konsep dari Stack

2. Mahasiswa mampu menerapkan Stack kedalam pemrograman

II. Dasar Teori


2.1 Definisi dan Konsep Stack

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

Gambar 01. Ilustrasi Stack


Definisi sederhana dari stack yakni suatu kumpulan data dimana terdapat

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

ditetapkan saat awal pembuatan/deklarasi stack.

2.2 Operasi Stack


Pada dasarnya operasi pada stack terdapat 2 yakni push (tambah data) dan

pop (menghapus/mengambil data). Untuk melengkapinya terdapat beberapa


operasi/proses.

Gambar 02. Operasi Stack


2.2.1 Deklarasi Stack

Pendeklarasian/pembuatan stack pada pemrograman (bahasa C++)


menggunakan struktur data STRUCK. Contoh, dibuat deklarasi tumpukan untuk

menyimpan data buku sebanyak 13 data.


const int max_stack = 13; Ukuran maksimal tumpukan (13 data)

struct tumpukan{ Nama struck (tumpukan)

int posisi; Indeks/posisi dari suatu data dalam stack

string judul[max_stack]; Data dalam stack (judul)

}buku; Nama tumpukan/stack (buku)

2.2.2 Inisialisasi Stack

Keadaan awal ketika pertama kali stack/tumpukan dibuat/dideklarasikan


sebaiknya nilai indeks awal dalam hal ini variabel posisi diisi dengan nilai -1

(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.

void posisi_awal{ Nama fungsi inisialisasi (posisi_awal)

buku.posisi = -1; Pengaksesan variabel posisi dari


struck tumpukan dengan cara
}
memanggil nama variabel dari
tumpukan yakni buku dan
dihubungkan dengan tanda titik.

2.2.3 Pengecekan Kondisi Tumpukan

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;
} }
} }

2.2.4 Operasi Penambahan Data (Push)


Penambahan data pada tumpukan dilakukan melalui ujung atas tumpukan.

Ketika terjadi penambahan data maka posisi pun akan berubah (bertambah).
Urutannya posisi dahulu ditambah kemudian data ditambahkan.

Gambar 03. Ilustrasi Operasi Push


void push_tumpukan(string data_masukkan){
if(kosong() == true){
buku.posisi++;
buku.judul[buku.posisi] = data_masukkan;
}else if(penuh() == false){
buku.posisi++;
buku.judul[buku.posisi] = data_masukkan;
}else{
cout<<"Tumpukan sudah penuh"<<endl;
}
}

2.2.5 Operasi Pengambilan/Penghapusan Data (Pop)

Gambar 04. Ilustrasi Operasi Pop


Pengambilan/penghapusan data pada tumpukan dilakukan melalui ujung

atas tumpukan. Data tidak benar-benar terhapus, hakikat dari pengambilan/


penghapusan data pada tumpukan adalah perubahan/pengurangan posisi/

indeks.

void pop_tumpukan(){
if(kosong() == true){
cout<<"Tumpukan kosong"<<endl;
}else{
matkul.posisi--;
}
}

2.2.6 Tampil Data Stack


Proses menampilkan data dari tumpukan dimulai dari data yang terdapat

pada ujung atas kemudian bergerak kebawah hingga ujung terbawah


(posisi/indeks 0).

Gambar 05. Ilustrasi Tampil Data Tumpukan


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;
}
}
}

III. Guided

3.1 Guided I

Buatlah program utuh yang menerapkan struktur data stack, yang memiliki

pilihan utama tambah data, hapus data, dan tampil data.


#include <iostream>
#include <windows.h>
using namespace std;

const int maksimal_tumpukan = 10;


bool keluar = false;
char ya_tidak;
int pilihan;
string data_masuk;

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 push_tumpukan(string data_masukkan){


if(kosong() == true){
buku.posisi++;
buku.data[buku.posisi] = data_masukkan;
cout<<"Berhasil memasukkan : "<<data_masukkan<<endl;
}else if(penuh() == false){
buku.posisi++;
buku.data[buku.posisi] = data_masukkan;
cout<<"Berhasil memasukkan : "<<data_masukkan<<endl;
}else{
cout<<"Tumpukan sudah penuh"<<endl;
}
}

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

Tulis dan jalankan sintak program dibawah, kemudian lakukan analisa.

#include <iostream>
#include <string.h>

#include <stdio.h>
#include <ctype.h>

using namespace std;

void push_data(char huruf);


char pop_data();
char tumpukan[100];

int posisi = -1;

int main(){
char kata[100];

int i, panjang, penghitung = 0;

cout<<"Masukkan sebuah kata (akhiri dengan enter): ";


gets(kata);

panjang = strlen(kata);

for(i = 0; i < panjang; i++){


push_data(tolower(kata[i]));

for(i = 0; i < panjang; i++){


if(tolower(kata[i]) == pop_data()){

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

yang terdiri dari JUDUL_BUKU, PENGARANG, JUMLAH_HALAMAN, dan HARGA.


2. Buatlah program yang menerapkan struktur data stack/tumpukan yang dapat

menampilkan hasil PREFIX dan POSTFIX dari INFIX ungkapan aritmetika :

A*(B+C)/D^E–F

Catatan : Sertakan sintak program dan screenshoot hasil running

program untuk jawaban Guided maupun Unguided.

V. Sumber

1. Lafore, Robert. 2003. Data Structures and Algorithms in Java, Second Edition.

Indiana Polis : Penerbit Sams Publishing

2. Sjukani, Moh. 2007. Struktur Data (Algoritma & Struktur Data 2) dengan C,
C++. Jakarta : Penerbit Mitra Wacana Media.

Anda mungkin juga menyukai