STACK (ALGORTITMA DAN STRUKTUR DATA)



Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data yang lain. Dengan demikian stack adalah struktur data yang menggunakan konsep LIFO. Dengan demikian, elemen terakhir yang disimpan dalam stack menjadi elemen pertama yang diambil. Dalam proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari stack, maka kita melakukan push. Dan untuk memindahkan dari tempat yang atas tersebut, kita melakukan pop.



Pada saat ukuran stack, kalau kita teruskan menambah data lagi, akan terjadi overflow. Dengan demikian perlu data tambahan untuk mencatat posisi ujung stack. Dengan kebutuhan seperti ini, kita dapat menyajikan stack dengan menggunakan tipe data struktur (struct) yang terdiri dari dua field. Field pertama bertipe array untuk menyimpan elemen stack, medan kedua bertipe integer untuk mencatat posisi ujung stack.
Sebagai ilustrasi, “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack. Hal ini asemacam kebalikan dari postingan saya sebelumnya tentang queue
Saya akan membuat suatu program yang melakukan pembalikan kalimat dengan menggunakan stack
Contoh:

source code
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define maxstack 200

struct STACK        //membuat jenis data abstrak 'STACK'
{
    int top;
    char data[maxstack];
};

char dta[maxstack];
struct STACK stackbaru;

void inisialisasi()
{
    stackbaru.top = -1;
}

bool isfull()        //menanyakan penuhkah?
{
    if (stackbaru.top == maxstack-1) return true;
    else return false;
}

bool isempty()        //menanyakan kosongkah?
{
    if (stackbaru.top == -1) return true;
    else return false;
}
void push(char dta) //mengisi stack (menyiapkan data)
{
    if (isfull() == false)
    {
        stackbaru.top++;
        stackbaru.data[stackbaru.top]=dta;
    }
    else
    {
        puts ("\nMaaf Stack penuh");
    }
}

void pop()            //mengambil isi stack
{
    while (isempty() == false)
    {
            cout<<stackbaru.data[stackbaru.top];
            stackbaru.top--;

    }
}

void print()        //mencetak stack
{
    cout<<" ";
    for (int i=0; i<=stackbaru.top; i++)
    {
        cout<<stackbaru.data[i];
    }
}

void clear()
{
    stackbaru.top = -1;
}

void main()
{
    char kata[200];

    printf("--- PROGRAM PEMBALIK KALIMAT --- \n\n");
    printf("Masukkan kalimat yang Anda inginkan: \n");

    gets(kata);

    for(int i=0; kata[i]; i++)
        push(kata[i]);
    printf("------------------------------------ \n\n");

print();
cout<<" menjadi ";
pop();
cout<<"\n";
getche();
}

Tampilan



program sorting dengan menggunakan stack

source code;

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define maxstack 6

//using namespace std;

int top=-1;
struct STACK
{
int top;
float data[4];
};

float dta;
struct STACK stackbaru;

bool isfull ()
{
   if (stackbaru.top == maxstack)
         return true;
   else return false;
}
bool isempty()
{
   if (stackbaru.top == -1)
         return true;
   else
         return false;
}
void push (float dta)
{
   if (isfull() == true)
   {
         cout<<"maaf, stack dalam keadaan penuh";
         getche();
   }else{
         top++;
         stackbaru.top++;
         stackbaru.data[top] = dta;
   }
}
void pop ()
{
   if (isempty () == true){
         cout<<"data pada stack dalam keadaan kosong";
         getche();
   }else {
         cout<<"data yang terambil : "<<stackbaru.data[top]<<endl;
         top--;
   }
}
void print () // mencetak stack
{
   for (int i =top; i>=0;i--){
         cout<<stackbaru.data[i]<<"   ";
   }
}
void clear ()
{
   top=-1;
}

void inisialisasi ()
{
stackbaru.top=-1;
}

void Sort (int Array[])
{
   int i,j,kecil,temp;
   for (i=0; i<5; i++)
         {
         {kecil=i;
         for (j=i+1; j<5; j++)
         {
               if(Array[kecil]>Array[j])
            {kecil =j;}
         }
          temp = Array [i];
         Array[i] = Array[kecil];
         Array[kecil] = temp;

         }
   }
}

int main ()
{
void inisialisasi ();
   char menu;
   char ulang;
   int data [5];
   int i,j;


do {
   clrscr;
   printf("Menu : \n");
   puts("1. pop stack");
   puts("2. Push data dan sorting ascending");
   puts("3. cetak sorting descending");
   puts("4. Bersihkan stack");
   puts("5. Exit");

   cout<<"Menu pilihan anda : ";
   cin>>menu;

   if (menu == '1'){
         pop ();
         getche ();
         ulang == 'y';

   }
   else if (menu == '2')
   {
         cout<<"sorting ascending\n";
         for(i=0; i<5; i++)
   {
   cout<<"input nilai ke "<<(i+1)<<" =";
   cin>>data[i];
   }
   Sort(data);
   cout<<"sorting ascending :";
   for(j=0 ; j<5 ; j++)
   {cout<<data[j];
         push(data[j]);
   }
   cout<<"\n";
   getche();

         ulang = 'y';
   clrscr;
   }else if (menu == '3')
   {
         cout<<"sorting descending\n";
         print ();
      cout<<"\n";
         getche();
   }else if (menu =='4')
   {
         clear ();
         cout<<"Ulang? (y/t)";
         cin>>ulang;
   }else if (menu =='5')
   {

   }
}while (ulang =='Y' || ulang == 'y');
getche();
}

 
tampilan

semoga membantu :)



9 comments:

  1. persentasi tentang stack memusingkan juga ;)

    BalasHapus
  2. terimakasih infonya teh...

    BalasHapus
  3. assalamu'alaikum, mba, kalo dibuat flowchart nya gmn?

    BalasHapus
  4. mbak aman tampilan nya begini gimana mbak koding nya

    Contoh Tampilan Hasil
    Jumlah Kata : 4
    Kata 1 : Sukarti
    Kata 2 : hari
    Kata 3 : Ini
    Kata 4 : ujian
    Maka yang di PUSH ke dalam STACK
    4
    3
    Ujian
    2
    hari
    Ujian
    Ini
    Ini
    ujian
    1
    Sukarti
    Ini
    Hari
    Sukarti
    hari

    BalasHapus
  5. dan queue kebalikan dari eueuq wkwkwkwk :D

    BalasHapus
  6. mantap bang materinya sangat membantu, bisa saling tukar backlink gan, silakan agan bisa kunjungi blog saya , salam kenal :')

    BalasHapus