Anda di halaman 1dari 14

LAPORAN PRAKTIKUM

STRUKTUR DATA DAN ALGORITME


MODUL 6
STACK (TUMPUKAN)

Disusun Oleh:
Muhammad Faza Abiyyu – 2211102010

Dosen
Wahyu Andi Saputra S.Pd., M. Eng.

PROGRAM STUDI S1 TEKNIK INFORMATIKA


FAKULTAS INFORMATIKA
INSTITUT TEKNOLOGI TELKOM
PURWOKERTO
2023
BAB I
Tujuan Praktikum

Tujuan Praktikum :

1. Memahami Konsep Struktur Data: Praktikum modul stack membantu


mahasiswa memahami konsep dasar struktur data, khususnya stack.

2. Implementasi Stack: Praktikum ini bertujuan untuk melatih mahasiswa


dalam mengimplementasikan stack menggunakan bahasa pemrograman
C++.

3. Penerapan dalam Pemecahan Masalah: Mahasiswa akan belajar


mengenali situasi atau masalah yang dapat diselesaikan dengan
menggunakan stack.

4. Analisis Kinerja: Selama praktikum, mahasiswa akan diajak untuk


menganalisis kinerja dari operasi-operasi pada stack, seperti
kompleksitas waktu dan ruang..

5. Peningkatan Keterampilan Pemrograman: Praktikum modul stack


bertujuan untuk meningkatkan keterampilan pemrograman mahasiswa.
BAB II
Tujuan Praktikum
Stack atau tumpukan merupakan sebuah kumpulan data yang diletakan
di atas data lain, seperti tumpukan rak buku. Satu hal yang perlu kita
ingat adalah bahwa kitab bisa menambah data dan mengambil data
lewat ujung yang sama, yang disebut sebagai ujung atas tumpukan (top
of stack). Lifo(last in First Out ) adalah sifat dari Stack data yang di
simpan terakhir akan di ambil lebih terdahulu, data yang diseimpan
pertama kali akan diambil paling akhir
Operasi Strack ada banyak yaitu :
- Push
Mengisi data ke atas stack (tumpukan).
- Pop
Menghapus/Menghilangkan satu data ditumpukan teratas.
- isFull
Memeriksa apakah ruang stack sudah penuh atau belum.
- isEmpty
Memeriksa apakah ruang stack kosong atau tidak.
- Peek
Mencek data diposisi tertentu.
- Count
Menghitung banyak data pada stack.
- Change
Mengubah posisi data ke posisi tertentu.
- Display
Menampilkan semua data pada stack
- Destroy
Menghapus atau membersihkan semua data pada stack
GUIDED 1
#include <iostream>
using namespace std;
string arrayBuku[5];
int maksimal = 5, top = 0;
bool isFull()
{
if (top == maksimal)
{
return true;
}
else
{
return false;
}
}
bool isEmpty()
{
if (top == 0)
{
return true;
}
else
{
return false;
}
}
void pushArrayBuku(string data)
{
if (isFull())
{
cout << "data telah penuh" << endl;
}
else
{
arrayBuku[top] = data;
top++;
}
}
void popArrayBuku()
{
if (isEmpty())
{
cout << "tidak ada data yang dihapus" << endl;
}
else
{
arrayBuku[top - 1] = "";
top--;
}
}
void peekArrayBuku(int posisi)
{
if (isEmpty())
{
cout << "tidak ada data yang bisa dilihat" << endl;
}
else
{
int index = top;
for (int i = 1; i <= posisi; i++)
{
index--;
}
cout << "posisi ke " << posisi << " adalah " <<
arrayBuku[index] << endl;
}
}
int countStack()
{
return top;
}
void changeArrayBuku(int posisi, string data)
{
if (posisi > top)
{
cout << "posisi melebihi data yang ada" << endl;
}
else
{
int index = top;
for (int i = 1; i <= posisi; i++)
{
index--;
}
arrayBuku[index] = data;
}
}
void destroyArraybuku()
{
for (int i = top; i <= 0; i--)
{
arrayBuku[i] = "";
}
top = 0;
}
void cetakArrayBuku()
{
if (isEmpty())
{
cout << " tidak ada data yang dicetak" << endl;
}
else
{
for (int i = top; i >= 0; i--)
{
cout << arrayBuku[i] << endl;
}
}
}
int main()
{
pushArrayBuku("Kalkulus");
pushArrayBuku("Struktur Data");
pushArrayBuku("Matematika Diskrit");
pushArrayBuku("Dasar Multimedia");
pushArrayBuku("Inggris");
cetakArrayBuku();
cout << "\n"
<< endl;
cout << "apakah data stack penuh? " << isFull() << endl;
cout << "apakah data stack kosong? " << isEmpty() << endl;
peekArrayBuku(2);
popArrayBuku();
cout << "banyaknya data = " << countStack() << endl;
changeArrayBuku(2, "Bahasa Jerman");
cetakArrayBuku();
cout << "\n"
<< endl;
destroyArraybuku();
cout << top;
cetakArrayBuku();
}

Output :

Penjelasan :

Program di atas adalah implementasi dari struktur data stack untuk


menyimpan kumpulan buku. Program ini menggunakan array dengan
ukuran tetap sebesar 5 untuk menampung buku-buku tersebut. Terdapat
beberapa fungsi yang disediakan, antara lain:

o pushArrayBuku(): Menambahkan buku ke dalam stack.


o popArrayBuku(): Menghapus buku dari stack.
o peekArrayBuku(): Melihat buku paling atas dalam stack.
o countStack(): Menghitung jumlah buku yang ada dalam stack.
o changeArrayBuku(): Mengubah buku pada posisi tertentu dalam stack.
o destroyArraybuku(): Mengosongkan seluruh stack.

Pada program ini, terdapat lima buku yang ditambahkan ke dalam stack
dengan judul "Kalkulus", "Struktur Data", "Matematika Diskrit", "Dasar
Multimedia", dan "Inggris". Setelah itu, isi stack dicetak ke layar. Program
juga melakukan pengecekan apakah stack sudah penuh atau kosong,
kemudian melihat buku paling atas, menghapus buku paling atas,
menghitung jumlah buku, dan mengubah buku pada posisi 2 menjadi
"Bahasa Jerman".
BAB III
Tugas dan Latihan

1. Buatlah Program untuk melakukan pembalikan terhadap kalimat


dengan menggunkan stack. Sebanyak 5

Contoh
Kalimat : Telkom Purwokerto
Hasil : otrekowruP mokleT

Source code :
#include <iostream>
#include <stack>

using namespace std;

int main()
{
string sentence;

cout << "Masukan Kalimat : ";


getline(cin, sentence);
// Create an empty stack.
stack<char> stack;

// Push setiap karakter ke stack.


for (char ch : sentence)
{
stack.push(ch);
}

// Pop setiap karakter dari stack dan menambahkan ke


new string.
string reversed_sentence = "";
while (!stack.empty())
{
reversed_sentence += stack.top();
stack.pop();
}
// Print kalimat terbalik.
cout << "Hasil : " << reversed_sentence << endl;

return 0;
}

Output :

Penjelasan :

Program di atas adalah pengimplementasian yang menggunakan


stack untuk membalikkan sebuah kalimat dan memeriksa apakah
kalimat tersebut merupakan palindrome.

Pada program di atas, user diminta untuk memasukkan sebuah


kalimat menggunakan getline(cin, sentence), dan kemudian kalimat
tersebut disimpan dalam variabel sentence.

Selanjutnya, program membuat sebuah stack kosong dengan


menggunakan stack<char> stack. Kemudian, setiap karakter dalam
kalimat dimasukkan ke dalam stack menggunakan loop for dan
stack.push(ch).

Setelah itu, program membalikkan kalimat dengan mempop setiap


karakter dari stack dan menambahkannya ke dalam string
reversed_sentence. Ini dilakukan dengan loop while dan stack.top()
untuk mendapatkan karakter teratas stack, kemudian stack.pop()
untuk menghapus karakter tersebut dari stack.

Setelah kalimat berhasil dibalikkan, program mencetak kalimat


terbalik menggunakan cout.
2. Dari soal no 1 buatlah program untuk menentukan apakah
kalimat tersebut yang di inputkan dalam program stack adalah
polindrom/tidak. Polindrom kalimat yang di baca dari depan
dan belakang sama

Contoh:

Kalimat : ini
Kalimat tersebut adalah polindrom

Kalimat : telkom
Kalimat tersebut adalah bukan polindrom

Algoritma :

1. Mulai
2. Masukkan kata
3. Hitung jumlah
4. Masukkan ke dalam stack (push)
5. Bandingkan elemen 1 dalam stack dengan elemen
terakhir (pop)
6. Perbandingan dilakukan berulang sebanyak jumlah
huruf
7. Jika huruf yang dibandingkan semuanya sama,
kata tersebut adalah polindrom
8. Selesai

Source code:

#include <iostream>
#include <stack>

using namespace std;

int main()
{
string sentence;

cout << "Masukan Kalimat : ";


getline(cin, sentence);
// Create an empty stack.
stack<char> stack;

// Push setiap karakter ke stack.


for (char ch : sentence)
{
stack.push(ch);
}

// Pop setiap karakter dari stack dan menambahkan ke


new string.
string reversed_sentence = "";
while (!stack.empty())
{
reversed_sentence += stack.top();
stack.pop();
}

// Print kalimat terbalik.


cout << "Hasil : " << reversed_sentence << endl;

// Check apakah kalimat terbalik adalah palindrome.


if (reversed_sentence == sentence)
{
cout << "Kalimat ini adalah palindrome." << endl;
}
else
{
cout << "Kalimat ini bukan palindrome." << endl;
}

return 0;
}
Output :

Penjelasan :

Program di atas adalah program seperti nomor 1 yaitu


pengimplementasian dari stack untuk membalikkan sebuah
kalimat dan memeriksa apakah kalimat tersebut merupakan
palindrome.

Pada program tersebut, user diminta untuk memasukkan sebuah


kalimat menggunakan getline(cin, sentence), dan kemudian
kalimat tersebut disimpan dalam variabel sentence.

Selanjutnya, program membuat sebuah stack kosong dengan


menggunakan stack<char> stack. Kemudian, setiap karakter
dalam kalimat dimasukkan ke dalam stack menggunakan loop for
dan stack.push(ch).

Setelah itu, program membalikkan kalimat dengan mempop setiap


karakter dari stack dan menambahkannya ke dalam string
reversed_sentence. Ini dilakukan dengan loop while dan
stack.top() untuk mendapatkan karakter teratas stack, kemudian
stack.pop() untuk menghapus karakter tersebut dari stack.

Setelah kalimat berhasil dibalikkan, program mencetak kalimat


terbalik menggunakan cout.

Terakhir, program memeriksa apakah kalimat terbalik


(reversed_sentence) sama dengan kalimat asli (sentence) untuk
menentukan apakah kalimat tersebut merupakan palindrome. Jika
kedua kalimat tersebut sama, maka program mencetak "Kalimat ini
adalah palindrome", dan jika tidak, program mencetak "Kalimat ini
bukan palindrom.
BAB IV
Kesimpulan
Dalam modul ini, kita belajar tentang struktur data yang dikenal sebagai
stack. Stack adalah tumpukan elemen-elemen data yang mengikuti prinsip
Last In, First Out (LIFO). Artinya, elemen terakhir yang dimasukkan ke
dalam stack akan menjadi elemen pertama yang dikeluarkan.
Implementasi stack dapat dilakukan menggunakan berbagai struktur data,
seperti array atau linked list.

Modul ini menjelaskan operasi dasar yang dapat dilakukan pada stack,
antara lain push, pop, dan peek. Operasi push digunakan untuk
menambahkan elemen baru ke dalam stack, sementara operasi pop
digunakan untuk menghapus elemen teratas dari stack. Operasi peek
memungkinkan kita untuk melihat elemen teratas pada stack tanpa
menghapusnya. Kami juga mempelajari konsep batasan kapasitas stack
untuk menghindari situasi overflow (saat mencoba menambahkan elemen
ke stack yang penuh) atau underflow (saat mencoba menghapus elemen
dari stack yang kosong).

Selain itu, modul ini menguraikan beberapa aplikasi penting dari stack
dalam pemrograman. Stack sering digunakan dalam manajemen memori,
evaluasi ekspresi matematika, pemanggilan fungsi secara rekursif, dan
berbagai situasi lain di mana urutan tindakan atau pemrosesan data perlu
diatur dengan prinsip LIFO.

Anda mungkin juga menyukai