MODUL 8 STACK/TUMPUKAN

LAPORAN STRUKTUR DATA MODUL VIII
STACK/TUMPUKAN

ANDIKA PRATAMA
20160910005
SI 2016 B

UNIVERSITAS KUNINGAN

Dasar teori


           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<iostream.h>
#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

Popular Posts