Oleh :
Nama : Popy Anisa
NPM : 207006018
LABORATORIUM INFORMATIKA
PROGRAM STUDI INFORMATIKA
FAKULTAS TEKNIK UNIVERSITAS SILIWANGI
TASIKMALAYA
TAHUN
2021
IX-2
BAB IX
STACK
I. TUJUAN
STACK
Stack adalah Tumpukan dapat diartikan sebagai suatu kumpulan data yang
seolah-olah terlihat seperti ada data yang diletakkan di atas data yang lain seperti
pada gambar 01. Saat kita ingin mengambil data A, maka data-data yang berada di
atasnya haruslah lebih dulu dikeluarkan ( di-POP ). Hal ini membuat tumpukan /
stack memiliki ciri-ciri Last In First Out ( LIFO ) yang berarti data yang masuk
terakhir akan keluar pertama.
IX-1
IX-2
Contoh :
IX-2
IX-3
Contoh 2 :
Tower of Hanoi
https://en.wikipedia.org/wiki/Tower_of_Hanoi#/media/File:Tower_of_Hanoi_4.gif
IX-1
IX-4
/* File: boolean.h */
/* Definisi type data boolean */
#ifndef BOOLEAN_H
#define BOOLEAN_H
#define boolean unsigned char
#define true 1
#define false 0
#endif
/* File : stack.h */
/* deklarasi stack yang diimplementasi dengan tabel kontigu */
/* TOP adalah alamat elemen puncak */
#ifndef stack_H
#define stack_H
#include "boolean.h"
#define Nil 0
/* Nil adalah stack dengan elemen kosong . */
/* Karena indeks dalam bhs C dimulai 0 maka tabel dengan indeks
0
tidak dipakai */
typedef int infotype; //tipe dr element yg kita masukan ke stack
typedef int address; /* indeks tabel */
/* Contoh deklarasi variabel bertype stack dengan ciri TOP : */
/* Versi I : dengan menyimpan tabel dan alamat top secara
eksplisit*/
typedef struct { /* type bentukan dlm bahasa c kita pakai
struct*/
infotype *T; /* tabel penyimpan elemen */
address TOP; /* alamat TOP: elemen puncak */
int Size;
/* Ukuran stack */
} Stack;
/* Definisi stack S kosong : S.TOP = Nil */
/* Elemen yang dipakai menyimpan nilai Stack T[1]..T[Size+1] */
/* perhatkan definisi ini dan pakailah untuk mengalokasi T
dengan
benar*/
IX-5
/* destruktor */
void Push(Stack *S, infotype X);
/* Menambahkan X sebagai elemen Stack S. */
/* I.S. S mungkin kosong, tabel penampung elemen stack TIDAK
penuh */
/* X menjadi TOP yang baru,TOP bertambah 1 */
void Pop(Stack *S, infotype *X);
/* Menghapus X dari Stack S. */
/* S tidak mungkin kosong */
/* X adalah nilai elemen TOP yang lama, TOP berkurang 1 */
#endif
/* File : stack.c */
/* realisasi stack yang diimplementasi dengan tabel kontigu */
/* TOP adalah alamat elemen puncak */
#include <malloc.h>
#include "boolean.h"
#include "stack.h"
boolean IsEmpty(Stack S) {
return (Top(S) == Nil);
}
IX-6
boolean IsFull(Stack S) {
return (Top(S) == Size(S) + 1);
}
void CreateEmpty(Stack *S, int Size) {
(*S).T = (int *) malloc((Size + 1) * sizeof(int));
Top(*S) = Nil;
// S->T[S->TOP] = 7;
Size(*S) = Size;
}
/* File : mstack.c */
/* driver stack.* stack dg representasi kontigu */
#include <stdio.h>
#include "stack.h"
int main() {
/* KAMUS */
Stack S;
infotype X;
/* Algoritma */
printf(" stack ");
CreateEmpty(&S, 100);
printf("size stack : %d \n", Size(S));
printf("Nilai top dan infonya : %d dan %d\n", Top(S),
InfoTop(S)); Push(&S, 3);
IX-7
Analisis :
Program di atas mengunakan prosedur adt dimana program akan
membutuhkan drivernya agar bisa dijalankan.
1. Header boolean.h pada bahasa C berfungsi untuk melakukan operasi
yang berhubungan dengan ekspresi Boolean
2. File.h merupakan library dari program main sebagai ADT
3. File.c merupakan program main yang sudah bisa di jalankan
4. #include berfungsi untuk memanggil header/library untuk operasi
standar input output pada bahasa C.
5. /**/ dan // merupakan Komentar dalam program digunakan Untuk
keperluan dokumentasi dengan maksud agar program mudah
dipahami
6. %d berfungsi untuk membaca sebuah nilai integer desimal
7. Char mendefinisikan tipe data karakter
8. Void merupakan sebuah prosedur yang tidak mengembalikan nilai.
IX-8
b. Pemakaian Stack
1. Pemanggilan prosedur
2. Perhitungan ekspresi aritmatika
3. Rekursivitas
4. Backtracking Dan algoritma yg lainnya
c. Definisi Fungsional
CreateEmpty : → S {Membuat sebuah sack kosong}
Definisi Selektor :
1. jika S adalah sebuah Stack, maka
Top(S) adalah alamat element TOP
InfoTop(S) adalah informasi yang disimpan pada Top(S).
2. Definisi Stack kosong adalah Stack dengan Top(S) = Nil (tidak terdefinisi)
Contoh : A B * C /
Contoh : A B * C /
IX-11
Contoh : A B * C /
Contoh : A B * C /
Contoh : A B * C /
IX-12
Contoh : A B * C /
Contoh ABC^/DE*+AC*-
IX-13
TUGAS
1. Diberikan sebuah ekspresi aritmatika postfix dengan operator [‘.’ ; ‘:’ ; ‘+’ ;‘-‘
; ‘^’] dan Operator mempunyai prioritas (prioritas makin besar, artinya makin
tinggi) sebagai berikut :
a. AB.C/ ⇒ (A.B)/C
b. ABC^/DE*+AC*- ⇒ (A/(B^C) +(D*E)) – (A*C)
Tuliskan programnya dan gunakan stack?
JAWABAN :
#include <stack>
#include <stack>
#include <string>
//variabel global
std::stack<float> s_angka;
std::stack<char> s_op;
//prototipe fungsi
short prioritasOperator(const char op);
bool bandingkanPrioritasOperator(const char op1, const char
op2);
void hitung(const std::string ekspresi);
int main()
{
std::string ekspresi;
std::cout << " \n ";
IX-14
hitung(ekspresi);
std::cout << "\n ";
std::cout << "Hasil operasi ekspresi yang dimasukkan
adalah " << s_angka.top();
return 0;
}
return 0;
}
case '/':
angka_2 /= angka_1;
break;
}
s_angka.push(angka_2);
}
/*
membentuk angka dari array of char
perulangan akan terus berlangsung selama
karakter yang didapat
dari ekspresi adalah angka dan variabel i
tidak melebihi panjang ekspresi
*/
do
{
angka = angka * 10.f + token - '0';
i = i + 1;
token = ekspresi.at(i);
} while(token >= '0' and token <= '9');
}
s_angka.push(angka);
angka = 0.0f;
}
s_op.push(token);
}
}
else if(token == '(')
{
s_op.push(token);
}
else if(token == ')')
{
while(s_op.top() != '(')
{
lakukanOperasiAritmatika();
s_op.pop();
}
s_op.pop();
}
}
while(!s_op.empty())
{
lakukanOperasiAritmatika();
s_op.pop();
}
}
IX-17
Analisis :
Program ini bertujuan untuk menampilkan Ekspresi Aritmatika dAn
memiliki operator prioritas yang diinputkan . Terdapat beberapa operator
yaitu , operator pangkat ( ^ ) , operator bagi ( / ) , operator kali ( *) , operator
tambah ( + ) , dan operator kurang ( - ) .
- #Include berfungsi untuk menginfor fungsi – fungsi yang sudah di
definisikan pada header file .
IX-18