Selasa, 16 September 2008

Struktur Data (Queue)


Sama seperti Stak namun operasinya ada ada di depan, sedangkan di belakang/ekor/tail sebagai pintu masuk antrian, Struktur Data Antrean (Queue) merupakan suatu bentuk khusus dari List Linier  dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi, yang disebut sisi Belakang / ekor (Tail) dan operasi penghapusan hanya diperbolehkan pada sisi lainnya yang disebut sisi Depan / kepala (Head) dari LinkedList. 
 
seperti halnya kita saat mengantri disebuah loket, orang yang pertamakali datang dialah yang pertamakali dilayani.




CREATE
  Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail  = -1
ISEMPTY
  Untuk memeriksa apakah queue kosong
ISFULL
  Untuk memeriksa apakah queue sudah penuh
ENQUEUE
  Untuk menambahkan item pada posisi paling belakang
DEQUEUE
  Untuk menghapus item dari posisi paling depan
CLEAR
  Untuk mengosongkan queue


    #include
#include
#include
#define MAX 6

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)
{
if(isempty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
printf("%d, Sudah Masuk!",antrian.data[antrian.tail]);

void tampil();
{
int i;
if (isempty()==0)
{
 for(i=antrian.head;i<=antrian.tail;i++)
 {
  printf(" %d ",antrian.data[i]);
  }
}
else
 printf("\n**** QUEUE IS EMPTY ****\n");
}
}
else
if(isfull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
printf("%d , Sudah Masuk!",antrian.data[antrian.tail]);
}
  else{
  if(isfull()==1)
  {
  cout<<"\n\n**** QUEUE IS FULL , data TIDAK dapat masuk ****";
  }
  }
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}


int dequeue()
{
if (isempty()==1){
cout<<"\n**** ERROR :: QUEUE IS EMPTY ****";
}else
if(isempty()==0){
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--;
cout<<"\n\nData Yang Keluar => "<}
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}

void clear()
{
antrian.head=antrian.tail=-1;
printf("\n\n**** DATA CLEAR ****");
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}

void tampil()
{
int i;
if(isempty()==0)
{
cout<<"Data Yang ada Dalam QUEUE : "<for(i=antrian.head;i<=antrian.tail;i++)
{
printf("| %d |",antrian.data[i]);
}
}
else
{
printf("\n**** QUEUE IS EMPTY ****\n");
}
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}

void main()
{
int pil;
int data;
create();
do
{
clrscr();
gotoxy(25,2);cout<<"========MENU PILIHAN========"<gotoxy(25,4);cout<<"============================"<gotoxy(30,6);cout<<" 1. ENQUEUE "<gotoxy(30,7);cout<<" 2. DEQUEUE "<gotoxy(30,8);cout<<" 3. TAMPILAN "<gotoxy(30,9);cout<<" 4. CLEAR "<gotoxy(30,10);cout<<" 5. KELUAR "<gotoxy(25,12);cout<<"============================"<gotoxy(25,14);cout<<" Masukan Pilihan Anda => ";cin>>pil;

switch(pil){
case 1:
clrscr();
printf("\n\n Masukan Data => "); scanf("%d",&data);
enqueue(data);
break;

case 2:
clrscr();
dequeue();
break;

case 3:
clrscr();
cout<tampil();
break;

case 4:
clrscr();
clear();
break;

case 5:
clrscr();
gotoxy(25,8);cout<<"**** TERIMA KASIH ****"<break;
}
getch();
} while(pil!=5);
}