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

Syntaknya

#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

Studi Kasus

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

Postingan populer dari blog ini

Modul 1 Praktikum Struktur Data

Modul 3 Praktikum Struktur Data

Modul 5 Praktikum Struktur Data