0% menganggap dokumen ini bermanfaat (0 suara)
24 tayangan19 halaman

Operasi dan Implementasi Stack LIFO

Diunggah oleh

Ariq Rafiandi
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 DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
24 tayangan19 halaman

Operasi dan Implementasi Stack LIFO

Diunggah oleh

Ariq Rafiandi
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 DOCX, PDF, TXT atau baca online di Scribd

STACK

BAB I PEDAHULUAN

I.1 Latar Belakang


Stack merupakan salah satu struktur data yang penting dalam
pemrograman komputer. Stack digunakan untuk menyimpan data sementara
dalam suatu program dan memungkinkan program untuk mengakses data tersebut
dengan cara yang terstruktur. Stack juga digunakan dalam banyak algoritma dan
aplikasi, seperti dalam pengolahan bahasa pemrograman, pengolahan gambar, dan
pengolahan teks.
I.2 Rumusan Masalah
Dari latar belakang masalah diatas, maka muncul rumusan masalah
sebagai berikut.
1. Apa pengertian Stack?
2. Apa saja operasi pada Stack?
3. Bagaimana pendeklarasian Stack?
4. Apa saja aplikasi pada Stack?
5. Apa contoh program Stack?
I.3 Tujuan
Sejalan dengan rumusan masalah diatas,disusun dengan tujuan untuk mengetahui:

1. Definisi Stack
2. Operasi pada Stack
3. Pendeklarasian Stack
4. Aplikasi pada Stack
5. Contoh program Stack
BAB II PEMBAHASAN
II.1 Pengertian Stack
Stack adalah salah satu struktur data yang digunakan untuk menyimpan
sekumpulan objek maupun variabel. Sesuai dengan namanya yaitu stack, tidak
heran apabila objek yang terkumpul terlihat seperti tumpukan.
Pada karakteristik stack sendiri bersifat LIFO (last in first out) yang
artinya, data yang terakhir masuk merupakan data yang akan keluar terlebih
dahulu. Seperti halnya dengan tumpukan pada umumnya, misalnya tumpukan
buku yang ada di atas atau yang terakhir masuk harus dikeluarkan terlebih dahulu
untuk mendapatkan buku yang berada di tumpukan paling bawah.
Pada contoh, jika kita mempunyai empat buku, yaitu buku matematika,
fisika, biologi, dan kimia. Lalu buku matematika kita masukkan terlebih dahulu,
lalu buku selanjutnya fisika, biologi, dan kimia. Nah, untuk bisa mendapatkan
buku fisika, kita harus mengeluarkan buku kimia dan biologi terlebih dahulu,
karena kedua buku tersebut tergolong buku yang terakhir masuk.
Contoh di atas seperti halnya dengan stack yang memiliki sifat LIFO. Jika
data terakhir yang masuk harus keluar terlebih dahulu. Seperti yang sudah
disebutkan sebelumnya, pada konsep ini umumnya digunakan dalam
pemrograman dan mengorganisir penyimpanan komputer.
II.2 Operasi dasar stack

● Create

Merupakan operator yang berfungsi untuk membuat sebuah stack kosong.

● IsEmpty

Merupakan operator yang berfungsi untuk menentukan apakah suatu stack


merupakan stack kosong. Tanda bahwa sebuah stack kosong adalah Top bernilai
kurang dari nol (-1).
● IsFull

Merupakan operator yang digunakan untuk memeriksa apakah stack yang ada
sudah penuh. Stack akan penuh jika puncak stack terletak tepat dibawah jumlah
maksimum yang dapat ditampung stack (Top = MAX_STACK-1).

● Push

Merupakan operator yang berfungsi untuk menambahkan satu elemen ke dalam


stack dan tidak dapat dilakukan jika stack dalam keadaan penuh.

● Pop

Merupakan operator yang berfungsi untuk mengeluarkan satu elemen teratas dari
dalam stack dengan syarat stack tidak dalam kondisi kosong.
● Clear

Fungsi yang digunakan untuk mengosongkan stack dengan cara mengeset Top
dengan 1. Jika Top bernilai kurang dari nol maka stack dianggap kosong.

● Retrieve

fungsi yang digunakan untuk melihat nilai yang berada pada posisi tumpukan
teratas.

II.3 Representasi Proses Stack


Stack adalah salah satu dari contoh struktur data yang terdiri dari satu
collection, yang juga menerapkan prinsip LIFO. Bila stack tersebut menggunakan
array satu dimensi, maka stack tersebut dapat diilustrasikan sebagai berikut :

Gambar 4.2 Ilustrasi sebuah stack 1 Dimensi menggunakan indeks array

Pada gambar 4.2 diatas diilustrasikan ada sebuah indeks array yang masih
kosong pada awal pembuatan stcak dimana n[10], variabel Top berada pada -1
yang menunjukkan indeks masih dalam keadaan kosong.
Gambar 4.3 Ilustrasi Stack ketika sudah diisi data

Pada gambar 4.3 adalah keadaan ketika stack sudah diisi data. Pada
kondisi ini data pertama yang diinputkan adalah S[0]=11, data kedua S[1]=7, data
ketiga S[2]=15, data keempat S[23]=23. Kondisi Top sudah berubah menjadi data
yang terakhir diinputkan (data keempat) sehingga Top[3] X=23.
Variabel Top digunakan sebagai indeks untuk menunjuk nomor elemen
array yang berisi nilai stack yang berada paling kanan atau Top, yang ditunjukan
dengan angka 3. Variabel X bertipe integer digunakan sebagai perantara, dimana
data yang akan disimpan kedalam stack harus berasal dari X. Demikian juga data
yang baru diambil dari dalam stack harus diterima terlebih dahulu oleh variabel X,
kemudian baru diberikan ke variabel lain untuk diolah.
Oleh karena itu, jika ada instruksi PUSH, maka data baru (yang diambil
dari isi variabel X) akan disimpan dalam elemen S[4] sehingga indeks Top harus
diarahkan ke posisi no.4. Artinya, Top maju terlebih dahulu satu langkah ke S[4],
kemudian baru mengisi nilai pada S[4]. Sedangkan jika ada instruksi Pop, maka
yang akan diambil adalah isi dari S[3] dan datanya akan disimpan terlebih dahulu
dalam variabel X, kemudian indeks Top menjadi mundur satu langkah sehingga
akan menunjuk S[2].
II.4 Double Stack
Double Stack atau Stack Ganda adalah dua stack yang berada dalam satu
array. Satu array digunakan untuk dua stack dimana dasar Stack1 berada pada sisi
indeks yang terkecil dan dasar Stack2 berada pada sisi indeks yang terbesar. Sama
halnya dengan Single Stack, Double Stack juga menerapkan prinsip LIFO (Last in
Firt Out).
Gambar 4.4 Ilustrasi double stack

Pada gambar 4.4 diatas adalah ilustrasi indeks array pada double stack.
Padastack 1 kondisi data pertama yang diinputkan adalah S[0], data kedua S[1],
data ketiga S[2] dan Top=data input terakhir S[2]. Sedangkan pada stack 2 data
pertama adalah S[9], data kedua S[8], data ketiga S[7], data keempat S[6] dan
Top=data input terakhir S[6].
II.5 Implementasi Stack
II.5.1 Array
Array adalah salah satu implementasi dari stack yang paling sederhana dan
menawarkan akses secara acak ke pengguna berdasarkan indeks. Implementasi
stack menggunakan array memungkinkan programmer untuk menggunakan
bahasa pemrograman seperti C, C++, Java, Python, dan C#.
Geeks for Geeks menggambarkan bagaimana susunan dari kelima bahasa
pemrograman tersebut. Kelebihan dari implementasi stack menggunakan array
adalah mudah untuk diimplementasikan. Sebab kekurangan adalah bisa dibilang
tidak terlalu dinamis. Dalam hal ini tidak tumbuh dan menyusut, tergantung pada
kebutuhan saat proses.
II.5.2 Linked list
Sama halnya dengan array, linked list juga mudah dalam
mengimplementasikan stack. Seperti yang sudah dijelaskan sebelumnya, operasi
dasar pada stack adalah menambahkan data (push) dan menghapus data (pop).
Nah dengan menggunakan linked list, operasi push bisa diganti dengan
metode addAtFront dan operasi pop bisa diganti dengan fungsi yang menghapus
node depan dari linked list.
Seperti halnya array, linked list juga menggunakan bahasa pemrograman
seperti C, C++, Java, Python, dan C#. Kelebihan dari implementasi stack ini
menggunakan linked list adalah dapat bertambah dan berkurang sesuai dengan
kebutuhan saat runtime. Sementara itu kekurangan adalah harus membutuhkan
memori ekstra karena ada pointer di dalamnya.
II.6 Kelebihan dan Kekurangan menggunakan Stack
II.6.1 Kelebihan
1. Membantu mengelola data dengan metode LIFO
2. Secara otomatis membersihkan objek
3. Tidak mudah rusak
4. Ukuran variabel tidak dapat diubah
5. Mengontrol memori secara mandiri
II.6.2 Kekurangan
1. Memori stack sangat terbatas
2. Ada kemungkinan stack akan meluap atau overflow jika terlalu banyak
objek
3. Tidak memungkinkan akses acak, karena harus mengeluarkan
tumpukan paling atas terlebih dahulu untuk mengakses tumpukan
paling bawah
II.7 Algoritma Stack
II.7.1 Algoritma Push
Algoritma push digunakan untuk menambahkan elemen kedalam stack.

def push(data):
if isFull():
print("Stack
penuh!")
else:
top += 1
items[top] =
data

Penjelasan:
Periksa apakah stack penuh: Jika stack sudah penuh, maka program akan
berhenti. Tambahkan elemen ke stack: Elemen akan ditambahkan ke indeks top.
Perbarui indeks top: Indeks top akan diperbarui dengan nilai yang lebih tinggi.
Gambar 2.6 Ilustrasi Push dan Pop pada stack

II.7.2 Algoritma Pop


Algoritma pop digunakan untuk menghapus elemen dari stack.

def pop():
if isEmpty():
print("Stack
kosong!")
else:
data =
items[top]
top -= 1
return data

Penjelasan:
Periksa apakah stack kosong: Jika stack kosong, maka program akan
berhenti. Hapus elemen dari stack: Elemen di indeks top akan dihapus. Perbarui
indeks top: Indeks top akan diperbarui dengan nilai yang lebih rendah.
II.7.3 Algoritma IsEmpty
Algoritma isEmpty digunakan untuk memeriksa apakah stack kosong.

def isEmpty():
return top
== -1
Penjelasan:
Periksa apakah indeks top sama dengan -1: Jika indeks top sama dengan -1, maka
stack kosong.

II.7.4 Algoritma IsFull


Algoritma isFull digunakan untuk memeriksa apakah stack penuh.

def isFull():
return top ==
max_size - 1

Penjelasan:
Periksa apakah indeks top sama dengan ukuran maksimum stack: Jika
indeks top sama dengan ukuran maksimum stack, maka stack penuh.

II.7.5 Algoritma Peek


Algoritma peek digunakan untuk mendapatkan nilai dari elemen teratas tanpa
menghapusnya.
def peek():
if isEmpty():
return -1

return items[top]

Penjelasan:
Periksa apakah stack kosong: Jika stack kosong, maka program akan
mengembalikan nilai -1. Kembalikan nilai dari elemen teratas: Nilai dari elemen
teratas akan dikembalikan.
II.8 Contoh program Java
Contoh 1 (push, pop, top, bottom, dan isEmpty).
Contoh program Java yang mengimplementasikan stack sederhana dan
melibatkan operasi push, pop, top, bottom, dan isEmpty.
import [Link];

public class SimpleStackExample {


public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();

// Memeriksa apakah stack kosong


[Link]("Apakah stack kosong? " +
[Link]());

// Push elemen ke dalam stack


[Link](5);
[Link](10);
[Link](20);
[Link](30);

// Melihat elemen teratas (top)


int topElement = [Link]();
[Link]("Elemen teratas: " +
topElement);

// Melihat elemen paling bawah (bottom)


int bottomElement = getBottomElement(stack);
[Link]("Elemen paling bawah: " +
bottomElement);

// Memeriksa apakah stack kosong lagi


[Link]("Apakah stack kosong? " +
[Link]());

// Pop elemen dari stack


int poppedElement = [Link]();
[Link]("Elemen yang di-pop: " +
poppedElement);
}

// Fungsi untuk mendapatkan elemen paling bawah


public static int getBottomElement(Stack<Integer>
stack) {
if ([Link]()) {
return -1; // Stack kosong
}

// Pop semua elemen kecuali yang terakhir


int bottomElement = [Link]();

if ([Link]()) {
[Link](bottomElement); // Memasukkan
kembali elemen yang di-pop
return bottomElement;
} else {
int result = getBottomElement(stack);
[Link](bottomElement); // Memasukkan
kembali elemen yang di-pop
return result;
}
}
}
Jika program ini di run maka akan menghasilkan output seperti ini :

Berikut penjelasan operasi-operasi yang terlibat dalam program ini:


1. Apakah stack kosong?: Program dimulai dengan memeriksa apakah stack
kosong menggunakan isEmpty(). Pada saat ini, stack masih kosong, jadi
hasilnya adalah true.
2. Push elemen ke dalam stack: Tiga elemen (5, 10, dan 20) ditambahkan
ke dalam stack menggunakan operasi push. Setelah operasi push, stack
akan memiliki tiga elemen dengan 20 di bagian atas (elemen terbaru).
3. Melihat elemen teratas (top): Program menggunakan peek() untuk
melihat elemen teratas dari stack tanpa menghapusnya. Hasilnya adalah
elemen teratas saat ini, yaitu 20.
4. Melihat elemen paling bawah (bottom): Fungsi getBottomElement()
digunakan untuk mendapatkan elemen paling bawah dari stack. Fungsi ini
bekerja dengan cara mempop semua elemen kecuali yang terakhir untuk
mencari elemen paling bawah. Hasilnya adalah elemen terbawah saat ini,
yaitu 5.
5. Apakah stack kosong lagi?: Setelah operasi push dan pemanggilan
getBottomElement(), program kembali memeriksa apakah stack kosong
menggunakan isEmpty(). Karena elemen-elemen telah ditambahkan ke
dalam stack, hasilnya adalah false.
6. Pop elemen dari stack: Satu elemen di-pop dari stack dengan operasi
pop(). Pada contoh ini, elemen teratas (20) dihapus dan dicetak sebagai
elemen yang di-pop.
Contoh 2
contoh program Java yang menggunakan stack untuk membalikkan setiap
karakter dalam sebuah kata atau frasa:
import [Link];

public class ReverseStringWithStack {


public static String reverseString(String input) {
Stack<Character> stack = new Stack<>();

// Memasukkan setiap karakter dalam input ke


dalam stack
for (char c : [Link]()) {
[Link](c);
}

// Mengambil karakter dari stack untuk


membalikkan string
StringBuilder reversed = new StringBuilder();
while (![Link]()) {
[Link]([Link]());
}

return [Link]();
}

public static void main(String[] args) {


String input = "Hello, World!";
String reversed = reverseString(input);
[Link]("Input: " + input);
[Link]("Reversed: " + reversed);
}
}
Jika program ini di run maka akan menghasilkan output seperti ini :

Berikut penjelasan operasi-operasi yang terlibat dalam program ini:


1. Program ini membuat kelas ReverseStringWithStack.
2. Dalam metode reverseString, kami membuat objek Stack yang berisi
karakter. Kami kemudian mengiterasi melalui setiap karakter dalam input
dan memasukkannya ke dalam stack menggunakan metode push.
3. Kami membuat objek StringBuilder yang akan digunakan untuk
menyusun kembali karakter-karakter dari stack.
4. Selanjutnya, kami mengambil karakter-karakter dari stack satu per satu
menggunakan metode pop dan menambahkannya ke dalam
StringBuilder. Ini akan membalikkan urutan karakter dari input.
5. Akhirnya, metode reverseString mengembalikan hasil akhir dalam bentuk
string.
6. Dalam metode main, kami menguji program dengan mengambil input
string "Hello, World!" dan mencetak hasil pengembalian dari metode
reverseString.
II.9 Latihan dan Tugas
II.9.1 Contoh Kasus:

1. Penyusunan Buku:

Ketika buku baru diterima oleh perpustakaan, buku tersebut harus


dimasukkan ke dalam Stack. Stack akan menyimpan buku-buku ini dalam urutan
tumpukan (Last In, First Out - LIFO).

2. Pemilihan Buku:

Ketika seorang mahasiswa mencari buku tertentu, sistem akan mencari buku
tersebut dalam Stack. Buku yang dicari harus ditemukan dengan mengeluarkan
buku dari atas Stack secara berurutan hingga buku yang diinginkan ditemukan.

3. Penghapusan Buku:

Jika seorang mahasiswa mengembalikan buku, buku tersebut harus dihapus


dari Stack. Penghapusan ini harus dilakukan dari puncak Stack (top).
4. Kalkulator Balik-Polish Notasi (RPN)

Ketika Anda mengevaluasi ekspresi matematika dalam bentuk RPN, Anda


dapat menggunakan stack untuk mengelola operan dan operator. Anda
menambahkan operan ke stack dan ketika Anda menemui operator, Anda
mengambil dua operan teratas dari stack, menghitung hasilnya, dan menempatkan
hasilnya kembali ke stack.

5. Pengelolaan Fungsi dalam Bahasa Pemrograman

Saat sebuah program menjalankan fungsi, informasi tentang fungsi tersebut


disimpan dalam stack. Informasi ini termasuk alamat pengembalian (return
address), variabel lokal, dan parameter fungsi. Ketika fungsi selesai dieksekusi,
informasi ini dihapus dari stack, dan kontrol kembali ke fungsi pemanggil.

II.9.2 Latihan

Soal:

Diberikan sebuah Stack kosong. Operasi-operasi berikut ini akan dijalankan


pada Stack:

1. Push(5)

2. Push(10)

3. Push(15)

4. Pop

5. Push(20)

6. Pop

7. Push(25)

8. Pop

Berapa nilai yang ada di puncak Stack setelah semua operasi dijalankan?

Penyelesaian:

Mari kita simulasikan operasi-operasi tersebut satu per satu:


1. Push(5): Stack → [5]

2. Push(10): Stack → [5, 10]

3. Push(15): Stack → [5, 10, 15]

4. Pop: Operasi Pop menghapus elemen teratas, sehingga Stack → [5, 10]

5. Push(20): Stack → [5, 10, 20]

6. Pop: Operasi Pop menghapus elemen teratas lagi, sehingga Stack →


[5, 10]

7. Push(25): Stack → [5, 10, 25]

8. Pop: Operasi Pop menghapus elemen teratas terakhir, sehingga Stack


→ [5, 10]

Setelah semua operasi dijalankan, nilai yang ada di puncak Stack adalah 10.
Jadi, nilai yang ada di puncak Stack setelah semua operasi adalah 10.

II.9.3 Tugas

1. Diberikan sebuah ekspresi matematika infix: "3 + (4 * 2) - 7". Ubah


ekspresi ini menjadi notasi postfix (postfix notation) menggunakan Stack.
2. Implementasikan sebuah Stack menggunakan bahasa pemrograman pilihan
Anda. Buat operasi push, pop, dan peek untuk Stack tersebut. Kemudian,
buatlah contoh penggunaan Stack Anda untuk menyimpan sejumlah
bilangan dan menunjukkan hasilnya setelah operasi push dan pop.
3. Diberikan sebuah Stack yang awalnya kosong. Jalankan operasi berikut
pada Stack:

a) Push(5)
b) Push(10)
c) Push(15)
d) Pop

Apa isi Stack setelah operasi-operasi di atas dijalankan?

4. Implementasikan algoritma untuk mengganti notasi infix menjadi postfix


(postfix notation) tanpa menggunakan Stack. Jelaskan langkah-langkah
yang Anda lakukan.
5. Diberikan sebuah Stack awalnya kosong. Lakukan operasi berikut:

Push(3)
Push(5)

Push(2)

Pop

Push(7)

Push(1)

Pop

Pop

Berapa nilai yang ada di puncak Stack setelah semua operasi dijalankan?

BAB III KESIMPULAN

Stack merupakan salah satu struktur data yang penting dalam


pemrograman komputer. Ia digunakan untuk mengatur data dalam urutan Last-In-
First-Out (LIFO), yang berarti elemen terakhir yang dimasukkan ke dalam stack
akan menjadi yang pertama dikeluarkan. Stack sering digunakan dalam berbagai
aplikasi seperti pemanggilan fungsi, pengelolaan memori, dan penyelesaian
masalah yang melibatkan rekursi.
Stack memiliki dua operasi utama, yaitu "push" untuk menambahkan
elemen ke atas stack dan "pop" untuk mengeluarkan elemen dari atas stack. Kedua
operasi ini memungkinkan pemrogram untuk mengakses dan mengelola data
dengan cara yang efisien.
Dalam pemrograman, pemahaman tentang stack sangat penting, dan
pemrogram harus dapat memanfaatkannya dengan baik untuk mengoptimalkan
kinerja dan keamanan program mereka.
DAFTAR PUSTAKA

Srimulia. (2022). Yuk, Cari Tahu Apa Itu Stack dan Bagaimana Implementasinya.
Https://[Link]://[Link]/news/read/1832/Yuk-Cari-Tahu-
[Link]

Adieb M. 2021, 4 Februari. Memahami Stack, Struktur Data yang Mudahkan


Programmer Jalankan Tugasnya. Stack: Pengertian, Kelebihan dan Kekurangan
serta Jenis Operasinya ([Link]).

TEKNIK INFORMATIKA. (2016). Praktikum algorima dan struktur data.


[Link]
LAMPIRAN

Nama NIM TUGAS

Ariq Rafiandi 11220910000108 Koordinasi kelompok &, kesimpulan


Haznov dan koding program berbahasa java
disertai dengan outputnya

Muhammad 11220910000122 Pengertian Stack, Operasi dasar pada


Irsyad Stack, Representasi proses stack,
Implementasi stack.

Addin tri 11210910000128 Mencari referensi dan penyusunan kata


mushaddaq dari sub bab algoritma dan contoh kasus,
latihan, dan tugas

Farhan Haqqi 11220910000097 Mengatur penulisan dan penyusunan


kata dari sub bab algoritma dan contoh
kasus, latihan, dan tugas

Anda mungkin juga menyukai