Pengertian antrian dan contoh implementasinya

by 05.16 0 komentar

      Struktur data lainnya adalah queue yang agak berbeda dengan prinsip stack, dimana dalam manipulasi setiap node yang menggunakan konsep FIFO (first-in, first-out) seperti antrian biasa, dimana yang masuk terlebih dahulu, itulah yang keluar dari antrian. Antrian adalah suatu kumpulan data yang penambahan elemennya hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Kalau tumpukan dikenal dengan menggunakan prinsip LIFO (Last In First Out), maka pada antrian prinsip yang digunakkan adalah FIFO (First In First Out)
Antrian banyak dijumpai dalam kehidupan sehari-hari, misal kalau kita menonton bioskop maka kita harus antri untuk membeli tiketnya.
Contoh implementasi dalam coding :

#include<iostream>
#include <conio.h>
#include <cstdlib>

using namespace std;

typedef struct //Mendeklarasikan type struct
{
int data [6]; //Mendlerasikan varible
int kepala;
int ekor;
}

Queue;
Queue antrian;

void Create()//Membuat fungsi Antrian
{
antrian.kepala=antrian.ekor=-1;
//deklarasi bahwa antrian.kepala sama dengan antrian.ekor yaitu -1
}

int kosong()
{
if(antrian.ekor==-1)
return 1;
else
return 0;
//kondisi jika antrian.ekor sama dengan -1 maka kembali ke 1 jika yang lainnya maka kembali ke 0
}
int penuh()
{
if(antrian.ekor==6-1)
return 1;
else
return 0;
//kondisi dimana jika antrian ekor sama dengan 6-1 maka kembali ke 1 dan jika lainnya maka kembali ke 0
}
void Enqueue(int data) //membuat masukan queue
{
            if(kosong()==1) //kondisi jika kosong () sama dengan 1 maka antrian.kepala= antrian.ekor=0
            {
                        antrian.kepala=antrian.ekor=0;
                        antrian.data[antrian.ekor]=data;

                        void Tampil(); //membuat fungsi tampil
                        {
                                    if(kosong()==0)
                                    /*kondisi dimana jika kosong() sama dengan 0 maka untuk integer i = antrian.kepala; i lebih kecil sama dengan antrian ekor; kemudian melakukan penambahan pada i*/

                                    {
                                                for(int i=antrian.kepala;i<=antrian.ekor;i++)
                                                {
                                                            cout<<antrian.data[i];
                                                }
                                    }
                                    else
                                                cout<<"Data Anda Kosong !\n";
                                                //kondisi jika laiinya maka akan tampil seperti diatas.
                        }
            }
            else
            if(penuh()==0)
            //kodisi laiinya jika penuh () sama dengan 0 maka antrian.ekor ditambah 1
            {
                        antrian.ekor++;
                        antrian.data[antrian.ekor]=data;

            }
}
int Dequeue() //variabel mengeluarkan antrian
{
            int i;
            int e=antrian.data[antrian.kepala];

            for(i=antrian.kepala;i<=antrian.ekor-1;i++)
            /*kondisi untuk i=antrian.kepala; i lebih kecil sama dengan antrian.ekor dikurangi 1; i ditambah 1*/
            {
                        antrian.data[i]=antrian.data[i+1];
                        //antrian data[i] sama dengan antrian data i+1
            }
            antrian.ekor--;
            //antrian.ekor dikurangi 1
            return e;
            //kembali ke e
}
void hancur()
//membuat fungsi menghancurkan queue
{
antrian.kepala=antrian.ekor=-1;
cout<<"Data sudah dihancurkan";
}

void Tampil()
//membuat fungsi tampil
{
            if (kosong()==0)
            {
                        for (int i=antrian.kepala;i<=antrian.ekor; i++)
                        {
                                    cout<<antrian.data[i]<<" ";
                        }
            }
            else
            {
                        cout<<"Data Anda Kosong\n";
            }
}

int main()
{
int pil;
int data;
Create();

 do
/*kondisi dimana program akan terus berjalan
 jika kondisi bernilai true dan program akan berhenti jika kondisi bernilai false.*/
{
system("cls");
cout<<"\n======== MENU ========\n";
cout<<"1. Enqueue\n";
cout<<"2. Dequeue\n";
cout<<"3. Tampil\n";
cout<<"4. Destroy\n";
cout<<"5. Keluar\n";
cout<<"======================\n";
cout<<"Masukkan Pilihan Anda : ";
cin>>pil; //inputan variabel pil bertipe integer

switch(pil)
//membuat switch pada plihan
{
            case 1:
                        cout<<"Masukan Data : ";
                        cin>>data;
                        Enqueue(data);
                        break;
                        //jika memilih 1 maka akan memasukan data antrian

            case 2:
                        cout<<"Elemen yang keluar : "<< Dequeue();
                        break;
                        /*jika memilih 2 maka akan menuju ke fungsi dequeue
                        atau dengan kata lain akan mengeluarkan 1 data pada elemen queue*/

            case 3:
                        Tampil();
                        /* jika memilih 3 maka akan menuju fungsi tampil,
                        maka data pada queue akan ditampilkan oleh program*/
                        break;

            case 4:
                        hancur();
                        // jika memilih 4 maka semua data pada queue akan dihancurkan.
                        break;
            case 5:
                        system("cls");
                        // jika memlih 5 maka akan menghapus layar dan keluar dari program.
                        break;
}
getch();
} while(pil!=5);
//akan melakukan operasi selama pilihannya tidak sama dengan 5

return 0;
}

Jika di compile maka akan tampil seperti gambar berikut:


 Sumber  : Buku Konsep dan Implementasi Struktur Data dengan C++
Oleh        : Lamhot dan David J.M Sembiring
Penerbit  : Andi

Simpan Gambar Aja

NIM: 140010297

Nama Dosen: IB KETUT SURYA ARNAWA, S.Kom.
Asisten : Steven Anthony

0 komentar:

Posting Komentar