Anda di halaman 1dari 13

TUGAS PRAKTIKUM 5-6

ALGORITMA DAN PEMROGRAMAN 2


STACK (TUMPUKKAN)

Oleh:
Meliana
A1317048

Dosen Pengampu:
Veri Julianto, M.Si

JURUSAN TEKNIK INFORMATIKA


POLITEKNIK NEGERI TANAH LAUT
2018
Halaman Penilaian Laporan

Uraian Ya/Tidak Keterangan Nilai


Kertas A4

Huruf Times New


Roman size 12

Margin 4-3-3-3
(L-T-R-B)

Kebenaran listing
untuk menjawab
permasalahan

Penjelasan listing

Kesesuaian listing
dengan hasil
running

Total Nilai
A. DEFINISI STACK
Stack (tumpukan) merupakan sebuah cara dalam mengorganisasikan
data – data yang dimiliki. Stack digunakan sebagai penyimpanan data didalam
memori. Kaidah utama dalam stack adalah LIFO yang merupakan singkatan
dari Last In First Out, artinya adalah data yang terakhir dimasukkan adalah
data yang pertama kali akan diakses atau dikeluarkan.

Push Pop

B. DEKLARASI STACK
Sebuah struktur data dari sebuah stack setidaknya memiliki dua buah
variabel, yaitu satu variabel yang akan digunakan sebagai penanda bagian atas
tumpukkan dan array data yang akan menyimpan data – data yang dimasukkan
kedalam stack. Berikut adalah syntax untuk mendeklarasikan struktur data dari
sebuah stack :

struct nama_struct
{ int var1;
int var2[max]
}stack;
Contoh :
struct tumpukkan
{ int atas;
int isi[max]
}t;
Dimana, nilai “max” didefinisikan sebagai jumlah tumpukan
maksimum yang dapat disimpan dalam stack. Stack didefinisikan dengan
array berukuran max, berarti benyaknya data yang dapat disimpan adalah
sebanyak max yang nanti ditentukan ukurannya.
C. OPERASI – OPERASI DASAR DALAM STACK
1. createEmpty
Prosedur ini berfungsi untuk mengosongkan stack dengan cara
meletakkan variabel yang 1 ke posisi 0. Pendeklarasiannya adalah sebagai
berikut.

Void createEmpty ()
{
t.atas=0;
}
2. Push
Prosedur ini berfungsi untuk memasukkan nilai atau data kedalam
stack. pendeklarasiannya adalah sebagai berikut :

Void push (int data)


{
t.atas++;

t.data[t.atas]=data;
}
3. Pop
Prosedur ini berfungsi untuk mengeluarkan atau menghapus nilai
terakhir atau nilai yang berada paling atas didalam stack.
pendeklarasiannya adalah sebagai berikut:
void pop()
{
t.atas = t.atas - 1;
}
4. IsEmpty
Fungsi ini berfungsi untuk melakukan pengecekkan terhadap stack,
apakah stack tersebut kosong atau tidak. Jika stack kosong artinya variabel
atas pada posisi 0 atau stack tersebut tidak ada isinya maka fungsi akan
mengembalikan nila 1 (true), namun jika sebaliknya fungsi akakn
mengembalikan nilai 0 (false). Deklarasinya :
void isEmpty ()
{
if (t.atas == 0)
return 1;
else
return 0;
}
5. IsFull
Fungsi ini berfungsi untuk melakukan pengecekkan terhadap stack,
apakah stack tersebut penuh atau tidak. Jika stack penuh yang berarti
variabel atas salam posisi max), maka fungsi akan mengembalikan nilai 1
(true), namun jika kebalikannya adakan mengembalikan nilai 0 (salah).
Deklarasinya adalah :
void IsFull()
{
if (t.atas == max)
return 1;
else
return 0;
}
D. PEMBAHASAN
1. SOAL 1
Permasalahan
Jelaskan bagian-bagain dari program di bawah ini.
Penyelesaian :

Coding Keterangan
struct tumpukan Deklarasi tumpukan dengan isi
{
int atas; elemen atas dan data[max]
int data[max];
}t; dengan tipe data int. Serta
memiliki nama objek yaitu t.
void createEmpty () Deklarasi fungsi dari void
{
t.atas=0; ceateEmpty dengan isi elemen
}
t.atas=0.
Fungsi createEmpty digunakan
untuk menghapuskan dan isi
stack.
int kosong() Sama seperti isempty, untuk
{
if(t.atas==0) mengecek apakah stack dalam
return 1;
else keadaaan kosong atau tidak,
return 0;
} disini ada pengkondisian jika
t.atas==0 benar dan jika t.atas
bukan ==0 maka salah.
Fungsi kosong digunakan untuk
mengecek apakah isi stack
kosong atau tidak.
int isfull()/// untuk mengecek apakah Apakah stack mya sudah penuh
stack sudah penuh?
{ atau belum jika t.atas==max
if(t.atas==max)
{return 1; atau sudah penuh maka benar
cout<<"\tStack Penuh";}
else dan akan muncul keluaran stack
{return 0;
cout<<"\tStack masih bisa diisi";}
penuh tapi jika t.atas tidak
} ==max atau belum penuh maka
akan muncul layar keluaran
stack masih bisa diisi.
Fungsi isfull digunakan untuk
mengecek apakah stack sudah
penuh.
int push(int data)///memasukan nilai Deklarasi dari fungsi int push
kedalam stack/tumpukan
{ dengan isi opeator logika pada
if(kosong()==1)
{ fungsi kosong() dan isfull().
t.atas++;//T.atas=T.atas+1;
t.data[t.atas]=data; Fungsi kosong digunakan untuk
cout<<"Data "<<t.data[t.atas]<<"
masuk ke stack";
memasukkann suatu nilai atau
} data kedalam stack.
else if(isfull()==0)
{
t.atas++; Jika kosong()=1
t.data[t.atas]=data;
cout<<"Data "<<t.data[t.atas]<<" berarti data kosong.
masuk ke stack";
} Jika isfull()=0 berarti berisi

else
tetapi belum penuh.
cout<<"Tumpukan penuh";

}
void pop() Fungsi pop digunakan untuk
{
t.atas=t.atas-1; menghapus tumpukan data
cout<<"\tData Teratas Sudah di
Hapus"; terakhir atau teratas atau
}
mengambil data yang paling atas
atau yang paling terakhir di
inputkan.
int isempty() Fungsi isEmpty sama dengan
{
if(t.atas == 0) fungsi kosong yang
{return 1;
membedakan hanya pada
cout<<"\tStack Kosong";} Kosong tidak ada outputnya,
else
{return 0; pada isEmpty terdapat output.
cout<<"\tStack ada isinya";
}
void top () Deklarasi dari fungsi int kosong
{
if (kosong()==0) dengan isi operator logika pada
cout<<"\tData yang paling atas
adalah fungsi kosong.
:"<<t.data[t.atas];
else Fungsi kosong digunakan untuk
cout<<"\tStack kosong";
}
menampikan nilai atau data yang
teratas atau terakhir diinputkan.
void tampil() Fungsi tampil digunakan untuk
{
if (kosong()==0) menampilkan nilai atau data
{
for (int i=t.atas;i>0;i--) diinputkan pada stack.
{
cout<<"\n \tTumpukkan ke
"<<i<<"="<<t.data[i];
}
}
else
cout<<"\tTumpukkan kosong";
}
void Del ()///sama seperti create empty Fungsi del digunakan untuk
{
t.atas=0; menghapus atau mengosongkan
cout<<"\tTumpukkan kosong";
} semua isi tumpukan atau stack.
main () Digunakan untuk memanggil
{
int pil, data; fungsi createEmpty(); dan case
createEmpty(); ///t.atas=0
1-7 digunakan untuk memanggil
do
{ fungsi yang di atasnya.
system("cls");
cout<<"\t\tPILIHAN"<<endl;
cout<<"\t1.Menambahkan Data
"<<endl;
cout<<"\t2.Menghapus Data
Teratas"<<endl;

cout<<"\t3.Menampilkan Data
teratas"<<endl;
cout<<"\t4.Cek Kondisi
Stack"<<endl;
cout<<"\t5.Menampilkan Seluruh
Data yang Dimasukkan"<<endl;
cout<<"\t6.Menghapus Seluruh Data
yang Dimasukkan"<<endl;
cout<<"\t7.Keluar"<<endl;
cout<<"\tMasukkan Pilihan :
";cin>>pil;
switch (pil)
{
case 1: cout<<"\tMasukkan
Data = "; cin>>data;
push(data);
break;

case 2: pop(); break;

case 3: top(); break;

case 4: if (isempty() ==
1) /// isempty benar saat t.atas=0
cout<<"\tStack masih kosong";

else if ((isempty() == 0) &&


(isfull() == 0))
cout<<"\tStack sudah terisi,
tapi belum penuh";

else
cout<<"\tStack sudah
penuh";break;

case 5: tampil(); break;

case 6: Del(); break;

case 7:
cout<<"\t\tTerimakasih, tekan
enter untuk keluar";
}
getch();
}
while (pil!=7);
}
2. SOAL 2
Permasalahan
Jika angka yang di inputkan :

Input V Input IV Input III Input II Input I


5 7 8 9 2
Jelaskan alur penginputan, jika dilihat dari t.atas dan t.data[i]

Penyelesaian :
Input V Input IV Input III Input II Input I
5 7 8 9 2
Alur penginputan sebagai berikut.
Sebelum masuk ke proses input, ketika kita ingin melakukan
proses running maka akan muncul menu pilihan yang terdiri dari beberapa
katergori dalam pilihan.
Untuk menginputkan sebuah inputan maka kita masukkan pilihan
dengan mengetikkan pilihan nomor 1. Maka pilihan ini akan menjalankan
fungsi push yaitu fungsi yang digunakan untuk menambahkan data pada
tumpukan atau digunakan untuk memasukkann suatu nilai atau data
kedalam stack.

Karena pada proses push terdapat proses pengkondisian dimana jika


if(kosong()==1) yang berarti tumpukan kosong bernilai 1 atau bernilai
benar artinya tumpukan dalam kosong dan dapat ditambahkan data lagi.
Tapi jika isfull()=0 berarti berisi data tetapi datanya masih bida di input
lagi atau belum penuh.
a. Penginputan pertama dengan angka 2.
Pertama kita melalukan penginputan dengan memasukkan
pilihan yaitu pilih nomor 1 yaitu menambah data. Setelah kita
memasukkan pilihan 1 kemudian kita masukkan data yaitu angka 2,
maka angka 2 tersebut akan tersimpan dalam tumpukan sehingga
menjadi tumpukan terbawah atau tumpukan ke-5. Karena untu fungsi
dari tumpukan berlaku system Last In First Out, yang artinya data yang
terakhir dimasukkan adalah data yang pertama kali akan diakses atau
dikeluarkan. Maka angka 2 merupakan tumpukan ke 5 dari t.atas. Atau
merupakan t.data[1].

b. Penginputan kedua dengan angka 9.


Kedua sebelum kita menginputkan angka 9. Maka apabila di
Running akan kembali kepada pemilihan awal sehingga kita
memasukkan kembali pada pilihan nomor 1 yaitu pilihan memasukkan
data kemudian pada proses push akan memproses pada pemilihan
kondisi else if yaitu else if(isfull()==0) yang artinya sistem isfull
bernilai 0 atau bernilai salah. Lalu kita masukkan data yaitu 9, maka
data tersebut akan tersimpan sesuai urutan. Sehingga data dapat
diartikan berisi namun belum penuh dan masih dapat dimasukkan data
selanjutnya. Maka angka 9 akan tersimpan sebagai t.data[2].

c. Penginputan ketiga dengan angka 8.


Ketiga sebelum kita menginputkan angka 8. Maka apabila di
Running akan kembali kepada pemilihan awal sehingga kita
memasukkan kembali pada pilihan nomor 1 yaitu pilihan memasukkan
data kemudian pada proses push akan memproses pada pemilihan
kondisi else if yaitu else if(isfull()==0) yang artinya sistem isfull
bernilai 0 atau bernilai salah. Lalu kita masukkan data yaitu 8, maka
data tersebut akan tersimpan sesuai urutan. Sehingga data dapat
diartikan berisi namun belum penuh dan masih dapat dimasukkan data
selanjutnya. Maka angka 8 akan tersimpan sebagai t.data[3].

d. Penginputan keempat dengan angka 7.


Keempat sebelum kita menginputkan angka 7. Maka apabila di
Running akan kembali kepada pemilihan awal sehingga kita
memasukkan kembali pada pilihan nomor 1 yaitu pilihan memasukkan
data kemudian pada proses push akan memproses pada pemilihan
kondisi else if yaitu else if(isfull()==0) yang artinya sistem isfull
bernilai 0 atau bernilai salah. Lalu kita masukkan data yaitu 7, maka
data tersebut akan tersimpan sesuai urutan. Sehingga data dapat
diartikan berisi namun belum penuh dan masih dapat dimasukkan data
selanjutnya. Maka angka 7 akan tersimpan sebagai t.data[4].

e. Penginputan kelima dengan angka 5.


Kelima sebelum kita menginputkan angka 5. Maka apabila di
Running akan kembali kepada pemilihan awal sehingga kita
memasukkan kembali pada pilihan nomor 1 yaitu pilihan memasukkan
data kemudian pada proses push akan memproses pada pemilihan
kondisi else if yaitu else if(isfull()==0) yang artinya sistem isfull
bernilai 0 atau bernilai salah. Lalu kita masukkan data yaitu 5, maka
data tersebut akan tersimpan sesuai urutan. Sehingga data dapat
diartikan berisi namun belum penuh dan masih dapat dimasukkan data
selanjutnya. Maka angka 5 akan tersimpan sebagai t.data[5]. Sebagai
tumpukan teratas karena yang terakhir diinputkan.

3. SOAL 3
Permasalahan
Setelah di input ke-5 data diatas, bagaimana cara program “Menghapus
Data Teratas”.
Penyelesaian :
Cara menghapus data teratas pada proses running pada menu
pilihan kita masukkan pilihan nomor 2 yang akan menjalankan proses
fungsi pop.

Dimana fungsi pop merupakan fungsi yang mengeluarkan atau menghapus


nilai terakhir atau nilai yang berada paling atas didalam stack. Pada saat
memasukkan pilihan nomor 2 maka proses pop akan berjalan. Dimana
terdapat penugasan t.atas=t.atas-1 yaitu tumpukkan = jumlah tumpukan
dikurangi satu. Sehingga jumlah data tadi yang dimasukkan menjadi 4 saja
karena data yang teratas sudah dihapus menggunakan fungsi pop.
4. SOAL 4
Permasalahan
Jelaskan bagaimana proses menampilkan data keseluruhan setelah yang
paling atas di hapus?
Penyelesaian :
Cara menampilkan data keseluruhan setelah data teratas dihapus
adalah dengan cara memasukkan pilihan nomor 5, maka akan ketika kita
enter akan menjalankan fungsi tampil.

Dimana Fungsi tampil merupakan fungsi yang digunakan untuk


menampilkan semua data atau nilai yang diinputkan. Adapun terdapat
penugasan dengan menggunakan for sebagai berikut.
for (int i=t.atas;i>0;i--) penugasan ini menjelaskan bahwa
tampilan dari data tumpukan menggunakan array. Dimulai dari data ke-1
sampai data ke-4 karena data le-5 sudah dihapuskan pada proses
sebelumnya.

Data yang pertama kali dimasukkan menjadi data urutan data yang
terbawah karena pada tumpukan atau stack menggunakan sistem LIFO
atau Last In First Out. Sehingga data yang pertama kali dimasukkan maka
akan diakses atau dikeluarkan.