Anda di halaman 1dari 43

MAKALAH

STRUKTUR DATA DAN ALGORITMA


PROGRAM STACK

DISUSUN OLEH :
IMAM HIDAYAT (2021903430041)
ARIEF PUTRA RAMADHANA (2021903430009)

KELAS : TRKJ 1 A

JURUSAN TEKNOLOGI INFORMASI DAN KOMPUTER


PROGRAM STUDI TEKNOLOGI REKAYASA KOMPUTER JARINGAN
POLITEKNIK NEGERI LHOKSEUMAWE
2021/2022
KATA PENGANTAR

Alhamdulillah kami panjatkan puji syukur kami ke hadirat Allah SWT. Sehingga penulis
telah menyelesaikan Makalah program stack ini dengan tepat waktu.

Salah satu tujuan penulis dalam menulis Makalah program stack ini adalah sebagai
dokumentasi dan juga bentuk evaluasi kegiatan program stack. Makalah yang penulis buat ini
berdasarkan data-data yang valid yang telah dikumpulkan dalam berbagai metode.

Penulis menyadari atas ketidaksempurnaan penyusunan Makalah program stack ini. namun
penulis tetap berharap laporan ini akan memberikan manfaat bagi para pembaca. Demi
kemajuan penulis, penulis juga mengharapkan adanya masukan berupa kritik atau saran yang
berguna. Terima kasih.

2
DAFTAR ISI

KATA PENGANTAR.........................................................................................................................2
BAB 1...................................................................................................................................................4
PENDAHULUAN................................................................................................................................4
A. Latar Belakang........................................................................................................................4
B. Rumusan Masalah...................................................................................................................5
C. Tujuan......................................................................................................................................5
BAB II..................................................................................................................................................6
PEMBAHASAN...................................................................................................................................6
A. Pengertian Stack......................................................................................................................6
B. Deklarasi Stack........................................................................................................................7
C. Operasi Dasar Pada Stack.......................................................................................................7
D. Notasi Aritmatik (Infex, Prefix, dan Postfix).......................................................................10
E. Kenapa Bisa Tersusun Menajdi Stack.................................................................................12
F. Siapa Pengguna Stack...........................................................................................................12
G. Mengapa Aplikasi Stack Digunakan................................................................................12
H. Dimana Mendeklarasikan Stack.......................................................................................13
I. Kapan Operasi Pada Stack Digunakan................................................................................13
J. Bagaimana Kelebihan dan Kekurangan Stack....................................................................14
K. Kekurangan Stack.............................................................................................................14
L. Membuat Program Stack......................................................................................................15
M. Implementasi Array...........................................................................................................27
BAB III..................................................................................................................................................29
PRAKTIKUM.........................................................................................................................................29
1. Program Stack 1......................................................................................................................29
2. Program Stack 2......................................................................................................................34
3. Program Stack 3......................................................................................................................38
BAB IV...............................................................................................................................................42
PENUTUP..........................................................................................................................................42
A. Kesimpulan............................................................................................................................42
B. Saran.......................................................................................................................................42
DAFTAR PUSTAKA........................................................................................................................43

3
BAB 1
PENDAHULUAN

A. Latar Belakang
Simulasi adalah suatu proses peniruan dari sesuatu yang nyata beserta keadaan
sekelilingnya, aksi melakukan simulasi ini secara umum menggambarkan sifat-sifat
karakteristik kunci dari kelakuan sistem fisik atau sistem abstrak tertentu. Simulasi
telah lama digunakan dalam pendidikan. Pemanfaatan simulasi dalam pembelajaran kini
sangatlah penting dengan perubahan pandangan pendidikan, dari proses pengalihan
isi pengetahuan kearah proses pengaplikasian teori ke dalam realita pengalaman
kehidupan. Teknik simulasi merupakan kegiatan untuk membantu mahasiswa dalam
mengembangkan keterampilan menemukan dan memecah masalah. Oleh sebab itu simulasi
pembelajaran akan sangat membantu mahasiswa dalam memecah materi yang sulit dan
memberikan kemudahan dalam memahami materi.Pada program studi ilmu komputer,
Struktur data merupakan salah satu dari banyak mata kuliah yang diajarkan. Materi
struktur data merupakan materi konsep-konsep abstrak, sehingga sulit dipahami oleh
mahasiswa. Dalam dunia pendidikan suatu metode simulasi pembelajaran dapat
dihadirkan dengan menggunakan alat peraga pembelajaran atau sering dikenal
dengan media pembelajaran. Namun terkadang alat peraga yang digunakan masih
kurang menarik dikarenakan kurang atraktif dan monoton. Salah satu metode
pembelajaran yang sekarang ini dapat dikembangkan adalah dengan memanfaatkan
teknologi komputer.Strukturdataadalah cara penyimpanan, penyusunan dan pengaturan
data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan
secara efisien. Dalam daftar struktur data umum terdapat salah satunya yaitu stack.
merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu
data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. merupakan
sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang
terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut.

4
B. Rumusan Masalah
Berdasarkan pada latar belakang yang telah diuraikan di atas, maka perumusan
masalah dalam penelitian ini sebagai berikut :

1. Bagaimana merancangsimulasi pembelajaran struktur data materi stack yang


menarik dan interaktif dengan bantuan sistem multimedia?
2. Bagaimana membangun sebuah rancangansimulasi pembelajaran struktur data materi
stack agar mudah untuk digunakan oleh pengguna?
3. Batasan MasalahAgar pembahasan masalah lebih mendalam dan tidak luas
cakupannya, maka diperlukan pembatasan masalah dalam penelitian.

C. Tujuan

Adapun tujuan disusunnya makalah ini adalah sebagai berikut:

1. Mahasiswa dapat menjelaskan mengenai Linked List

2. Mahasiswa dapat melakukan perancangan aplikasi menggunakan struktur Linked List

(Senarai Berkait)

3. Mahasiswa mampu melakukan analisis pada algoritma Linked List yang dibuat

4. Mahasiswa mampu mengimplementasikan algoritma Linked List pada sebuah aplikasi

secara tepat dan efisien

5
BAB II

PEMBAHASAN

A. Pengertian Stack

Stack merupakan jenis linked list yang menerapkan konsep LIFO (Last In Fist Out)
artinya elemen dari struktur (node) yang dimasukkan pertama kali ke dalam rangkaian akan
dikeluarkan (diproses) terakhir kali sedangkan elemen yang masuk terakhir akan diproses /
dikeluarkan pertama. Dengan kata lain setiap transaksi atau aktifitas yang ada dalam stack
dilakukan pada kepalanya (head) saja. Pada stack hanya ada 2 fungsi utama yaitu Push atau
menambah/memasukkan node (struktur) ke dalam stack, dan Pop atau
mengeluarkan/menghapus node dari stack.

cara kerja stack dapat di ilustrasikan sebagai berikut:

| D | ---> atas
|C|
|B|
| A | ---> bawah

Anggaplah gambar diatas sebagai tumpukan data, D sebagai node(struktur) yang atas (terkhir
dimasukkan) dan A sebagai node yang bawah (pertamakali dimasukkan). Jika kita melakukan
operasi Push (menambah), misalnya E, maka penambahan akan dilakukan pada nilai yang
paling atas, yaitu D, sehingga menjadi:

6
| E | ---> atas
|D|
|C|
|B|
| A | ---> bawah

Sehingga nilai E menjadi nilai atas yang baru, dan jika dilakukan operasi pop, maka stack
akan menjadi seperti gambar yang pertama diatas, yaitu nilai D menjadi nilai atas, dan nilai E
akan dihapus dari tumpukan (stack).

B. Deklarasi Stack
Pendeklarasian tumpukan menggunakan Larik dan sebuah variabel dengan tipe data Record :
Const Makstump = 80 {Kapasitas maksimal tumpukan}
Type Tumpukan = Record
                        Isi : Array [1.. Makstump] of integer;
                        Atas: 0.. Makstump;
            end;
Var T : Tumpukan;

Elemen Tumpukan T tersimpan dalam Larik T.isi adalah bertipe integer, banyak elemen


tumpukan maksimum adalah sebesar “Makstup” 80 elemen
Jika T.Atas = 5 berarti tumpukan ada 5 elemen yaitu T.isi[1] .. T.isi[5], jika T.Atas dikurangi
1 sehingga menjadi 4, berarti T.isi[4] adalah elemen teratas, sebaliknya jika tumpukan
ditambah 1 buah elemen maka T.Atas ditambah 1 sehingga menjadi 6, maka T.isi[6] adalah
elemen teratas.

C. Operasi Dasar Pada Stack


Pendeklarasian tumpukan menggunakan Larik dan sebuah variabel dengan tipe data Record :
1. Createstack(S)
2. Makenull(S)
3. Empty
4. Push(x,S)
5. Pop(S)

7
Ilustrasi Operasi POP dan PUSH terhadap STACK
No. OPERASI ISI TUMPUKAN NILAI TOP
1 CREATE STACK(S) :<Kosong> 0
2 PUSH(‘A’,S) :A 1
3 PUSH(‘B’,S) :AB 2
4 PUSH(‘C’,S) :ABC 3
5 POP(S) :AB 2
6 PUSH(‘D’,S) :ABD 3
7 PUSH(‘E’,S) :ABDE 4
8 POP(S) :ABD 3
9 POP(S) :AB 2
10 POP(S) :A 1

1. Createstack(S)
Yaitu membuat tumpukan baru S, dengan sejumlah elemen kosong.
2. Makenull(S)
Yaitu mengosongkan tumpukan S, jika ada elemen maka semua elemen akan dihapus.
3. Empty
Yaitu tumpukan kosong ?, untuk menguji apakah tumpukan kosong atau tidak.
4. Push(x,S)
Yaitu memasukan elemen baru x ketumpukan S. Proses PUSH, tumpukan harus
diperiksa apakah jumlah elemen sudah mencapai maksimum atau tidak, jika sudah maka
overflow. Operasi PUSH merupakan operasi untuk menyisip atau menambah elemen yg
terletak pada posisi paling atas dari sebuah tumpukan.
Contoh Prosedur untuk Operasi PUSH :
Procedure Push (Var T : Tumpukan; X : Integer;
Begin
T.Atas:T.Atas + 1;
T.Isi[T.Atas]:=x;
end;

8
Prosedur tersebut akan menyiapkan tempat untuk X  yang akan di Push kedalam tumpukan,
yaitu dengan menambah elemen T.Atas dengan 1 dan kemudian menyisipkan X ke dalam
Larik T.Isi.
Prosedur diatas sudah benar, tapi jika pada saat T.Atas sama dengan Makstump dan kita akan
mem Push lagi maka akan terjadi Overflow, maka perlu ditambahkan sebuah Testing untuk
menguji apakah sudah mencapai tumpukam maksimum atau tidak.
Prosedur diatas harus dirobah menjadi :
Procedure Push (Var T : Tumpukan; X : Integer;
Begin
If T.Atas = Makstump then
Writeln(‘Tumpukan Sudah Penuh’)
Else
Begin
T.Atas:T.Atas + 1;
T.Isi[T.Atas]:=x;
end;
End;

5. Pop(S)
Yaitu mengeluarkan elemen posisi teratas pada tumpukan S. Proses POP, tumpukan harus
diperiksa apakah tumpukan sudah kosong/tidak ada lagi elemen yang hendak dikeluarkan,
jika tidak maka underflow. Operasi POP merupakan operasi untuk menghapus elemen yang
terletak pada posisi paling atas dari sebuah tumpukan
Contoh Prosedur untuk Operasi POP :
Procedure Pop (Var T : Tumpukan; X : Integer;
Begin
If T.Atas = 0 then
Writeln(‘Tumpukan Sudah Kosong’)
Else
T.Atas:T.Atas - 1;
end;

9
D. Notasi Aritmatik (Infex, Prefix, dan Postfix)
Salah satu manfaat tumpukan adalah untuk menulis Notasi Aritmatik, yaitu : Notasi Infix,
Prefix dan Notasi Postfix.
1. Notasi Infix
Yaitu notasi yang mudah dimengerti oleh manusia.
Contoh : A + B  (Operand Operator Operand)
Hirarki Operator :
1. Tanda kurung : ( … )
2. Eksponensial atau tanda pangkat : ^
3. Perkalian, Pembagian : * , /
4. Penjumlahan, Pengurangan : + , -

Contoh : (A – B) * (C + D)
Prioritas pengerjaannya adalah :
a. Dalam kurung yang paling kiri : (A – B)
b. Dalam kurung yang kedua : (C + D)
c. Perkalian hasil pengurangan dengan hasil pembagian

2. Notasi Prefix
Yaitu notasi yang simbol operator diletakkan sebelum dua operand.
Contoh : Infix  à A + B
Prefix à + AB (Operator Operand Operand)

3. Notasi Pestfix
Yaitu Notasi yang simbol operator diletakkan sesudah dua operand.
 Contoh : Infix  à A + B
POSTfix à  AB – (Operand Operand Operator)
Contoh : Infix ke Prefix 

10
1.      A+B
Pengerjaan  1 :  A + B Prefixnya : + AB
2.  (A + B) – (C * D)
            a. Pengerjaan dalam kurung 1 : ( A + B) Prefixnya : + AB
b. Pengerjaan dalam kurung 2 : (C * D) Prefixnya : * CD
            c. Terakhir adalah Operator –  : +AB – *CD Prefixnya : – +AB*CD
Contoh : Infix ke Postfix
1.  A+B
            a. Pengerjaan  1 :  A + B Prefixnya : AB+
2.  (A + B) – (C * D)
            a. Pengerjaan dalam kurung 1 : ( A + B) Postfixnya :  AB+
            b. Pengerjaan dalam kurung 2 : (C * D) Postfixnya :  CD*
            c. Terakhir adalah Operator –  : AB+ – CD* Postfixnya : AB+ CD* –

INFIX PREFIX POSTFIX

A+B +AB AB+

A+B-C -+ABC AB+C-

(A + B) * (C – D) *+AB -CD AB+ CD-*

A – B / (C * D ^ E) -A/B*C^DE ABCDE^*/-

11
E. Kenapa Bisa Tersusun Menajdi Stack
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO (Last In
First Out), benda yang terakhir masuk dalam stack akan menjadi benda pertama yang
dikeluarkan dari stack. Tumpukan disebut juga “Push Down Stack” yaitu penambahan
elemen baru (PUSH)ndan penghapusan elemen dari tumpukann(POP). Contoh pada PDA
(Push Down Automaton). Sistem pada pengaksesan pada tumpukan menggunakn system
LIFO (Last In First Out), artinya elemen yang terakhir masuk itu yang akan pertama
dikeluarkan dari tumpukan (Stack). Ilustrasi tumpukan (Stack) dapat digambarkan seperti
tumpukan CD atau tumpukan sate. Stack merupakan suatu susunan koleksi data dimana dapat
ditambahkan dan dihapus selalu dilakukan pada bagian akhir data, yang disebut dengan Top
Of Stack.

F. Siapa Pengguna Stack


Stack digunakan oleh seseorang yang akan meresenpetasi pemanggilan prosedur,
perhitungan ekspresi aritmatika, rekursifitas, backtracking. Adapun contoh aplikasi stack,
diantaranya:
MATCHING PARENTHESES
Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat
pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya.
NOTASI POSTFIX
Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke dalam
notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi
aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh compiler
untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam bentuk/notasi
postfix.

G. Mengapa Aplikasi Stack Digunakan


Aplikasi stack digunakan untuk berbagai macam keperluan seperti pengujian kalimat
palindrome, penguji tanda kurung (matching parentheses), dan juga berfungsi sebagai
konversi dari notasi infix menjadi notasi postfix.
Pada perhitungan aritmetika, notasi infix adalah notasi yang menempatkan operator ditengah
dua operand, sedangkan notasi postfix adalah notasi yang menempatkan operator setelah dua
operand. Penggunaan notasi infix merupakan hal yang lumrah digunakan dalam perhitungan
aritmetika dibandingkan dengan notasi postfix, akan tetapi bagi mesin komplikasi postfix
merupakan notasi yang digunakan untuk melakukan suatu perhitungan.

12
Stack juga biasa digunakan dalam mengontrol operasi dalam sebuah sistem operasi. Selain itu
stack juga merupakan algoritma yang baik yang dapat digunakan untuk membuat phaser
(membaca urutan operasi dari sebuah persamnaan matematika).

H. Dimana Mendeklarasikan Stack


Sebelum struktur data tumpukan ini bisa digunakan, harus dideklarasikan dahulu
dalam kamus data. Ada beberapa cara pendeklarasian struktur data ini, salah satunya dengan
menggunakan tata susunan linear (larik) dan sebuah variable, yang dikemas dalam tipe data
record. Stack (tumpukan) adalah struktur data bertipe record yang terdiri dari field elemen,
bertipe larik/array dengan indek dari 1 sampai dengan MaksTum (Maksimum Tumpukan),
atas, bertipe interger berkisar dari 0 (saat kosong) sampai dengan MaksTum (Maksimum
Tumpukan).

I. Kapan Operasi Pada Stack Digunakan


Operasi yang sering diterapkan pada struktur data Stack (Tumpukan) adalah Push dan Pop.
Operasi – operasi yang dapat diterapkan adalah sebagai berikut :

Push : digunakan untuk menembah item pada Stack pada Tumpukan paling atas.
Pop : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.
Clear : digunakan untuk mengosongkan Stack
Create Stack : membuat Tumpukan baru S, dengan jumlah elemen kosong.
MakeNull : mengsongkan tumpukan S,jika ada elemen maka semua elemen dihapus.
sEmpty : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.
Isfull : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh.

Pada proses Push, Tumpukan (Stack) harus diperiksa apakah jumlah elemen sudah mencapai
masimum atau tidak. Jika sudah mencapai maksimum maka OVERFLOW, artinya
Tumpukan penuh tidak ada elemen yang dapat dimasukkan ke dalam Tumpukan. Sedangkan
pada proses Pop, Tumpukan harus diperiksa apakah ada elemen yang hendak dikeluarkan
atau tidak. Jika tidak ada maka UNDERFLOW, artinya tumpukan kosong tidak ada elemen
yang dapat diambil.

13
J. Bagaimana Kelebihan dan Kekurangan Stack
Kelebihan stack yaitu penambahan dan penghapusan data dapat dilakukan dengan
cepat, yaitu selama memori masih tersedia penambahan data bisa terus dilakukan. Dengan
demikian tidak ada kekuatiran terjadinya stack overflow.
Kekurangan stack yaitu setiap sel tidak hanya menyimpan value saja, melainkan juga pointer
ke sel berikutnya. Hal ini menyebabkan implementasi stack memakai linked list akan
memerlukan memori yang lebih banyak daripada di implementasikan dengan array. Setiap
halaman pada linked list hanya bisa di akses dengan cara sekuensial, sehingga lambat.

K. Kekurangan Stack
Setiap sel tidak hanya menyimpan value saja, melainkan juga pointer ke sel
berikutnya. Hal ini menyebabkan implementasi stack memakai linked list akan memerlukan
memori yang lebih banyak daripada di implementasikan dengan array. Setiap halaman pada
linked list hanya bisa di akses dengan cara sekuensial, sehingga lambat.

- memori stack sangat terbatas
- ada kemungkinan stack akan meluap atau overflow jika terlalu banyak objek.
- tidak memungkinkan akses acak, karena harus mengeluarkan tumpukan paling atas
terlebih dahulu untuk mengakses tumpukan paling bawah.

Cara mendefenisikan Stack dengan Array of Struct yaitu:

- Definisikan Stack dengan menggunakan struct.


- Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack.
- Buatlah variabel array data sebagai implementasi stack.

- Deklarasikan operasi-operasi/function di atas dan buat implemetasinya.

contoh ://Deklarasi MAX_STACK

#define MAX_STACK 10

14
//Deklarasi STACK dengan struct dan array data

typedef struct STACK{

int top;

char data[10][10];

}; //Deklarasi/buat variabel dari struct

STACK tumpuk;

L. Membuat Program Stack


1. Pertama kita buat seperti ini dahulu

Lalu kita buat deklarasi variabelnya termasuk array yang akan kita gunakan untuk
menampung data data nya

variabel top untuk menunjukan data array yang paling terakhir dimasukan ke data array yaitu
pada variabel Stack[MAX]. nilai top yang menunjukan -1 adalah data yang akan dimasukan
dalam array itu pada index ke 0, jadi pertama kali proses compile/run yang tadinya nilai -1
lalu membuat program yang langsung menambahkan 1 jadi 0.

Selesai penamaan variabel, buat 4 fungsi yaitu push, pop, clearr, Print.

15
2. Membuat Fungsi Push

Fungsi push untuk menambahkan/menumpukan data ke tumpukan/array yang sudah kita buat
variabel sebelumnya. Pada kondisi if itu memeriksa bahwa jika nilai top == MAX-1 maka
tampilkan pesan "stack sudah penuh", sedangkan jika kita pertamakali run program nilai (top
= -1 dan MAX = 10 dikurangi 1 = 9) apakah -1 dengan 9 sama ?? pasti beda,

Jadi program akan menggunakan perintah else yang berfungsi untuk menumpukan data ke
array, terdapat kode top++ artinya menambahkan index array lalu ada kode cin »

Stack[top]; data dimasukan kedalam index tersebut. Itu sebaabnya nilai awal variabel top =
-1.

3. Membuat Fungsi Pop

Fungsi pop untuk mengurangi/mengambil data pada tumpukan/array yang paling terakhir di
tambahkan sebelumnya, tentunya sesuai dengan konsep LIFO yaitu terakhir kali masuk dia
yang pertama kali keluar. Pada kondisi if itu memeriksa bahwa jika nilai top == -1 maka
tampilkan pesan "stack kosong" sedangkan jika kita pertamakali run program nilai top = -1
jadi jelas jika kita belum.

memasukan data apapun ke dalam stack karena baru pertamakali run nilai top masih -1
memang stack itu kosong / tidak ada isinya.

Pada kondisi else untuk mengambil datanya maka menggunakan stack[top--j yaitu
mengambil data yang paling terakhir dimasukan.

16
4. Membuat Fungsi Clear

Untuk menghapus semua data stack yang sudah ada datanya, makanya return / nilai
kembalianya berupa top menjadi -1 lagi atau menjadi nilai semula lagi.

5. Membuat Fungsi Print

Fungsi ini untuk menampilkan hasil stacknya, jika top == -1 yang artinya data stack tidak
ada/nilai semula dari variabel top, maka disitu tampilkan "Empty !"

Jika tidak kosong langsung diproses dan menampilkan data array stack dengan for(){} data
akan muncul satu persatu sesuai data yang kita masukan.

6. Menu Tampilan Program

17
Fungsi Print() ditaruh diatas agar mudah utuk memahami program, serta pergerakan (TOP)
agar tau nilai top saat itu berapa.

Pakai do while agar progam terus mengulang-ulang selama syarat dalam while terpenuhi,
karena dalam program menggunakan do while maka getch() digunakan untuk mem
pause/memberhentikaan program sementara selama user belum meneken tombol sembarang.

Pas pertama kali di run bahwa stack masi kosong dan TOP = -1,selanjutnya

Data stack akan terus bertambah begitu juga top nya

18
Contoh program stack

#include <stdio.h>

#include <conio.h>

#define max 5

typedef struct {

int top;

int data[max+1];

}stack;

stack tumpukan;

void createEmpty();

int IsEmpty();

int IsFull();

void push(int x);

void pop();

main(){

int lagi;

19
int input;

int pilih;

createEmpty();

pilih = 0;

while (pilih != 5){

puts("_____________________________________");

printf(" MENU UTAMA\n");

//Printf dan Puts memiliki Fungsi yang sama

puts("_____________________________________");

puts("1: Cek kondisi Stack");

puts("2: Tambah data (Pust)");

puts("3: Keluarkan isi stack (Pop)");

puts("4: Kosongkan stack");

puts("5: Keluar");

printf("Pilihan Anda: ");

scanf("%d",&pilih);

switch(pilih){

case 1:

if (IsEmpty() == 1)

puts("Stack masih kosong");

else if ((IsEmpty() == 0) && (IsFull() == 0))

puts("Stack sudah terisi (belum penuh)");

else

puts("Stack sudah penuh");

20
break;

case 2:

if (IsFull() == 1)

puts("Stack Penuh.");

else

printf("Masukkan data: ");

scanf("%d",&input);

push(input);

printf("Top baru: %d\n",tumpukan.data[tumpukan.top]);

printf("IsFull: %d\n",IsFull());

printf("IsEmpty: %d\n",IsEmpty());

break;

case 3:

printf("Top yang dikeluarkan bernilai: %d \n",tumpukan.data[tumpukan.top]);

pop();

break;

case 4:

while (IsEmpty() == 0)

printf("Top yang dikeluarkan bernilai: %d \n",tumpukan.data[tumpukan.top]);

pop();

21
puts("Stack sudah kosong");

break;

case 5:

puts("---Terimakasih || MARKIJAR.Com---");

break;

void createEmpty(){

tumpukan.top = 0;

void push(int x){

tumpukan.top = tumpukan.top + 1;

tumpukan.data[tumpukan.top] = x;

void pop(){

tumpukan.top = tumpukan.top - 1;

int IsEmpty(){

if (tumpukan.top == 0)

return 1;

else

return 0;

22
int IsFull(){

if (tumpukan.top == max)

return 1;

else

return 0;

23
Dalam struktur data yang kita pelajari secara umum ada 3 notasi operasi yang dilakukan
untuk suatu operasi aritmatika,yaitu Prefix,Infix,dan postfix.Dan untuk mengetahui notasi-
notasi yang diatas itu,sebelumnya kita harus mengenal dan mengetahui indikator yang ada di
notasi itu tersebut.

Notasi ini terbentuk dari Operand dan Operator.

Operand adalah data atau nilai yang membantu dalam proses,sedangkan Operasi adalah
fungsi yang digunakan dalam proses.

contohnya:

A+B*C

2+5*3

Keterangan: A ,B ,C ,2 ,3 ,5 adalah Operand.

+,* adalah Operator.

Setelah kita mengenal dan mengetahui dengan Operand dan Operator, maka mari kita
mengenal juga tingkat/ level yang ada didalam notasi tersebut:

-( ) (Kurung).

- ^ (Pangkat).

- * / (Perkalian / Pembagian).

- + - (Penjumlahan / Pengurangan).

Notasi ada 3 jenis, yaitu Prefix,Infix dan Postfix yang seperti kita ketahui di atas:

24
1.Prefix adalah notasi yang terbentuk atas operator dengan operand, dimana oprator didepan
operand.

contoh: A + B * C (infix).

maka notasi prefixnya adalah: +A*BC.

Pemecahannya:

A+B*C

Diketahui ada 3 operand yaitu: A, B, C dan 2 operand yaitu: +, *.proses dimulai dengan
melihat dari hirarkhi oprator.Contoh diatas operator yang tertinggi adalah * kemudian +.
Tanda * diapit oleh 2 operand yaitu B*C, prefixnya dengan menggabungkan operand dan
memindahkan operator ke depan dari operand,sehingga fungsi B*C, notasi prefixnya menjadi
*BC.

Sehingga hasil sementara dari notasi prefix adalah:

A+*BC

Selanjutnya mencari prefix untuk operator yang berikutnya yaitu +, cara yang dilakukan
sama seperti diatas, operator + diapit oleh operand, yaitu A dan *BC, gabungkan
operand,sehingga menjadi A*BC,lalu pindahkan operator kedepan operand,sehingga hasil
akhir menjadi :

+A*BC.

2.Infix adalah notasi yang membentuk atas operator dengan operand,dimana operator berada
diantara operand.

Contoh :

-A+B*C

- (A + B) * C

- A - (B + C) * D ^ E

25
3.Postfix adalah notasi yang membentuk atas operator dengan operand, dimana operator
berada dibelakang operand.

Contoh : A + B * C ( infix).

maka notasi postfix adalah ABC*+.

Pemecahannya:

A+B*C

Diketahui ada 3 operand yaitu : A,B,C dan 2 operator yaitu : +, *. proses dimulai dengan
melihat dari hirarkhi operator.Contoh diatas operator yang tertinggi adalah * kemudian +.

Tanda * diapit oleh kedua operand yaitu B dan C yaitu B*C, postfix dengan menggabungkan
operand B dan C menjadi BC,lalu memindahkan operator ke belakang operand C, sehingga
fungsi B*C, notasi postfixnya menjadi BC*.Sehingga hasil sementara dari notasi postfix
adalah A + BC*

Selanjutnya mencari postfix untuk operator yang berikutnya, yaitu +, dengan cara yang
dilakukan sama seperti di atas, operator + diapit oleh 2 operand, yaitu : A dan BC*
gabungkan operand tersebut,sehingga menjadi ABC*,lalu pindahkan operator + kebelakang
operand ABC*.

Sehingga hasil akhir menjadi : ABC*+.

Contoh notasi huruf :

26
Contoh notasi angka :

M.Implementasi Array
1. Array

Mengutip After Academy, array adalah salah satu implementasi dari stack yang paling


sederhana dan menawarkan akses acak ke pengguna berdasarkan indeks.

Menurut Geeks for Geeks, dalam implementasi stack menggunakan array,


programmer dapat menggunakan bahasa pemrograman seperti C, C++, Java, Phyton, dan C#.

Geeks for Geeks juga menggambarkan bagaimana susunan dari kelima bahasa pemrograman
tersebut.

Kelebihan dari implementasi stack menggunakan array adalah mudah untuk


diimpelementasikan.

Sementara itu, kekurangannya adalah bisa dibilang tidak terlalu dinamis. Pasalnya, hal itu
tidak tumbuh dan menyusut, tergantung pada kebutuhan saat proses.

2. Linked List

Sama halnya array, linked list juga mudah dalam mengimplementasikan stack. Seperti yang
sudah dijelaskan sebelumnya, operasi dasar dari stack adalah menambahkan data (push) dan
menghapus data (pop).

27
Nah, dilansir dari Study Tonight, 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.

Masih sama seperti array, linked list juga dapat digunakan bahasa pemrograman seperti
C, C++, Java, Phyton, dan C#.

Kelebihan dari implementasi stack menggunakan linked list adalah dapat bertambah dan


berkurang sesuai dengan kebutuhan saat runtime.

Sementara kekurangannya adalah harus membutuhkan memori ekstra karena ada pointer di


dalamnya.

28
BAB III

PRAKTIKUM

1. Program Stack 1

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX_STACK_SIZE 5 //definisikan maksimum stack yang bisa ditampung

typedef int boolean;


#define TRUE 1 //definisikan true bernilai 1
#define FALSE 0 //definisikan false bernilai 0

struct arrayStack { //struct arrayStack


int nim[MAX_STACK_SIZE];
char nama[30][MAX_STACK_SIZE];
int top;
};
typedef struct arrayStack arrayStack; // mendefinisikan tipe arrayStack dari struct arrayStack

//Fungsi yang ada di stack


void push(arrayStack *stack, int nim, char nama[30]); // menambahkan nim dan nama ke
dalam stack
int pop(arrayStack *stack);// menghapus Top dari stack
int peek(arrayStack *stack);// mengecek top of stack.
boolean isEmpty(arrayStack *stack); // isEmpty akan mencari tahu apakah stack kosong atau
tidak

29
void display(arrayStack *stack); // menampilkan data stack

int main() {
int nim, pilihan;
char nama[30];
arrayStack stack; // variabel stack dengan tipe arrayStack yg sudah didefinisikan di
atas sebelumnya
arrayStack *stackptr = &stack; //pointer stack
stack.top = -1; // nilai awal top -1, yg berarti stack dalam keadaan kosong
awal:

while(1) {
printf("Pilih menu yang kamu inginkan\n");
printf("1. Push \n2. Pop \n3. Peek \n4. Display \n5. Exit\n");
printf("Pilihan kamu:\n");
scanf("%d", &pilihan);
switch(pilihan) {
case 1:
printf("Masukkan nim: "); scanf("%d", &nim);
printf("Masukkan nama: "); scanf("%s", nama);
//goto awal;
push(stackptr, nim, nama);
break;
case 2:
//goto awal;
printf("Data yang dihapus adalah nim: %d\n", pop(stackptr));
break;
case 3:
//goto awal;
printf("ToS adalah nim: %d\n", peek(stackptr));

30
break;
case 4:
//goto awal;
display(stackptr);
break;
case 5:

break;
default:
goto awal;
printf("Input Salah!\n");
}
}
}

void push(arrayStack *stack, int n, char m[]) {


if(stack->top == MAX_STACK_SIZE - 1) {
printf("Warning: Stack sudah penuh, tidak bisa diisi lagi'\n");
return;
} else {
int x;
x = ++stack->top;
stack->nim[x] = n; //tambahkan nim ke stack
strcpy(stack->nama[x], m); //copy nilai variabel parameter m ke stack->nama
}
}

int pop(arrayStack *stack) {


if (isEmpty(stack)) { // cek apakah stack kosong atau tidak
printf("Stack kosong\n"); //jika return true, maka berikan info kalau stack
kosong

31
return NULL;
} else {
int temp, temp2;
int x;
x = stack->top--;
temp = stack->nim[x]; //jika tidak kosong, hapus data nim
return temp; //berikan info data nim yang dihapus
}
}

int peek(arrayStack *stack) {


if (isEmpty(stack)) { //cek apakah stack kosong atau tidak
printf("Stack kosong\n"); //jika return true, maka berikan info kalau stack
kosong
return NULL;
} else {
return stack->nim[stack->top]; //jika return false, berarti tidak kosong,
tampilkan top dari nimnya
}
}

int isEmpty(arrayStack *stack) {


if (stack->top == -1){ //jika stack kosong return true, jika tidak return false
return TRUE;
}
else{
return FALSE;
}
}

void display(arrayStack *stack) {

32
if (stack->top == -1){
printf("Stack masih kosong\n");
} else{
int i = stack->top; //inisialisasi variabel i dengan top dari stack
for (; i >= 0; --i){ //loop dengan mengurangkan 1, sampai pada dasar stack
printf("nim: %d, nama: %s\t", stack->nim[i], stack->nama[i]);
printf("\n");
}
}
}

Output :

33
2. Program Stack 2

#include <stdio.h>
#include <conio.h>
#define max 5

typedef struct {
int top;
int data[max+1];
}stack;

stack tumpukan;
void createEmpty();
int IsEmpty();
int IsFull();
void push(int x);
void pop();

main(){
int lagi;
int input;
int pilih;
createEmpty();
pilih = 0;
while (pilih != 5){
puts("_____________");
printf(" MENU UTAMA\n");
//Printf dan Puts memiliki Fungsi yang sama
puts("_____________");
puts("1: Cek kondisi Stack");

34
puts("2: Tambah data (Pust)");
puts("3: Keluarkan isi stack (Pop)");
puts("4: Kosongkan stack");
puts("5: Keluar");
printf("Pilihan Anda: ");
scanf("%d",&pilih);
switch(pilih){
case 1:
if (IsEmpty() == 1)
puts("Stack masih kosong");
else if ((IsEmpty() == 0) && (IsFull() == 0))
puts("Stack sudah terisi (belum penuh)");
else
puts("Stack sudah penuh");
break;
case 2:
if (IsFull() == 1)
puts("Stack Penuh.");
else
{
printf("Masukkan data: ");
scanf("%d",&input);
push(input);
printf("Top baru: %d\n",tumpukan.data[tumpukan.top]);
printf("IsFull: %d\n",IsFull());
printf("IsEmpty: %d\n",IsEmpty());
}
break;
case 3:
printf("Top yang dikeluarkan bernilai: %d \n",tumpukan.data[tumpukan.top]);

35
pop();
break;
case 4:
while (IsEmpty() == 0)
{
printf("Top yang dikeluarkan bernilai: %d \n",tumpukan.data[tumpukan.top]);
pop();
}
puts("Stack sudah kosong");
break;
case 5:
puts("---Terimakasih || MARKIJAR.Com---");
break;
}
}
}

void createEmpty(){
tumpukan.top = 0;
}

void push(int x){


tumpukan.top = tumpukan.top + 1;
tumpukan.data[tumpukan.top] = x;
}

void pop(){
tumpukan.top = tumpukan.top - 1;
}
int IsEmpty(){

36
if (tumpukan.top == 0)
return 1;
else
return 0;
}

int IsFull(){
if (tumpukan.top == max)
return 1;
else
return 0;
}

Output :

37
3. Program Stack 3

//program implementasi stack


#include <stdio.h>
#include <conio.h>
#define max 5
typedef struct {
int top; //untuk mencacah indeks dari stack
int data[max+1];
}stack;
stack tumpukan;
void createEmpty();
int IsEmpty();
int IsFull();
void push(int x);
void pop();

main(){
int lagi;
int input;
int pilih;
createEmpty();
pilih = 0;
while (pilih != 5){
//Menu utama
puts("=====================================");
puts(" MENU UTAMA");
puts("=====================================");
puts("1. Cek kondisi Stack");
puts("2. Tambah data");
puts("3. Keluarkan isi stack");

38
puts("4. Kosongkan stack");
puts("5. Keluar");
printf("Pilihan: ");
scanf("%d",&pilih);
switch(pilih){
case 1: if (IsEmpty() == 1)
puts("Stack masih kosong");
else if ((IsEmpty() == 0) && (IsFull() == 0))
puts("Stack sudah terisi, tapi belum penuh");
else
puts("Stack sudah penuh");
getch();
break;
case 2: if (IsFull() == 1)
puts("Stack sudah penuh.");
else
{
printf("Masukkan data: ");
scanf("%d",&input);
push(input);
printf("%d",tumpukan.top);
printf("%d",IsFull());
printf("%d",IsEmpty());
}
break;
case 3: while (IsEmpty() == 0);
{
printf("%d \n",tumpukan.data[tumpukan.top]);
pop();
}

39
break;
case 4: createEmpty();
puts("Stack sudah kosong. Top = 0");
break;
case 5: puts("Byeee………");

break;
}
}
}
//DEKLARASI OPERASI-OPERASI DASAR STACK
void createEmpty(){
tumpukan.top = 0;
}
int IsEmpty(){
if (tumpukan.top == 0)
return 1;
else
return 0;
}
int IsFull(){
if (tumpukan.top == max)
return 1;
else
return 0;
}
void push(int x){
tumpukan.top = tumpukan.top + 1;
tumpukan.data[tumpukan.top] = x;
}

40
void pop(){
tumpukan.top = tumpukan.top - 1;
}

Output :

41
BAB IV
PENUTUP

A. Kesimpulan

Dari penjelasan diatas dapat disimpulkan stack (tumpukan) adalah sekumpulan data
yang organisasi atau strukturnya bersifat tumpukan dan karakteristik yang terbaik dengan
sifat dan cara penyimpanan sekaligus penggunaan atau pengaksesan data. Karakteristik
tersebut mengikat dan sekaligus secara timbal balikdipengaruhi oleh algoritma yang
mengakses data tersebut. Dalam kamus data, ada beberapa cara pendeklarasian struktur data,
salah satunya dengan menggunakan tata susunan linier (larik) dan sebuah variabel, yang
dikemas dalam tipe data record.

B. Saran
Dari uraian di atas penulis berharap, pembaca dapat memahami tentang pengertian
Stack (Tumpukan), Kamus dan Tumpukan, Operasi pada Stack, dan Notasi Aritmatik.
Penulis menyadari bahwa dalam pembuatan makalah ini masih banyak kesalahan dan
kekurangan, baik dari segi penulisan maupun dari segi pemaparan. Maka dari itu pemakalah
menerima dan mengharapkan kritik dan saran dari pembaca yang sifatnya membangun, agar
makalah ini dapat menjadi lebih sempurna dan menjadi rujukan bagi pembaca nantinya.

42
DAFTAR PUSTAKA

http://arifmzcr.blogspot.com/2018/10/v-behaviorurldefaultvmlo.html
http://aditajulian05.blogspot.com/2017/04/makalah-struktur-data-stack.html

43

Anda mungkin juga menyukai