Kamis, 05 Juli 2012

Simulasi Stack Pada c++

Pada algoritma dan pemrograman (bahasa c) terutama struktur data kita akan mengenal suatu konsep penyusunan data/array/elemen struktur dengan cara penumpukan atau yang biasa disebut dengan stack. Apa sih yang dimaksud dengan stack/tumpukan ini? Silahkan baca post ini selengkapnya

Contoh nyatanya bisa kita lihat di kehidupan sehari-hari misalnya tumpukan piring. Seorang ibu rumah tangga yang akan mencuci piring meletakkan sebuah piring kemudian disusul dengan menumpuk piring yang ke 2 diatas piring pertama dan seterusnya hingga piring ke 5. Ketika piring akan diambil untuk dicuci maka tentu saja yang pertama kali diambil adalah piring yang ke 5 atau tumpukan teratas.

Sama halnya dengan data pada konsep stack di algoritma dan pemrograman. Stack (tumpukan) inilah yang menerapkan konsep yang kita kenal dengan LIFO (Last-In-First-Out) atau FCLS (First-Come-Last-Serve), artinya elemen struktur yang dimasukkan ke dalam rangkaian terakhir kali maka akan muncul pertama kali apabila ditampilkan/dikeluarkan.

Pada konsep Last-In-First-Out, yang terakhir masuk yang pertama kali keluar. Jika ada sebanyak NOEL elemen pada sebuah stack, maka elemen ke-NOEL merupakan elemen TOP.

Berikut ini adalah operator-operator atau nama method yang biasa digunakan dalam pemrograman algoritma stack.

- PUSH: penyisipan (Memasukkan elemen).
- POP: penghapusan (Mengeluarkan elemen puncak).
- IsEmpty: operator yang memeriksa apakah stack kosong.
- IsFull: operator yang memeriksa apakah stack penuh.
- Clear: operator untuk menghapus stack.

Berikut contoh program stack pada c++:

Listing code program 1:

#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#define size 5

struct stack
  {
    int a[size];
    int top;
  };

typedef struct stack STACK;

void push(STACK *p,int value) /* PUSH OPERATION */
  {
    if(p->top==size-1)
      cout<<"Stack Penuh!";
    else
      p->a[++p->top]=value;
  }

int pop(STACK *p) /* POP OPERATION */
  {
    if (p->top==-1)
    {
     cout<<"Stack Kosong!";
     return -1;
    }
    else
     return p->a[p->top--];
  }

void display (STACK *p) /*DISPLAY OPERATION */
  {
    int i;
    if(p->top==-1)
     cout<<"\nStack Kosong!\n";
    else
     cout<<"\nIsi Stack Adalah: \n";
     for (i=p->top;i>=0; --i)
     cout<a[i]<<"\n"; 
  }

void main()
{
  STACK s ;
  int x,i;
  s.top=-1;
  char pil;
  do {
     clrscr();
     printf("1. Tambah\n");
     printf("2. Hapus satu per satu\n");
     printf("3. Lihat Data\n");
     printf("4. Hapus Data\n");
     printf("5. Berhenti\n");
     printf("Silahkan masukkan pilihan anda (1-5)...  ");
     pil=getche();

        if(pil!='1' && pil !='2' && pil !='3' && pil!='4' && pil!='5' )
             printf("\n\nAnda salah mengetikkan inputan...\n");
             else
             {
          if(pil=='1')
          {
             cout<<"\nMasukkan Element: ";cin>>x;
                  push (&s,x);
          }
             else
             {
          if(pil=='2')
          {
             x=pop(&s);
             if(x!=-1)
                cout<<"\nElement yang Dihapus: "<

           getch();
          }
             else
          {
          if(pil=='3')
          {
             display(&s);
             getch();
          }
             else
          {
          if(pil=='4')
          {
             if(s.top==-1)
             printf("\nStack Kosong!\n");
             else
             printf("\nStack Dihapus!\n");
             for (i=s.top;i>=0; --i)
             printf("Element Yang Dihapus adalah %d\n",pop(&s));
             s.top=-1;
             getch();
          }}}
          }}}
             while(pil!='5');
}


Output:



Listing code program 2:


#include "stdio.h"
#include "string.h"
#include "conio.h"
#define DATA_MAX 100
char  nip[DATA_MAX][5];
char  nama[DATA_MAX][31];
char  asal[DATA_MAX][16];
float   gaji[DATA_MAX];
int      urutan;
char  cariNIP[5];
void main()
{
     char pil, menu = 0;
     int i;
     urutan = -1;
     while ( menu != '5' )
     {
         puts( "1. Tambah data" );
         puts( "2. Edit data" );
         puts( "3. Hapus data" );
         puts( "4. Daftar" );
         puts( "5. Keluar" );
         printf( "\nPilihan: " ); scanf( "%c", &menu );
         fflush( stdin );
         switch ( menu ) {
          case '1': ++urutan;
                        puts( "Tambah data" );
                        printf( "NIP: " ); gets( nip[urutan] );
                        printf( "Nama: " ); gets( nama[urutan] );
                        printf( "Asal: " ); gets( asal[urutan] );
                        printf( "Gaji: " ); scanf( "%f", &gaji[urutan] );
                        fflush( stdin );
                        puts( "\nSelesai. Tekan sembarang tombol" );
                        getch();
                        break;
          case '2': puts( "Edit data" );
                        printf( "NIP: " ); gets( cariNIP );
                       for ( i = 0; i <= urutan; i++ )
                            if ( strcmp(cariNIP, nip[i]) == 0 ) {
                                puts( "Ketemu" );
                                printf( "Nama: " ); gets( nama[i] );
                                printf( "Asal: " ); gets( asal[i] );
                                printf( "Gaji: " ); scanf( "%f", &gaji[i] );
                                fflush( stdin );
                                puts( "\nSelesai. Tekan sembarang tombol" );
                                getch();
                        break;
                     }
                  break;
        case '3': puts( "Hapus data" );
                  printf( "NIP: " ); gets( cariNIP );
                   for ( i = 0; i <= urutan; i++ )
                     if ( strcmp(cariNIP, nip[i]) == 0 ) {
                        puts( "Ketemu" );
                        printf( "Nama: %s \nAsal: %s \nGaji: %f", nama[i], asal[i], gaji[i] );
                        printf( "\n\nHapus data (Y/T)? " );
                        pil = getche();
                        if ( pil == 'Y' || pil == 'y' ) {
                         for ( int j = i+1; j <= urutan; j++ ) {
                               strcpy( nip[j-1], nip[j] );
                               strcpy( nama[j-1], nama[j] );
                               strcpy( asal[j-1], asal[j] );
                               gaji[j-1] = gaji[j];
                           }
                           --urutan;
                        }
                        break;
                     }
                  break;
        case '4': puts( "Lihat data" );
                  i = 0;
                 while ( i <= urutan ) {
                      printf( "NIP: %s\n", nip[i] );
                      printf( "Nama: %s\n", nama[i] );
                      printf( "Asal: %s\n", asal[i] );
                      printf( "Gaji: %f\n\n", gaji[i++] );
                  }
                  puts( "Selesai. Tekan sembarang tombol" );
                  getch();
                  break;
       }
    }
}


Output:


Listing code program stack 3:


#include "iostream.h"
#include "conio.h"
#include "stdlib.h"

int top,i;
char key,temp,e;
char stack[10];
void delay();

void pushanim()
{
 for(i=0;i<=17; i++)
 {
gotoxy(22+i,7);cout<<" ";
gotoxy(23+i,7); cout< }
 for(i=1;i<=(14-top);i++)
{
 delay();
gotoxy(40,6+i); cout<<" ";
gotoxy(40,7+i); cout< }
}
void popanim(char temp)
{
for(i=1;i<=(14-top);i++)
 {
 delay();
gotoxy(40,22-i-top); cout<<" ";
gotoxy(40,21-i-top); cout< }
 for(i=1;i<=19;i++)
 {
 delay();
gotoxy(38+i,7); cout<<" ";
gotoxy(39+i,7); cout< }
 gotoxy(58,7);cout<<" ";
}
void push(char e)
{
 top=top+1;
 stack[top]=e;
 pushanim();
}
void pop(char e)
{
 if(top !=0)
 {
  e=stack[top]; popanim(e);
  top=top-1;
 }
 else
 {
gotoxy(1,7); cout<<"stack telah kosong"<gotoxy(1,7);
}
}
void main()
{
clrscr();
cout<<"Animasi Stack"<cout<<"1.Push"<cout<<"2.Pop"<cout<<"3.quit"<//cout<<"pilih [1/2/3] ="<gotoxy(59,6); cout<<"=";
gotoxy(59,8); cout<<"=";
gotoxy(37,9); cout<<"||   ||";
for(i=1;i<=11;i++)
 {
gotoxy(38,10+i);
if(i==11)
cout<<"|___|";
else
cout<<"|   |";
}
top=0;
do
{
input:
gotoxy(1,5);
cout<<"masukkan pilihan anda[1/2/3] : ";
key=getche();
if(int(key)==27 || key=='3')
break;
else if(key=='1')
{
if(top != 10)
{
gotoxy(1,7); cout<<"masukkan suatu huruf : ";
cin>>temp;
push(temp);
gotoxy(1,7); cout<<"                      ";
}
else
{
gotoxy(1,7); cout<<"stack penuh";
getch();
gotoxy(1,7); cout<<" ";
}
}
else if(key=='2')
pop(temp);
else
goto input;
}while(1);
getch();
}
void delay()
{
for(int y=1;y<100;y++)
for(int x=1;x<100;x++)
for(int p=1;p<100;p++)
cout<<"";
}


Output:


Tidak ada komentar:

Posting Komentar