Praktikum Struktur Data Modul 8
TUGAS PENYERAHAN LAPORAN PRAKTIKUM STRUKTUR DATA
FAKULTAS
ILMU KOMPUTER
PRODI
SISTEM INFORMASI
UNIVERSITAS
KUNINGAN
Disusun Oleh:
Riqi Tricahyo(20160910064)
SI 2016 B
Modul 8 Stack
Tujuan Praktikum :
1. Mahasiswa memahami konsep Stack
dalam Bahasa C/C++.
2. Mahasiswa mampu menerapkan konsep
stack dalam mengorganisir data.
3. Mahasiswa mampu menerapkan stack
kedalam program.
Dasar
Teori :
STACK bisa
diartikan sebagai suatu kumpulan data yang seolah-olah diletakkan di atas data yang
lain. Satu hal yang perlu diingat bahwa kita bisa menambah (menyisipkan ) data
dan mengambil (menghapus) data melalui ujung yang sama, yang disebut sebagai
ujung atas stack ( top of stack ).
Stack mempunyai sifat LIFO ( Last In
First Out ) yang terakhir masuk adalah yang pertama keluar.
Ada 2
operasi dasar dalam stack, yaitu operasi menyisipkan data (push) dan operasi menghapus data (pop). Perintah push digunakan untuk memasukkan data ke dalam stack,
sedangkan perintah pop digunakan untuk menghapus elemen yang terletak pada
posisi paling atas dari sebuah stack.
Representasi
statis Stack, stack representasi statis biasanya diimplementasikan dengan
fungsi array dengan demikian maka keadaan stack dengan representasi statis
dapat mengalami kondisi elemen penuh karena konsep array adalah menetapkan
jumlah elemen yang ada. Operasi pada stack statis menggunakan operasi push dan pop.
PRAKTIKUM 1
Syntaknya
#include <iostream>
#include <conio.h>
#define max 10
using namespace std;
struct Tumpukan{
int atas;
int data[max];
}T;
void awal(){
T.atas=-1;
}
int kosong(){
if(T.atas==-1)
return 1;
else
return 0;
}
int penuh()
{
if(T.atas==max-1)
return 1;
else
return 0;
}
void input(int data)
{
if(kosong()==1)
{
T.atas++;
T.data[T.atas]=data;
cout<<"Data "<<T.data[T.atas]<<"masuk
ke stack";
}
else
if(penuh()==0)
{
T.atas++;
T.data[T.atas]=data;
cout<<"Data "<<T.data[T.atas]<<"masuk
ke stack";
}
else
cout<<"Tumpukan
penuh";
}
void hapus()
{
if(kosong()==0)
{
cout<<"Data teratas sudah
terambil";
T.atas--;
}
else
cout<<"Data kosong";
}
void tampil()
{
if(kosong()==0)
{
for(int i=T.atas;i>=0;i--)
{
cout<<"\nTumpukan ke
"<<i<<"="<<T.data[i];
}
}
else
cout<<"Tumpukan
kosong";
}
void bersih()
{
T.atas=-1;
cout<<"Tumpukan
kosong!";
}
int main()
{
int pil,data;
awal();
do
{
cout<<"1. Input\n2.
Hapus\n3. Tampil\n4. Bersihkan\n5.Keluar\nMasukkan pilihan :";
cin>>pil;
switch(pil)
{
case 1:cout<<"Masukkan
data = ";
cin>>data;
input(data);
break;
case 2:hapus();
break;
case 3:tampil();
break;
case 4:bersih();
break;
case 5: cout<<"Terimakasih, tekan enter untuk
keluar";
}
getch();
}
while(pil!=5);
}
Hasilnya
Analisisnya
program untuk menampilkan tumpukan data-data yang di input dengan pilihan yang telah tersedia dimana pilihannya 1. Input, 2. hapus, 3. Tampil, 4. Bersihkan, dan 5. Keluar. Dengan menggunkan file header <iostream> dan <conio.h> dan juga ditambahkan dengan menggunkan #define max 10 yang berarti banyaknya jumlah data yang dimasukkan adalah dengan maksimal data nya yaitu berjumlah 10 data. Program ini didalamnya merupakan implementasi dari tumpukan atau stack. Stack (tumpukan) itu adalah kumpulan data-data yang seolah-olah diletakkan diatas data yang lain. Yang mana didalamnya terdapat field variabel bertipe data integer atas dan variabel array. Function dengan void diatas merupakan cara untuk pemanggilan variabel yang ada di struct tumpukan. Function bertipe data integer dengan isinya berupa jika nilai atas sama dengan 0 lakukan pengembalian nilai, jika tidak sama dengan 0 maka lakukan operasi selanjutnya. Function bertipe data integer dengan isinya berupa jika nilai variabel atas sama dengan 10 maka return 1 yang berarti mengembalikan nilai sampai memenuhi nilai max, jika tidak sama dengan 10 maka lakukan operasi berikutnya sampai memnuhi nilai max.
dan pada program ini kita bisa menginput sebuah nilai dan juga bisa menghapus nilai tersebut, jadi kita tinggal hanya memilih apa yang kita mau. dan pada pilihan ke 5 itu ada keluar dimana artinya si program akan menghentikan programnya secara otomatis
PRAKTIKUM 2
#include<iostream.h>
#include<conio.h>
#include<string.h>
struct
{
char data[15][100], max[15];
int i, j;
} stack;
void
push() // push untuk memasukan data
{
stack.i++;
cout<<"Masukan Data:
";
cin>>stack.max;
strcpy(stack.data[stack.i],
stack.max);
}
void
pop()// pop untuk mengambil data
{
if(stack.i>0)
{
cout<<"Data yang
terambil: "<<stack.data[stack.i]<<endl;
stack.i--; stack.j--;
}
else
cout<<"Tak ada data
yang terambil"<<endl;
}
void
view (int n)// print untuk menampilkan data
{
if(stack.j>0)
{
for(int e=n; e>=1; e--)
{
cout<<stack.data[e]<<endl;
}
}
else
cout<<"Tak ada data
tersimpan"<<endl;
}
void
clear()// clear untuk menghapus data
{
stack.j=0; stack.i=0;
}
void
main()
{
int n, plh;
ayo:
clrscr();
cout<<"Contoh program
stack (tumpukan)\n\n";
cout<<"Maksimal
tumpukan data : "; cin>>n;
stack.data[n];
stack.i=0;
stack.j=0;
balik:
clrscr();
cout<<"\n1.
Push\n2. Pop\n3. View\n4. Clear\n5. Quit\n";
cout<<"\nPilih :
"; cin>>plh;
cout<<"\n";
if (plh==1)
{
if (stack.j,n)
{
stack.j++; push();
}
else
{
cout<<"Tumpukan
Penuh"<<endl;
getch();
}
goto
balik;
}
else if (plh==2)
{
pop(); getch(); goto balik;
}
else if (plh==3)
{
view(stack.i); getch(); goto
balik;
}
else if (plh==4)
{
clear(); getch(); goto balik;
}
else if (plh==5)
{
getch(); goto ayo;
}
else
{
cout<<"Input yang anda
masukan salah !!!";
getch();
goto ayo;
}
}Hasilnya
Analisisnya
Program tersebut digunakan untuk menampilkan beberapa pilihan diantaranya PUSH, dan POP dengan menggunakan STACK. Dimana PUSH adalah menyisipkan data dan POP adalah menghapus data.
struct
{
char data[15][100], max[15];
int i, j;
}stack;
Penggalan syntax diatas
merupakan inisiasi proses pembuatan STACK dengan menggunakan elemen array
character dengan jumlah elemennya adalah 50 sampai 100 dan untuk max nya adalah
15. Juga terdapat tipe data integer dengan nama I dan J, dan semua dikumpulkan
pada struktur stack.
stack.i++;
cout<<"Masukan Data:
";
cin>>stack.max;
strcpy(stack.data[stack.i],
stack.max);
Maksud syntax diatas yaitu proses untuk
menyelesaikan pemilihan input atau PUSH yang akan di proses oleh strcpy(stack.data[stack.i],
stack.max);
if(stack.i>0)
{
cout<<"Data yang
terambil: "<<stack.data[stack.i]<<endl;
stack.i--; stack.j--;
}
else
cout<<"Tak ada data yang
terambil"<<endl;
Maksud dari penggalan
syntax diatas yaitu proses menyelesaikan pemilihan POP dengan menggunakan
intruksi IF-ELSE yaitu apabila kondisi IF terpenuhi maka akan menjalankan cout<<"Data
yang terambil: "<<stack.data[stack.i]<<endl; yang
menggunakan decrement stack.i--; stack.j--; Selanjutnya
apabila kondisi IF tidak terpenuhi maka akan menjalankan kondisi ELSE yaitu cout<<"Tak
ada data yang terambil"<<endl;
{
if(stack.j>0)
{
for(int e=n; e>=1; e--)
{
cout<<stack.data[e]<<endl;
}
}
else
cout<<"Tak ada data
tersimpan"<<endl;
}
Penggalan
syntax diatas merupakan proses untuk output menampilkan data. Dengan menggunkan
intruksi IF-ELSE yaitu if(stack.j>0) maksudnya apabila
stacknya melebihi nilai 0 maka akan dijalankan oleh intruksi FOR atau
pengulangan yang sudah diketahui jumlah perulangannya yaitu for(int
e=n; e>=1; e--) dengan arti integer e dimulai dari nilai n, dan
apabila e melebihi nilai 1 maka selanjutnya menggunakan decrement atau
pengurangan nilai sampai nilai terpenuhi. Selanjutnya apabila kondisi IF tidak
terpenuhi maka akan menjalankan pernyataan yang lain yaitu berupa output cout<<"Tak
ada data tersimpan"<<endl;
cout<<"\n1. Push\n2. Pop\n3. View\n4.
Clear\n5. Quit\n";
cout<<"\nPilih : ";
cin>>plh;
cout<<"\n";
if (plh==1)
{
if (stack.j,n)
{
stack.j++; push();
}
else
{
cout<<"Tumpukan
Penuh"<<endl;
Penggalan
syntax diatas merupakan kondisi struktur pemilihan dengan pilihan ke- 1, 2, 3,
4, dan 5. Dengan menggunakan intruksi IF-ELSE yaitu apabila memilih pilihan
ke-1 maka akan dijalankan oleh stack.j++; push(); dan apabila tidak
maka akan menjalankan cout<<"Tumpukan
Penuh"<<endl;
goto balik;
}
else if (plh==2)
{
pop(); getch(); goto balik;
}
else if (plh==3)
{
view(stack.i); getch(); goto balik;
}
else if (plh==4)
{
clear(); getch(); goto balik;
}
else if (plh==5)
{
getch(); goto ayo;
}
else
{
cout<<"Input yang anda
masukan salah !!!";
getch(); goto ayo;
}
}
Diatas merupakan penggalan
syntax yang menggunakan struktur pengulangan GOTO. GOTO merupakan intruksi
untuk mengarahkan eksekusi program ke pernyataan yang diawai dengan suatu
label. Label merupakan pengenal yang diawali dengan (: ) . Diatas terdapat 4
pilihan yang akan dijalankan oleh intruksi IF-ELSE, seperti apabila kita
memillih kondisi yang pertama yaitu
else if (plh==2) maka
akan dijalankan oleh pop(); getch(); goto balik; atau
memilih kondisi yang lain seperti else if (plh==4) maka akan
dijalankan oleh clear(); getch(); goto balik; Dan apabila menjalankan sebuah
kondisi yang tidak memenuhi kondisi IF maka akan menjalankan ELSE yaitu cout<<"Input
yang anda masukan salah !!!";
LATIHAN 1
Konsep stack dilogikan seperti sebuah tumpukan barang yang tersusun keatas dengan ketinggian tumpukan yang telah ditentukan, untuk mengilustrasikannya program dibawah ini. Jalankan program dibawah ini bila belum sesuai, perbaiki.
Syntaknya
#include<stdio.h>
#define
N 20
int
main()
{
int nilai[N],i,jml;
printf("Jumlah Maksimal
Tumpukan (<=20) = ");
scanf("%d",&jml);
printf("\n");
for(i=0; i<=jml; i++)
{
if(i==jml)
printf("\nTumpukan
Penuh");
else
if(i<=20)
{
printf("Data
Ke-%d = ",i+1);
scanf("%d",&nilai[i]);
}
}
for(i=0; i<=jml; i++)
{
printf("\nData
ke-%d = %d",i++,nilai[i]);
}
return
0;
}Hasilnya
Program diatas digunakan untuk mengetahui kondisi tumpukan barang yang tersusun, dengan ketinggian yang sudah diketahui dengan menggunakan STACK.
int nilai[N],i,jml;
printf("Jumlah Maksimal
Tumpukan (<=20) = ");
scanf("%d",&jml);
printf("\n");
for(i=0; i<=jml; i++)
Penggalan syntax diatas
yaitu proses inisiasi STACK dengan tipe data integer untuk nilai N, I, dan jml
dan penginputan data tidak lebih dari 20. Dengan menggunakan intruksi FOR yaitu
for(i=0;
i<=jml; i++) maksudnya adalah untuk nilai awal I adalah 0, dan
apabila I kurang dari nilai jml, maka nilai I mengguanakan decrement atau
penambahan nilai sampai nilai tersebut terpenuhi.
if(i==jml)
printf("\nTumpukan
Penuh");
else
if(i<=20)
{
{
printf("Data Ke-%d
= ",i+1);
scanf("%d",&nilai[i]);
}
}
for(i=0; i<=jml; i++)
{
printf("\nData
ke-%d = %d",i++,nilai[i]);
}
Maksud dari penggalan script diatas
adalah proses dari penginputan data dengan menggunakan intruksi IF-ELSE apabila
kondisi memenui IF yaitu akan menjalankan if(i==jml) dan akan diproses oleh printf("\nTumpukan
Penuh"); selanjutnya apabila tidak memenuhi kondisi IF maka akan
menjalankan kondisi ELSE apabila if(i<=20) dengan menjalankan scanf("%d",&nilai[i]);
Terdapat juga intruksi FOR selanjutnya yaitu for(i=0; i<=jml; i++) apabila
nilai awalan untuk I adalah 0, dan I kurang dari nilai jml, maka akan dilakukan
proses decrement atau pertambahan nilai sampai nilai tersebut terpenuhi dan
akan diproses oleh printf("\nData ke-%d = %d",i++,nilai[i]); untuk dapat
melihat hasil outputnya.
Komentar
Posting Komentar