SlideShare a Scribd company logo
1 of 9
Download to read offline
1 
Queue (Antrian) 
Queue / Antrian adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan pada satu ujung (disebut dengan sisi belakang atau tail/rear) dan penghapusan atau pengambilan elemen dilakukan lewat ujung lain (disebut dengan sisi depan atau head/front). 
Antrian menggunakan prinsip Pertama Masuk Pertama Keluar – First In First Out (FIFO). Dengan kata lain urutan masuk sama dengan urutan keluar. Antrian banyak dijumpai dalam kehidupan sehari-hari. Mobil-mobil yang mengantri digerbang tol untuk membeli karcis tol; orang-orang yang mengantri di loket untuk membeli karcis film juga membentuk antrian. 
Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya. DEQUEUE adalah mengeluarkan satu elemen dari suatu antrian. Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya sehingga membutuhkan variabel Head dan Tail. 
1. Deklarasi Antrian dengan array 
Proses pendeklarasi antrian adalah proses pembuatan struktur antrian dalam memori. Struktur antrian terdiri dari data dalam array, head untuk menunjukkan ujung antrian dan tail untuk menunjukkan akhir antrian. 
#define MAX 6 
struct Queue 
{ 
int data[MAX]; 
int head; 
int tail; 
}; 
2. Inisialisasi 
Inisialisasi antrian adalah proses pembuatan suatu antrian kosong. Proses inisialisasi untuk antrian yang menggunakan array adalah dengan mengisi nilai field head dan tail dengan 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau elemen pertama array dimulai dengan 0 maka head dan tail diisi dengan nilai -1. 
void Create() 
{ 
antrian.head=antrian.tail=-1; 
} 
3. Operasi cek kosong 
Operasi ini digunakan untuk memeriksa apakah antrian dalam keadaan kosong. Operasi ini penting dilakukan dalam proses Dequeu. Ketika suatu antrian dalam keadaan kosong, maka proses Dequeue tidak bisa dilakukan. Operasi ini dilakukan dengan memeriksa tail. Jika tail bernilai -1, maka berarti antrian dalam keadaan empty (kosong). 
int IsEmpty() 
{ 
if(antrian.tail==-1) 
return 1;
2 
else 
return 0; 
} 
4. Operasi cek penuh 
Operasi ini berguna untuk memeriksa keadaan antrian apakah sudah penuh atau belum. Operasi ini akan memberikan nilai true (1) jika field tail sama dengan size-1. 
int IsFull() 
{ 
if(antrian.tail==MAX-1) 
return 1; 
else 
return 0; 
} 
5. Operasi Enqueue 
Operasi ini berguna untuk menambah suatu elemen data baru pada antrian dan disimpan pada posisi head dan tail yang akan mengakibatkan posisi tail akan berubah. Langkah operasi ini adalah : 
a. Periksa apakah kosong. Jika kosong maka ubah posisi head dan tail pada posisi 0, kemudian masukkan datanya. 
b. Jika antrian tidak kosong maka naikkan posisi tail sebesar 1, kemudian masukkan datanya. 
void Enqueue(int data) 
{ 
if(IsEmpty()==1) 
{ 
antrian.head=antrian.tail=0; 
antrian.data[antrian.tail]=data; 
cout<<antrian.data[antrian.tail]; 
} 
else 
{ 
antrian.tail++; 
antrian.data[antrian.tail]=data; 
cout<<antrian.data[antrian.tail]; 
} 
} 
6. Operasi Dequeue 
Operasi ini berguna untuk mengambil elemen pertama (head) dari antrian. Penghapusan dilakukan dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. Penggeseran dilakukan dengan menggunakan looping 
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]; 
}
3 
antrian.tail--; 
return e; 
} 
7. Operasi Clear 
Digunakan 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 
void Clear() 
{ 
antrian.head=antrian.tail=-1; 
cout<<"Data Clear"; 
} 
8. Operasi Tampil 
Digunakan untuk menampilkan nilai-nilai elemen antrian. Proses menampilkan data dalam antrian dilakukan dengan menggunakan looping dari head s/d tail 
void Tampil() 
{ 
if (IsEmpty()==0) 
for (int i=antrian.head;i<=antrian.tail; i++) 
cout<<antrian.data[i]<<" "; 
else 
cout<<"Data Kosongn"; 
} 
Program Lengkap: 
#include <stdio.h> 
#include <conio.h> 
#include <iostream.h> 
#define MAX 6 
struct Queue 
{ 
int data[MAX]; 
int head; 
int tail; 
}; 
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; 
}
4 
void Enqueue(int data) 
{ 
if(IsEmpty()==1) 
{ 
antrian.head=antrian.tail=0; 
antrian.data[antrian.tail]=data; 
cout<<antrian.data[antrian.tail]; 
} 
else 
//kodisi lainnya jika penuh() sama dengan 0 maka antrian.ekor ditambah 1 
{ 
antrian.tail++; 
antrian.data[antrian.tail]=data; 
cout<<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; 
cout<<"Data Clear"; 
} 
void Tampil() 
{ 
if (IsEmpty()==0) 
for (int i=antrian.head;i<=antrian.tail; i++) 
cout<<antrian.data[i]<<" "; 
else 
cout<<"Data Kosongn"; 
} 
void main() 
{ 
int pil; 
int data; 
Create(); 
do 
{ 
clrscr(); 
cout<<"n============MENU PILIHAN============n"; 
cout<<"1. Enqueuen"; 
cout<<"2. Dequeuen"; 
cout<<"3. Tampiln"; 
cout<<"4. Clearn"; 
cout<<"5. Keluarn"; 
cout<<"--------------------------------------n"; 
cout<<"Masukkan Pilihan Anda -> "; 
cin>>pil; 
switch(pil) 
{ 
case 1:
5 
cout<<"Data : ";cin>>data; 
Enqueue(data); 
break; 
case 2: 
if (IsEmpty()==0) 
cout<<"Elemen yang keluar : "<<Dequeue(); 
else 
cout<<"Data kosong"<<endl; 
break; 
case 3: 
Tampil(); 
break; 
case 4: 
Clear(); 
break; 
case 5: 
break; 
} 
getch(); 
} while(pil!=5); 
}
6 
Queue dengan Pointer 
Proses penyimpanan elemen queue dalam pointer mirip dengan operasi pada single linked list yang menggunakan penyimpanan tambah akhir dan hapus awal. 
Operasi-operasi yang dapat dilakukan dalam queue yang menggunakan representasi linked list adalah : 
1. Pendeklarasian sebuah queue 
Setiap queue memiliki elemen-elemen (field) berupa posisi depan, posisi belakang, elemen antrian, dan posisi penunjuk ke elemen berikutnya. Berikut ini adalah pendeklarasian queue yang disimpan dengan pointer. 
struct node 
{ 
int info; 
struct node *next; 
}; 
node *head,*tail,*newnode,*ptr; 
2. Inisialisasi Queue 
Proses inisialisasi queue yang disimpan dalam pointer adalah dengan memberikan nilai NULL ke pointer head dan tail yang menandakan bahwa pointer depan dan belakang belum menunjuk ke 1 elemen apapun. 
void inisialisasi() 
{ 
head=NULL; 
tail=NULL; 
} 
3. Fungsi Cek Isi 
Fungsi ini berguna untuk memeriksa apakah suatu queue dalam keadaan isi atau kosong. Fungsi ini berguna ketika proses dequeue yaitu ketika sebuah elemen akan diambil, maka harus diperiksa dulu apakah memiliki data atau tidak. Fungsi ini akan mempunyai nilai benar jika depan atau belakang bernilai NULL. 
Implementasinya dalam bahasa C adalah : 
int cekIsi() 
{ 
if((head==NULL)&&(tail==NULL)) 
{ 
cout<<"nAntrian kosong"; 
return(0); 
} 
else 
{ 
return(1); 
} 
} 
4. Operasi Enqueue 
Proses enqueue adalah dengan menambahkan elemen baru ke posisi paling belakang (sambungkan field berikutnya dari field belakang ke posisi pointer baru). Setelah itu, pointer
7 
penunjuk belakang harus berpindah ke posisi baru tersebut. Proses ini seperti proses penambahan di belakang pada single linked list. 
void enqueue(int item) 
{ 
newnode = new(node); 
newnode->info=item; 
if((head==NULL)&&(tail==NULL)) 
{ 
head=newnode; 
tail=newnode; 
newnode->next=NULL; 
} 
else 
{ 
tail->next=newnode; 
newnode->next=NULL; 
tail=newnode; 
} 
} 
5. Operasi Dequeue 
Proses dequeue adalah dengan mengambil data yang ditunjuk pointer depan dan kemudian pointer yang depan tersebut diambil dan kemudian dihapus. Pointer depan harus berpindah ke elemen antrian berikutnya. Proses tersebut dilakukan hanya jika linked list tidak kosong. Proses ini mirip dengan proses penghapusan data awal pada single linked list. 
Implementasinya dalam bahasa C adalah : 
void dequeue() 
{ 
if(head==tail) 
{ 
head=NULL; 
tail=NULL; 
} 
else 
{ 
head=head->next; 
} 
} 
Program Lengkap: 
#include <stdio.h> 
#include <conio.h> 
#include <process.h> 
#include <iostream.h> 
struct node 
{ 
int info; 
struct node *next; 
}; 
node *head,*tail,*newnode,*ptr; 
void menu(); 
void tampil(); 
int cekIsi(); 
void enqueue(int); 
void dequeue(); 
void inisialisasi()
8 
{ 
head=NULL; 
tail=NULL; 
} 
void main() 
{ 
clrscr(); 
inisialisasi(); 
menu(); 
} 
void menu() 
{ 
int pilih,item; 
cout<<"MENU"; 
cout<<"n1. Tambah"; 
cout<<"n2. Hapus"; 
cout<<"n3. Tampil"; 
cout<<"n4. Keluar"; 
cout<<"nMasukkan pilihan: "; 
cin>>pilih; 
switch(pilih) 
{ 
case 1: 
clrscr(); 
cout<<"nData yang anda masukkan: "; 
cin>>item; 
enqueue(item); 
clrscr(); 
cout<<"nData dalam antrian:n"; 
tampil(); 
getch(); 
clrscr(); 
menu(); 
break; 
case 2: 
clrscr(); 
if(cekIsi()==1) 
{ 
dequeue(); 
if(cekIsi()==1) 
{ 
cout<<"nData dalam antrian:n"; 
tampil(); 
} 
} 
getch(); 
clrscr(); 
menu(); 
break; 
case 3: 
clrscr(); 
if(cekIsi()==1) 
{ 
cout<<"Data dalam antrian:n"; 
tampil(); 
} 
getch(); 
clrscr(); 
menu(); 
break; 
case 4: 
exit(1); 
default: 
clrscr(); 
cout<<"Pilihanmu salahnn"; 
menu(); 
} 
}
9 
int cekIsi() 
{ 
if((head==NULL)&&(tail==NULL)) 
{ 
cout<<"nAntrian kosong"; 
return(0); 
} 
else 
{ 
return(1); 
} 
} 
void enqueue(int item) 
{ 
newnode = new(node); 
newnode->info=item; 
if((head==NULL)&&(tail==NULL)) 
{ 
head=newnode; 
tail=newnode; 
newnode->next=NULL; 
} 
else 
{ 
tail->next=newnode; 
newnode->next=NULL; 
tail=newnode; 
} 
} 
void dequeue() 
{ 
if(head==tail) 
{ 
head=NULL; 
tail=NULL; 
} 
else 
{ 
head=head->next; 
} 
} 
void tampil() 
{ 
int i; 
ptr=head; 
i=1; 
while(ptr!=NULL) 
{ 
cout<<"nSimpul "<<i<<" : "<<ptr->info; 
ptr=ptr->next; 
i++; 
} 
}

More Related Content

What's hot

Algoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - AntrianAlgoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - AntrianKuliahKita
 
Struktur data pertemuan 11
Struktur data pertemuan 11Struktur data pertemuan 11
Struktur data pertemuan 11ajonona
 
Bab 8-stack-dan-queue
Bab 8-stack-dan-queueBab 8-stack-dan-queue
Bab 8-stack-dan-queueRazik Akamal
 
Materi Struktur data QUEUE
Materi Struktur data QUEUEMateri Struktur data QUEUE
Materi Struktur data QUEUEMeta N
 
Implementasi queue
Implementasi queueImplementasi queue
Implementasi queueRhe Dwi Yuni
 
Laporan praktikum modul vii
Laporan praktikum modul viiLaporan praktikum modul vii
Laporan praktikum modul viiDevi Apriansyah
 
Function
FunctionFunction
Functionwindi1
 
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman TerstrukturKelinci Coklat
 
3. Pointer dan List Berkait Singly
3. Pointer dan List Berkait Singly3. Pointer dan List Berkait Singly
3. Pointer dan List Berkait SinglyKelinci Coklat
 
Pertemuan vi (Function Java)
Pertemuan vi (Function Java)Pertemuan vi (Function Java)
Pertemuan vi (Function Java)Putra Andry
 
Algoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukanAlgoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukanGeorgius Rinaldo
 
Aray dan recrd
Aray dan recrdAray dan recrd
Aray dan recrd555560
 
2. Array of Record (Struktur Data)
2. Array of Record (Struktur Data)2. Array of Record (Struktur Data)
2. Array of Record (Struktur Data)Kelinci Coklat
 

What's hot (19)

Algoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - AntrianAlgoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - Antrian
 
Struktur data pertemuan 11
Struktur data pertemuan 11Struktur data pertemuan 11
Struktur data pertemuan 11
 
Bab 8-stack-dan-queue
Bab 8-stack-dan-queueBab 8-stack-dan-queue
Bab 8-stack-dan-queue
 
queue antrian
queue antrianqueue antrian
queue antrian
 
Materi Struktur data QUEUE
Materi Struktur data QUEUEMateri Struktur data QUEUE
Materi Struktur data QUEUE
 
Implementasi queue
Implementasi queueImplementasi queue
Implementasi queue
 
Laporan praktikum modul vii
Laporan praktikum modul viiLaporan praktikum modul vii
Laporan praktikum modul vii
 
Pertemuan II Function
Pertemuan II FunctionPertemuan II Function
Pertemuan II Function
 
Function
FunctionFunction
Function
 
Function
FunctionFunction
Function
 
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
 
3. Pointer dan List Berkait Singly
3. Pointer dan List Berkait Singly3. Pointer dan List Berkait Singly
3. Pointer dan List Berkait Singly
 
Pertemuan vi (Function Java)
Pertemuan vi (Function Java)Pertemuan vi (Function Java)
Pertemuan vi (Function Java)
 
Algoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukanAlgoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukan
 
5 STACK
5 STACK5 STACK
5 STACK
 
Aray dan recrd
Aray dan recrdAray dan recrd
Aray dan recrd
 
4 queue2
4 queue24 queue2
4 queue2
 
2. Array of Record (Struktur Data)
2. Array of Record (Struktur Data)2. Array of Record (Struktur Data)
2. Array of Record (Struktur Data)
 
Chapter 4b queue
Chapter 4b   queueChapter 4b   queue
Chapter 4b queue
 

Similar to Antrian FIFO

Algoritma dan Struktur Data - Queue
Algoritma dan Struktur Data - QueueAlgoritma dan Struktur Data - Queue
Algoritma dan Struktur Data - QueueKuliahKita
 
7. Queue (Struktur Data)
7. Queue (Struktur Data)7. Queue (Struktur Data)
7. Queue (Struktur Data)Kelinci Coklat
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data StructuresNoval C. Kesuma
 
Tugas kelompok 3
Tugas kelompok 3Tugas kelompok 3
Tugas kelompok 3yusriren
 
FIFO (First In First Out)
FIFO (First In First Out)FIFO (First In First Out)
FIFO (First In First Out)Yosua Herbi
 
Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3azmi007
 
Laporan praktikum modul viii
Laporan praktikum modul viiiLaporan praktikum modul viii
Laporan praktikum modul viiiDevi Apriansyah
 
Chapter 4 stack and queue
Chapter 4   stack and queueChapter 4   stack and queue
Chapter 4 stack and queueMuhammad Najib
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sortYunan Helmi Nasution
 
Antrean (queue).pptx
Antrean (queue).pptxAntrean (queue).pptx
Antrean (queue).pptxmisariska1
 
Tugas3
Tugas3Tugas3
Tugas3Av Ri
 

Similar to Antrian FIFO (20)

Queue antrian
Queue antrian Queue antrian
Queue antrian
 
Algoritma dan Struktur Data - Queue
Algoritma dan Struktur Data - QueueAlgoritma dan Struktur Data - Queue
Algoritma dan Struktur Data - Queue
 
7. Queue (Struktur Data)
7. Queue (Struktur Data)7. Queue (Struktur Data)
7. Queue (Struktur Data)
 
Queue
Queue Queue
Queue
 
Struktur data
Struktur dataStruktur data
Struktur data
 
Kelompok 3
Kelompok 3Kelompok 3
Kelompok 3
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
 
Tugas kelompok 3
Tugas kelompok 3Tugas kelompok 3
Tugas kelompok 3
 
30707_SD6-Queue (Antrian).pdf
30707_SD6-Queue (Antrian).pdf30707_SD6-Queue (Antrian).pdf
30707_SD6-Queue (Antrian).pdf
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
Queue
QueueQueue
Queue
 
Pertemuan 6 revisijan2013-mhs
Pertemuan 6 revisijan2013-mhsPertemuan 6 revisijan2013-mhs
Pertemuan 6 revisijan2013-mhs
 
FIFO (First In First Out)
FIFO (First In First Out)FIFO (First In First Out)
FIFO (First In First Out)
 
Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3
 
Laporan praktikum modul viii
Laporan praktikum modul viiiLaporan praktikum modul viii
Laporan praktikum modul viii
 
Chapter 4 stack and queue
Chapter 4   stack and queueChapter 4   stack and queue
Chapter 4 stack and queue
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
 
Antrean (queue).pptx
Antrean (queue).pptxAntrean (queue).pptx
Antrean (queue).pptx
 
Tugas3
Tugas3Tugas3
Tugas3
 

Antrian FIFO

  • 1. 1 Queue (Antrian) Queue / Antrian adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan pada satu ujung (disebut dengan sisi belakang atau tail/rear) dan penghapusan atau pengambilan elemen dilakukan lewat ujung lain (disebut dengan sisi depan atau head/front). Antrian menggunakan prinsip Pertama Masuk Pertama Keluar – First In First Out (FIFO). Dengan kata lain urutan masuk sama dengan urutan keluar. Antrian banyak dijumpai dalam kehidupan sehari-hari. Mobil-mobil yang mengantri digerbang tol untuk membeli karcis tol; orang-orang yang mengantri di loket untuk membeli karcis film juga membentuk antrian. Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya. DEQUEUE adalah mengeluarkan satu elemen dari suatu antrian. Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya sehingga membutuhkan variabel Head dan Tail. 1. Deklarasi Antrian dengan array Proses pendeklarasi antrian adalah proses pembuatan struktur antrian dalam memori. Struktur antrian terdiri dari data dalam array, head untuk menunjukkan ujung antrian dan tail untuk menunjukkan akhir antrian. #define MAX 6 struct Queue { int data[MAX]; int head; int tail; }; 2. Inisialisasi Inisialisasi antrian adalah proses pembuatan suatu antrian kosong. Proses inisialisasi untuk antrian yang menggunakan array adalah dengan mengisi nilai field head dan tail dengan 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau elemen pertama array dimulai dengan 0 maka head dan tail diisi dengan nilai -1. void Create() { antrian.head=antrian.tail=-1; } 3. Operasi cek kosong Operasi ini digunakan untuk memeriksa apakah antrian dalam keadaan kosong. Operasi ini penting dilakukan dalam proses Dequeu. Ketika suatu antrian dalam keadaan kosong, maka proses Dequeue tidak bisa dilakukan. Operasi ini dilakukan dengan memeriksa tail. Jika tail bernilai -1, maka berarti antrian dalam keadaan empty (kosong). int IsEmpty() { if(antrian.tail==-1) return 1;
  • 2. 2 else return 0; } 4. Operasi cek penuh Operasi ini berguna untuk memeriksa keadaan antrian apakah sudah penuh atau belum. Operasi ini akan memberikan nilai true (1) jika field tail sama dengan size-1. int IsFull() { if(antrian.tail==MAX-1) return 1; else return 0; } 5. Operasi Enqueue Operasi ini berguna untuk menambah suatu elemen data baru pada antrian dan disimpan pada posisi head dan tail yang akan mengakibatkan posisi tail akan berubah. Langkah operasi ini adalah : a. Periksa apakah kosong. Jika kosong maka ubah posisi head dan tail pada posisi 0, kemudian masukkan datanya. b. Jika antrian tidak kosong maka naikkan posisi tail sebesar 1, kemudian masukkan datanya. void Enqueue(int data) { if(IsEmpty()==1) { antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; cout<<antrian.data[antrian.tail]; } else { antrian.tail++; antrian.data[antrian.tail]=data; cout<<antrian.data[antrian.tail]; } } 6. Operasi Dequeue Operasi ini berguna untuk mengambil elemen pertama (head) dari antrian. Penghapusan dilakukan dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. Penggeseran dilakukan dengan menggunakan looping 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]; }
  • 3. 3 antrian.tail--; return e; } 7. Operasi Clear Digunakan 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 void Clear() { antrian.head=antrian.tail=-1; cout<<"Data Clear"; } 8. Operasi Tampil Digunakan untuk menampilkan nilai-nilai elemen antrian. Proses menampilkan data dalam antrian dilakukan dengan menggunakan looping dari head s/d tail void Tampil() { if (IsEmpty()==0) for (int i=antrian.head;i<=antrian.tail; i++) cout<<antrian.data[i]<<" "; else cout<<"Data Kosongn"; } Program Lengkap: #include <stdio.h> #include <conio.h> #include <iostream.h> #define MAX 6 struct Queue { int data[MAX]; int head; int tail; }; 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; }
  • 4. 4 void Enqueue(int data) { if(IsEmpty()==1) { antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; cout<<antrian.data[antrian.tail]; } else //kodisi lainnya jika penuh() sama dengan 0 maka antrian.ekor ditambah 1 { antrian.tail++; antrian.data[antrian.tail]=data; cout<<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; cout<<"Data Clear"; } void Tampil() { if (IsEmpty()==0) for (int i=antrian.head;i<=antrian.tail; i++) cout<<antrian.data[i]<<" "; else cout<<"Data Kosongn"; } void main() { int pil; int data; Create(); do { clrscr(); cout<<"n============MENU PILIHAN============n"; cout<<"1. Enqueuen"; cout<<"2. Dequeuen"; cout<<"3. Tampiln"; cout<<"4. Clearn"; cout<<"5. Keluarn"; cout<<"--------------------------------------n"; cout<<"Masukkan Pilihan Anda -> "; cin>>pil; switch(pil) { case 1:
  • 5. 5 cout<<"Data : ";cin>>data; Enqueue(data); break; case 2: if (IsEmpty()==0) cout<<"Elemen yang keluar : "<<Dequeue(); else cout<<"Data kosong"<<endl; break; case 3: Tampil(); break; case 4: Clear(); break; case 5: break; } getch(); } while(pil!=5); }
  • 6. 6 Queue dengan Pointer Proses penyimpanan elemen queue dalam pointer mirip dengan operasi pada single linked list yang menggunakan penyimpanan tambah akhir dan hapus awal. Operasi-operasi yang dapat dilakukan dalam queue yang menggunakan representasi linked list adalah : 1. Pendeklarasian sebuah queue Setiap queue memiliki elemen-elemen (field) berupa posisi depan, posisi belakang, elemen antrian, dan posisi penunjuk ke elemen berikutnya. Berikut ini adalah pendeklarasian queue yang disimpan dengan pointer. struct node { int info; struct node *next; }; node *head,*tail,*newnode,*ptr; 2. Inisialisasi Queue Proses inisialisasi queue yang disimpan dalam pointer adalah dengan memberikan nilai NULL ke pointer head dan tail yang menandakan bahwa pointer depan dan belakang belum menunjuk ke 1 elemen apapun. void inisialisasi() { head=NULL; tail=NULL; } 3. Fungsi Cek Isi Fungsi ini berguna untuk memeriksa apakah suatu queue dalam keadaan isi atau kosong. Fungsi ini berguna ketika proses dequeue yaitu ketika sebuah elemen akan diambil, maka harus diperiksa dulu apakah memiliki data atau tidak. Fungsi ini akan mempunyai nilai benar jika depan atau belakang bernilai NULL. Implementasinya dalam bahasa C adalah : int cekIsi() { if((head==NULL)&&(tail==NULL)) { cout<<"nAntrian kosong"; return(0); } else { return(1); } } 4. Operasi Enqueue Proses enqueue adalah dengan menambahkan elemen baru ke posisi paling belakang (sambungkan field berikutnya dari field belakang ke posisi pointer baru). Setelah itu, pointer
  • 7. 7 penunjuk belakang harus berpindah ke posisi baru tersebut. Proses ini seperti proses penambahan di belakang pada single linked list. void enqueue(int item) { newnode = new(node); newnode->info=item; if((head==NULL)&&(tail==NULL)) { head=newnode; tail=newnode; newnode->next=NULL; } else { tail->next=newnode; newnode->next=NULL; tail=newnode; } } 5. Operasi Dequeue Proses dequeue adalah dengan mengambil data yang ditunjuk pointer depan dan kemudian pointer yang depan tersebut diambil dan kemudian dihapus. Pointer depan harus berpindah ke elemen antrian berikutnya. Proses tersebut dilakukan hanya jika linked list tidak kosong. Proses ini mirip dengan proses penghapusan data awal pada single linked list. Implementasinya dalam bahasa C adalah : void dequeue() { if(head==tail) { head=NULL; tail=NULL; } else { head=head->next; } } Program Lengkap: #include <stdio.h> #include <conio.h> #include <process.h> #include <iostream.h> struct node { int info; struct node *next; }; node *head,*tail,*newnode,*ptr; void menu(); void tampil(); int cekIsi(); void enqueue(int); void dequeue(); void inisialisasi()
  • 8. 8 { head=NULL; tail=NULL; } void main() { clrscr(); inisialisasi(); menu(); } void menu() { int pilih,item; cout<<"MENU"; cout<<"n1. Tambah"; cout<<"n2. Hapus"; cout<<"n3. Tampil"; cout<<"n4. Keluar"; cout<<"nMasukkan pilihan: "; cin>>pilih; switch(pilih) { case 1: clrscr(); cout<<"nData yang anda masukkan: "; cin>>item; enqueue(item); clrscr(); cout<<"nData dalam antrian:n"; tampil(); getch(); clrscr(); menu(); break; case 2: clrscr(); if(cekIsi()==1) { dequeue(); if(cekIsi()==1) { cout<<"nData dalam antrian:n"; tampil(); } } getch(); clrscr(); menu(); break; case 3: clrscr(); if(cekIsi()==1) { cout<<"Data dalam antrian:n"; tampil(); } getch(); clrscr(); menu(); break; case 4: exit(1); default: clrscr(); cout<<"Pilihanmu salahnn"; menu(); } }
  • 9. 9 int cekIsi() { if((head==NULL)&&(tail==NULL)) { cout<<"nAntrian kosong"; return(0); } else { return(1); } } void enqueue(int item) { newnode = new(node); newnode->info=item; if((head==NULL)&&(tail==NULL)) { head=newnode; tail=newnode; newnode->next=NULL; } else { tail->next=newnode; newnode->next=NULL; tail=newnode; } } void dequeue() { if(head==tail) { head=NULL; tail=NULL; } else { head=head->next; } } void tampil() { int i; ptr=head; i=1; while(ptr!=NULL) { cout<<"nSimpul "<<i<<" : "<<ptr->info; ptr=ptr->next; i++; } }