Friday, June 5, 2015

Stack dan Queue Dalam C++

 
3. Stack
Stack (tumpukan) adalah struktur data yang meniru bagaimana proses menyimpan dan mengambil suatu buku pada suatu tumpukan buku yang ada di lantai. Apabila diperhatikan dengan seksama maka proses menyimpan buku (disebut push) dan proses mengambil buku (disebut pop) dari suatu tumpukan selalu dilakukan pada bagian atas tumpukan (top of the stack) sehingga terjadi urutan yang disebut LIFO (Last In First Out). Artinya, buku yang terakhir disimpan adalah buku yang pertama harus diambil karena buku inilah yang berada pada urutan teratas dari tumpukan.

Operasi dalam Stack :
  • Push : Menyisipkan data ke dalam stack.
  • Pop : Mengeluarkan data dari stack.
  • IsEmpty : Untuk mengecek apakah stack dalam keadaan kosong atau tidak.
  • IsFull : Untuk mengecek apakah stack dalam keadaan penuh atau tidak.
  • Clear : Mengosongkan isi data.

Pendeklarasian Stack:
//deklarasi stack dengan struct dan array
struct STACK
{
   int data[5];
   int top;
};

//deklarasi variabel tumpukan dari struct
STACK tumpukan;

Contoh Source Code Program (Menggunakan Borlan C++):
//Preprosesor
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

//deklarasi stack dengan struct dan array
struct STACK
{
   int data[5];
   int top;
};

//deklarasi variabel tumpukan dari struct
STACK tumpukan;

//deklarasi fungsi operasi stack
void inisialisasi();
int IsEmpty();
int IsFull();
void push(int data);
void pop();

//fungsi main program
void main()
{
   clrscr();
   int pilih, input, i;

   inisialisasi();
   do{
    cout<<"1. Push data"<<endl;
    cout<<"2. Pop Data"<<endl;
    cout<<"3. Print Data"<<endl;
    cout<<"4. Clear Data"<<endl;
    cout<<endl;
    cout<<"pilih : ";
    cin>>pilih;
      switch(pilih)
      {
        case 1:
         {
           if(IsFull() == 1)
            {
              cout<<"Tumpukanan penuh !";
            }
            else
            {
               cout<<"Data yang akan di push : ";
               cin>>input;
               push(input);
            }
            cout<<endl;
            getch();
            break;
         }
         case 2:
         {
           if(IsEmpty() == 1)
            {
              cout<<"Tumpukanan kosong !";
            }
            else
            {
               cout<<"Data yang akan di Pop = "
               <<tumpukan.data[tumpukan.top]<<endl;
               pop();
            }
            cout<<endl;
            getch();
            break;
         }
         case 3:
         {
           if(IsEmpty() == 1)
            {
              cout<<"Tumpukanan kosong !"<<endl;
            }
            else
            {
               cout<<"Data : "<<endl;
               for(i=0;i<=tumpukan.top;i++)
               {
                 cout<<tumpukan.data[i]<<" ";
               }
               cout<<endl;
            }
            cout<<endl;
            getch();
            break;
         }
         case 4:
         {
            inisialisasi();
           cout<<"Tumpukanan sudah kosong !"<<endl;
            cout<<endl;
            getch();
            break;
         }
         default:
         {
           cout<<"Tidak ada dalam pilih"<<endl;
         }
      }
   }while(pilih>=1 && pilih <=4);
  getch();
}

// fungsi inisialisasi stack = kosong
void inisialisasi()
{
  tumpukan.top = -1;
}

//fungsi mengecheck apakah stack kosong
int IsEmpty()
{
 if (tumpukan.top == -1)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}

//fungsi mengecheck apakah stack penuh
int IsFull()
{
 if (tumpukan.top == 5-1)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}

//fungsi untuk menyisipkan data ke stack
void push(int data)
{
 tumpukan.top++;
 tumpukan.data[tumpukan.top] = data;
}

//fungsi untuk mengeluarkan data dari stack
void pop()
{
 tumpukan.top = tumpukan.top - 1;
 if(tumpukan.top<0)
 {
  tumpukan.top = -1;
 }
}

Hasil Eksekusi Program :


4. Queue
Queue (antrian) adalah struktur data yang meniru antrian orang yang sedang menunggu pelayanan misalnya di depan seorang teller bank, atau antrian orang yang sedang membeli karcis pertunjukan. Apabila diperhatikan dengan seksama maka penambahan orang pada suatu antrian selalu dilakukan pada urutan paling belakang (rear of queue), dan pelayanan selalu dilakukan pada urutan depan (front of queue) sehingga urutan proses antrian sering disebut FIFO(First In First Out). Yang pertama masuk antrian, itulah yang pertama dilayani.

Pendeklarasian Queue:
//deklarasi queue dengan struct dan array
struct QUEUE
{
   int data[5];
   int head;
   int tail;
};

//deklarasi variabel antrian dari struct
QUEUE antrian;

Contoh Source Code Program (Menggunakan Borlan C++):
//Preprosesor
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

//deklarasi queue dengan struct dan array
struct QUEUE
{
   int data[5];
   int head;
   int tail;
};

//deklarasi variabel antrian dari struct
QUEUE antrian;

//deklarasi fungsi queue
void Create();
int IsEmpty();
int IsFull();
void Enqueue(int data);
int Dequeue();

//fungsi main program
void main()
{
   clrscr();
   int pilih, input, i;

   Create();
   do{
    cout<<"1. Tambah data"<<endl;
    cout<<"2. Keluarkan data"<<endl;
    cout<<"3. Print Data"<<endl;
    cout<<"4. Clear Data"<<endl;
    cout<<endl;
    cout<<"pilih : ";
    cin>>pilih;
      switch(pilih)
      {
        case 1:
         {
            if(IsFull() == 1)
            {
              cout<<"Antrian penuh !";
            }
            else
            {
              cout<<"Data yang dimasukkan : ";
              cin>>input;
              Enqueue(input);
            }
            cout<<endl;
            getch();
            break;
         }
         case 2:
         {
            if(IsEmpty() == 1)
            {
              cout<<"Antrian kosong !";
            }
            else
            {
              cout<<"Data yang dikeluarkan : "
               <<Dequeue()<<endl;
            }
            cout<<endl;
            getch();
            break;
         }
         case 3:
         {
            if(IsEmpty() == 1)
            {
              cout<<"Antrian kosong !"<<endl;
            }
            else
            {
               cout<<"Data : "<<endl;
               for(i=antrian.head;i<=antrian.tail;i++)
               {
                 cout<<antrian.data[i]<<" ";
               }
               cout<<endl;
            }
            cout<<endl;
            getch();
            break;
         }
         case 4:
         {
            Create();
            cout<<"Antrian sudah kosong !"<<endl;
            cout<<endl;
            getch();
            break;
         }
         default:
         {
           cout<<"Tidak ada dalam pilih"<<endl;
         }
      }
   }while(pilih>=1 && pilih <=4);
   getch();
}


//fungsi create queue/inisialisasi
void Create()
{
 antrian.head = antrian.tail = -1;
}

//fungsi mengecheck apakah queue kosong
int IsEmpty()
{
 if (antrian.tail == -1)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}

//fungsi mengecheck apakah queue penuh
int IsFull()
{
 if (antrian.tail == 5-1)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}

//menambah data pada queue
void Enqueue(int data)
{
   if(IsEmpty()==1)
   {
     antrian.head = antrian.tail = 0;
     antrian.data[antrian.tail] = data;
   }
   else if(IsFull()==0)
   {
     antrian.tail++;
     antrian.data[antrian.tail] = data;
   }
}

//mengeluarkan data dari queue
int Dequeue()
{
   int i;
   int e = antrian.data[antrian.head];
   for(i=antrian.head; i<=antrian.tail-1; i++)
   {
     antrian.data[i] = antrian.data[i+1];
   }
   antrian.tail--;
   return e;
}

Hasil Eksekusi Program :

Referensi:
Suarga (2004), Algoritma Pemrograman, ANDI Publisher
Fachrurrozi (2006), Modul Struktur Data, Universitas Sriwijaya

Lanjutan Ke Post Berikutnya :
>>> Sorting dan Searching Data Dalam C++

No comments:

Post a Comment