Kamis, 21 Maret 2019

Posted by Milda Hayati on 05.26 with No comments

A. Pengertian QUEUE

Queue dalam struktur data atau yang diartikan sebagai antrian merupakan sekumpulan data dimana saat menambahkan elemen hanya bisa dilakukan pada suatu ujung disebut sisi belakang (rear) dan penghapusan (pengambilan elemen) dilakukan lewat ujung lain/sisi depan(front). Berbeda dengan stack yang bersifat LIFO maka queue bersifat FIFO (First In First Out), yaitu data yang pertama masuk maka akan menjadi yang pertama kali keluar begitu pun sebaliknya.
 
Tumpukan disebut juga dengan "Waiting Line" yaitu suatu penambahan elemen baru dilakukan pada bagian belakang dan penghapus elemen dilakukan dilakukan pada bagian depan. Elemen-elemen dicdalam antrian dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur. Queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang cukup sering ditemui di kehidupan sehari-hari, midalnya saat pengantrian tiket. Istilah yang cukup sering dipakai adalah enqueue yaitu apabila seseorang masuk dalam sebuah antrian. Sedangkan dequeue adalah istilah yang dipakai saat seseorang keluar dari antrian.

B. Operasi-Operasi pada QUEUE 

1. Create Queue(Q)
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1

2. Make NullQ (Q)
Mengosongkan antrian Q, jika ada elemen maka semua elemen dihapus.

3. EnQueue
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang. Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu.

4. DeqQueue
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian. Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1. Penggeseran dilakukan dengan menggunakan looping.

5. Clear
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca.

6. IsEmpty
Untuk memeriksa apakah Antrian sudah penuh atau belum. Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty. Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah. Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail.

7. IsFull
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh.

C. Pendeklarasian QUEUE

1. Create
prosedure create;
begin
   head:=;tail:=0;
end;

2. Full
fungtion full:boolean;
begin
   if tail = maxqueue then
      full:= true
   else
      full:= false
end;

3. Empty
fungtion empety:boolean;
begin
   if tail = 0 then
      empty :=true
   else
      empty:= false;
end;

4. Enqueue  
procedure enqueue(elemen : byte);   
begin 
   if empty then 
begin 
   head := 1;
   tail:=1; 
   queue[head]:=elemen;
end
   else
   if not full then
begin
   inc(tail);
   queue[tail]:= elemen;
   end;
end;

5. Dequeue
procedure dequeue; Var I :byte;
begin
   if not empty then
   begin
      for I := head to tail - 1 do
      queue[I]:= queue[I+1]
         dec(tail);
   end;
end;
 
6. Clear
producer clear;
begin
   while
      not empty then
      dequeue;
end
 
Contoh Program:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 5
#include <iostream>

using namespace std;

typedef struct
{
    int data [MAX];
    int head;
    int tail;
}Queue;

Queue antrian;

void Create()
{
    antrian.head=antrian.tail=-1;
}

int IsEmpty()
{
    if(antrian.tail==-1)
        return 1;
    else
        return 0;
}

int IsFull()
{
    if(antrian.tail==MAX-1)
    return 1;
    else
    return 0;
}

void Enqueue(int data)//menginput sebah dta
{
    if(IsEmpty()==1)
    {
        antrian.head=antrian.tail=0;
        antrian.data[antrian.tail]=data;
        printf("%d Data Telah Masuk !",antrian.data[antrian.tail]);

//        void Tampil();
//        {
//            if(IsEmpty()==0)
//            {
//                for(int i=antrian.head;i<=antrian.tail;i++)
//                {
//                    printf("%d ",antrian.data[i]);
//                }
//            }
//            else
//            printf("Data Kosong !\n");
//        }
    }
    else
    if(IsFull()==0)
    {
        antrian.tail=antrian.tail+1;
        antrian.data[antrian.tail]=data;
        printf("%d masuk !", antrian.data[antrian.tail]);
    }
}

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;
}

void Clear()
{
    antrian.head=antrian.tail=-1;
    printf("Data Clear");
}

void Tampil()
{
    if (IsEmpty()==0)
    {
        for (int i=antrian.head;i<=antrian.tail; i++)
        {
            printf("%d ",antrian.data[i]);
        }
    }
    else
    {
        printf("Data Kosong\n");
    }
}

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

    do
    {
        system("cls");
        printf ("\n MENU PILIHAN PROGRAM QUEUE\n");
        printf ("1. Enqueue\n");
        printf ("2. Dequeue\n");
        printf ("3. Tampil\n");
        printf ("4. Clear\n");
        printf ("5. Keluar\n");
        printf ("Masukkan Pilihan Anda : ");
        scanf("%d",&pil);

        switch(pil)
        {
            case 1:
            printf("Data : ");
            scanf("%d",&data);
            Enqueue(data);
            break;

            case 2:
            printf("Elemen yang keluar : %d", Dequeue());
            break;

            case 3:
            Tampil();
            break;

            case 4:
            Clear();
            break;
            case 5:

            break;
        }
        getch();
    } while(pil!=5);
}
 
Hasil Output:
   
 

Referensi

http://langkahsuku.blogspot.com/2016/02/materi-queue.html
http://sekilaslihat.blogspot.com/2015/06/rangkuman-materi-queue.html 
http://blog-arul.blogspot.com/2012/01/queue-pada-struktur-data.html
https://mas-gado.blogspot.com/2018/01/queue.html

 

0 komentar:

Posting Komentar

Popular Posts

Recent Posts

Pages

Text Widget

Diberdayakan oleh Blogger.

About Me

Milda Hayati
Lihat profil lengkapku

Featured Post

Konfigurasi IP Table/ Firewell

Followers

Author Details

Hey there, We are Blossom Themes! We are trying to provide you the new way to look and use the blogger templates. Our designers are working hard and pushing the boundaries of possibilities to widen the horizon of the regular templates and provide high quality blogger templates to all hardworking bloggers!

Blogger templates

3/recentposts

Blogroll

Pages

Blogger templates

Blogroll

Blogroll

Popular Posts

Popular Posts

Copyright © MILDA HAYATI | Powered By Blogger | Published By Gooyaabi Templates
Design by Carolina Nymark | Blogger Theme by NewBloggerThemes.com