MODUL 8 STACK/TUMPUKAN
LAPORAN STRUKTUR DATA MODUL VIII
STACK/TUMPUKAN
ANDIKA PRATAMA
20160910005
SI 2016 B
UNIVERSITAS KUNINGAN
STACK bisa
diartikan sebagai suatu kumpulan data yang seolah-olah diletakkan diatas data
yang lain. Satu hal yang perlu di ingat 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 8.1
compiler : borland c++
- syntax
#include<conio.h>
#define max 10
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<<"tumpkan kosong";
}
void bersih(){
t.atas=-1;
cout<<"tumpukan kosong!";
}
void main()
{
int pil,data;
awal();
do
{
clrscr();
cout<<"1.input\n2.hapus\n3.tampil\n4.bersihkan\n5.keluar\n masukan pilihan : ";
cin>>pil;
switch(pil)
{
case 1:cout<<"masukan 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);
getch();
}
- hasil run
- analisis
Program diatas adalah contoh sebuah
stack yang dimana di dalamnya terdapat operasi PUSH ( memasukan data )
menggunakan nama variable input, POP ( menghapus data yang terakhir diinputkan
)menggunakan nama variable hapus, TAMPIL ( Menampilkan isi tumpukan) CLEAR (
menghapus semua tumpukan ) menggunakan nama variable bersihkan dan EXIT
untuk keluar program menggunakan nama variable keluar. Hal pertama yang harus
dilakukan adalah memilih dari ke 5 menu tersebut di mana setiap
menu terdapat statemennya masing – masing dan stantemen itu terdapat dalam
function.
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<<"tumpkan
kosong";
}
void bersih(){
t.atas=-1;
cout<<"tumpukan
kosong!";
}
Praktikum 8.2
compiler : borland c++
- syntax
#include<iostream.h>
#include<conio.h>
#include<string.h>
struct
{
char data [15][100], max[15];
int i,j;
}stack;
void push()
{
stack.i++;
cout<<" Masukan Data : ";
cin>>stack.max;
strcpy(stack.data[stack.i], stack.max);
}
void pop ()
{
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)
{
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()
{
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<<"\n 1. Push \n 2. Pop \n 3. View \n 4.
Clear \n 5. Quit \n";
cout<<"\n Pilih : "; cin>>plh;
cout<<endl;
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 !!!
"<<endl;
getch(); goto ayo;
}
}
- hasil run
- analisis
Program diatas adalah program
stuck yang mana pada awalnya kita menginputkan batas maksimal nilai yang kita
masukan melalui proses :
cout<<" Maksimal
Tumpukan Data : "; cin>>n;
Selanjutnya program akan
menampilkan sebuah pilihan dimana pilihanya adalah push, pop, view, clear, quit.
Dengan adanya pemilihan ini kita selaku user menjadi lebih mudah untuk
menyelesaikan sebuah kasus jika kasus tersebut menggunkan stuck.dan untuk
membuat pilihan tersebut menggunakan proses :
void push()
{
stack.i++;
cout<<" Masukan Data
: ";
cin>>stack.max;
strcpy(stack.data[stack.i],
stack.max);
}
void pop ()
{
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)
{
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()
{
stack.j=0; stack.i=0;
}
latihan 8.1
compiler : borland c++
- syntax
#include<conio.h>
#include<stdio.h>
#define N 20
main()
{
int nilai[N],i,jml;
printf(" Jumlah Maksimal Tumpukan (<=20) = ");
scanf("%d",&jml);
for(i=0; i<jml; i++)
{
printf(" Data ke-%d = ", i+1);
scanf("%d",&nilai[i]);
if(i==jml-1)
{
printf("Tumpukan Penuh");
getch();
}
}
for(i=jml-1; i>=0;i--)
{
printf("\n data ke-%d = %d", i+1, nilai[i]);
}
getch();
return 0;
}
- hasil run
- analisis
Program diatas adalah
program
stuck , hasil
akhir run pada program akan memunculkan pertama masukan
jumlah tumpukan yang dapat di tampung dan maksimal tumpukan dibawah 20, karena
data yang akan diinput akan di tampung dalam array maka lakukan penginputan
dengan menggunakan for dan batasanya adalah nilai yang di inputkan pertama,
masukan if dengan kondisi (i==jml-1) if ini berguna untuk memberitahu jika
tumpukan suda penuh. Dan kondisi if i==jml-1 itu karena dalam array indeks
pertama di hitung 0 dan batasan indeks itu adalah nilai dikurangi 1 jadi jika
element arraynya 5 maka indeks terakhirnya 5-1=4
for(i=0; i<=jml; i++)
{
if(i>jml)
printf("tumpukan
penuh");
else
if(i<=jml)
printf("data %d=
",i+1);
scanf("%d",&nilai[i]);
}
if(i==jml-1)
{
printf("Tumpukan
Penuh");
getch();
}
Untuk output gunakan for untuk outputnya namun variabel i
dibuat dekremen (i--) karena stack ini mempunyai sifat LIFO ( last in first out
) jadi data yang di input terakhir akan keluar pertama.
for(i=jml-1; i>=0;i--)
{
printf("\n data ke-%d =
%d", i+1, nilai[i]);
}
Comments
Post a Comment