[C++] Konsep Queue
By
Unknown
—
Rabu, 07 Mei 2014
—
Struktur Data
[C++] - Contoh Program Queue |
Pada struktur data Queue atau antrian adalah sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisi belakang (rear), dan penghapusan (pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front).
Pada Stack atau tumpukan menggunakan prinsip “Masuk terakhir keluar
pertama”atau LIFO (Last In First Out),
Maka pada Queue atau antrian prinsip
yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out).
Queue atau antrian banyak kita jumpai dalam kehidupan
sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll.
Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi
waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan
menggunakan sistem tersebut secara serempak.
Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu
ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel
Head dan Tail (depan/front, belakang/rear).
Operasi-operasi Queue :
1. Create()
Untuk
menciptakan dan menginisialisasi Queue
2. IsEmpty()
Untuk memeriksa
apakah Antrian masih kosong
3. IsFull()
Untuk mengecek
apakah Antrian sudah penuh atau belum
4. Enqueue
()
Untuk
menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di
elemen paling belakang
5. Dequeue()
Digunakan untuk
menghapus elemen terdepan/pertama (head) dari Antrian
6. Clear()
Untuk menghapus
elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
7. Tampil()
Untuk
menampilkan nilai-nilai elemen Antrian
Syntax Program :
//header file
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <string.h>
# define QSIZE 5
//deklarasi
struct
typedef struct
{
int count;
int
head,tail;
char
names[QSIZE][30];
}QUEUE; //nama struct
//deklarasikan prototype fungsi
char *enqueue(char *);
char *dequeue();
void tampil();
void
inisialisasi();
//deklarasi Node
QUEUE *pq;
//fungsi main
int main()
{
//deklarasi variabel
int pil;
char str[30];
QUEUE q;
pq=&q;
inisialisasi(); //panggil fungsi
inisialisasi
do{
system("cls");
//bersihkan layar
printf("\tMENU PILIHAN :
");
printf("\n\t______________");
printf("\n[1] Input
Data");
printf("\n[2] Delete
Data");
printf("\n[3] Show data
in queue");
printf("\n[4]
Exit\n");
printf("\nPilihan anda :
");
scanf("%d",&pil);
switch(pil){
case 1:
printf("\nSilahkan
memasukkan sebuah kata : ");
fflush(stdin); //menghapus
buffer data
gets(str);
puts(enqueue(str)); /*Mencetak string hasil penambahan data yang dilakukan oleh
fungsi enqueue()*/
break;
case 2:
puts(dequeue()); /*Mencetak string terhapus yang dilakukan oleh fungsi
enqueue()*/
break;
case 3:
tampil(); //panggil
fungsi tampil()
break;
case 4: exit(0);
default: printf("\nMasukkan anda salah!!");
}
printf("\nPress Any Key
to continue...");
fflush(stdin); //membersihkan
buffer data
while(!kbhit());
}
while(1); //perulanagan dijalankan terus
//return 0;
}
//fungsi untuk
inisialisasi awal
void
inisialisasi()
{
pq->head = pq->tail = pq->count= 0;
}
//fungsi untuk
menambah data string dalam queue
char* enqueue(char *p)
{
if(pq->count==QSIZE)
return "\n\n\t\t Error: Antrian penuh";
pq->tail= (pq->tail)%QSIZE;
strcpy(pq->names[(pq->tail)++],p);
pq->count++;
return "Data
telah berhasil dimasukkan";
}
//fungsi untuk
menghapus data string dalam queue
char* dequeue()
{
if(pq->count==0)
return "\n\n\t\t Error: Antrian kosong";
pq->head= (pq->head)%QSIZE;
pq->count--;
printf("\nData yang telah
dihapus adalah\n:");
return
pq->names[(pq->head)++];
}
//fungsi untuk
menampilkan data yang berada dalam antrian
void tampil()
{
int i=pq->head;
int x=0;
if(pq->count==0)
printf("Antrian
kosong\n");
else
{
while(x<pq->count)
{
if(i==QSIZE)
i%=QSIZE;
printf(":%s\n",pq->names[i]);
i++;
x++;
}
}
}
Penjelasan dan algoritma :
1) Pada awalnya dibuat sebuah struct bernama QUEUE dan
dibuat beberapa fungsi yang difunakan untuk pemrosesan data, serta juga
dideklerasikan sebuah node.
2) Masuk fungsi main, deklarasikan variabel
int
pil;
char
str[30];
QUEUE
q;
pq=&q;
inisialisasi(); //panggil fungsi
inisialisasi
Kemudian
panggil fungsi inisialisasi,
Fungsi
Inisialisasi :
void inisialisasi()
{
pq->head = pq->tail =
pq->count= 0;
}
Saat
fungsi dipanggil maka fungsi akan memberikan nilai awal 0 pada variabel pq->head,
pq->tail, pq->count;
3) Masuk
menu perulangan, tampilkan menu pilihan dan minta user menginput pilihan yang
diiinginkan.
- Jika
input user == 1
Maka
semua pernyataan yang berada di dalam case ke 1 akan dijalankan,
printf("\nSilahkan memasukkan
sebuah kata : ");
fflush(stdin);//menghapus
buffer data
gets(str);
puts(enqueue(str)); /*Mencetak string
hasil penambahan data yang dilakukan oleh fungsi enqueue()*/
break;
User diminta untuk menginputkan suatu
string, string yang diinput user disimpan dalam variabel str melalui fungsi
gets(get string).
Setelah string selesai
dimasukkan. Kemudian program akan memanggil fungsi enqueue(str) dan kemudian mencetak nilaibalik
yang berada dalam fungsi tersebut.
Fungsi
enqueue(str) :
char* enqueue(char *p)
{
if(pq->count==QSIZE)
return "\n\n\t\t Error: Antrian
penuh";
pq->tail= (pq->tail)%QSIZE;
strcpy(pq->names[(pq->tail)++],p);
pq->count++;
return "Data telah berhasil dimasukkan";
}
Fungsi
ini digunakan untuk menambahkan data baru pada suatu antrian.
-
Lakukan pengecekan
kondisi, bandingkan nilai pq->count dengan QSIZE è (0==5)?, kondisi tidak terpenuhi baikan pernyataan yang berada
di dalam operasi kondisi if.
-
Lakukan proses
inisialisasi terhadap pq->tail
pq->tail = 0%5;
= 0;
-
strcpy(pq->names[(pq->tail)++],p);
Untuk mengcopy string yang diinputkan pada suatu array
untuk penyimpanan yaitu pq-> names[1].
-
Setelah proses
penyimpanan data selesai, increment nilai pq->count++, kemudian jalankan
fungsi return, Tampilkan hasil pemanggilan fungsi return ke layar “Data telah
berhasil dimasukkan”.
- Jika
input user == 2
Maka
semua pernytaan yang berada di dalam case ke 2 akan dijalankan,
puts(dequeue()); /*Mencetak string terhapus yang ilakukan
oleh fungsi enqueue()*/
break;
Program
akan memanggil fungsi dequeue() kemudian akan mencetak nilai baliknya ke layar.
Fungsi
dequeue ():
char* dequeue()
{
if(pq->count==0)
return "\n\n\t\t
Error: Antrian kosong";
pq->head=
(pq->head)%QSIZE;
pq->count--;
printf("\nData yang
telah dihapus adalah\n:");
return
pq->names[(pq->head)++];
}
- Fungsi
ini digunakan untuk menghapus data yang pertama kali dimasukkan. Sebelum
melakukan proses penghapusan akan dilakukan pengecekan pq->count==0
è (1==0), kondisi
salah maka pernyataan yang berada di dalam operasi kondisi if diabaikan dan
langsung mengeksekusi pernyataan lain yang berada di luar operasi kondisi.
- Lakukan
proses inisialisasi terhadap pq->head
pq->head
= 0%5;
= 0;
- Decrement
nilai pq->count--;. Sekarang
nilai yang awalnya 1 menjadi 0
- Tampilkan
String ke layar "Data yang telah dihapus adalah”.
Kemudian
jalankan fungsi return, fungsi return akan memberikan nilai balik berupa data
yang berada pada array
pq->names[(pq->head)++];
pq->names[1];
Fungsi return akan
menampilkan nilai balik berupa data yang berada di dalam index pertama, yaitu
data yang kita inputkan diawal melalui fungsi enqueue() yang dijalankan saat
user menginputkan nilai 1 pada saat ditampilkan menu pilihan.
- Jika input user ==3
- Jika input user ==4
- Jika input user!={1,2,3,4}
4) Setelah pernytaan case dijalankan, program akan melakukan pengulangan terus-menerus, karena kondisi while disetel selalu bernilai benar. Kecuali jika input user adalah 4.
- Jika input user ==3
Maka semua pernyataan yang berada pada case ke 3 akan dijalankan,
tampil(); //panggil fungsi tampil()
break;
Program akan memanggil fungsi tampil (),
Fungsi tampil() :
void tampil()
{
int i=pq->head;
int x=0;
if(pq->count==0)
printf("Antrian kosong\n");
else
{
while(x<pq->count)
{
if(i==QSIZE)
i%=QSIZE;
printf(":%s\n",pq->names[i]);
i++;
x++;
}
}
}
- Awalnya akan dilakukan proses pemberian nilai pada variabel yang telah dideklarasiakan,
int i=pq->head; è i = 0
x = 0;
- Jalankan Operasi kondisi, cek apakah pq->count==0 è 0==0, kondisi benar, berarti tidak ada data yang sedang berada di dalam queue/antrian. Jadi akan dicetak string ke layar “Antrian kosong”.
Seandainya kondisi pertama salah, maka kondisi kedua akan dijalankan. Masuk ke pernyatan while ulang terus selama kondisi x<pq->count . Jika benar maka pernyataan yang berada di dalam while akan diulang
- Masuk dalam pernyataan while, lakuakn pengecekan kondisi i==QSIZE, jika benar maka decrement nilai variabel i menjadi sisa pembagian i dengan QSIZE. Jika kondisi salah maka cetak ke layar semua string yang telah tersimpan dalam indek array pq->names[].
- Selanjutnya lakukan increment pada variabel i dan x.
- Maka semua pernyatan yang berada dalam case ke 4 akan dijalankan,
exit(0);
Pernyataan exit(0) digunakan untuk keluar dari program. Jika user memilih menu ke 4 maka akan keluar dari program.
exit(0);
Pernyataan exit(0) digunakan untuk keluar dari program. Jika user memilih menu ke 4 maka akan keluar dari program.
- Maka default dan pernytaan yang didalamnya akan dijalankan,
printf("\nMasukkan anda salah!!");
Jika input yang kita masukkan salah makaprogram akan menampilkan string “Masukan Anda salah”.
printf("\nMasukkan anda salah!!");
Jika input yang kita masukkan salah makaprogram akan menampilkan string “Masukan Anda salah”.
Output :
Input data (Rachmat, Santoso, nblognlife)
MENU PILIHAN :
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda : 1
Silahkan memasukkan sebuah kata : Rachmat
Data telah berhasil dimasukkan
Press Any Key to continue...
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda : 1
Silahkan memasukkan sebuah kata : Rachmat
Data telah berhasil dimasukkan
Press Any Key to continue...
MENU PILIHAN :
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
1
Silahkan memasukkan sebuah kata : Santoso
Data telah berhasil dimasukkan
Press Any Key to continue...
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
1
Silahkan memasukkan sebuah kata : Santoso
Data telah berhasil dimasukkan
Press Any Key to continue...
MENU PILIHAN :
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
1
Silahkan memasukkan sebuah kata : nblognlife
Data telah berhasil dimasukkan
Press Any Key to continue...
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
1
Silahkan memasukkan sebuah kata : nblognlife
Data telah berhasil dimasukkan
Press Any Key to continue...
Delete data
MENU PILIHAN :
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
2
Data yang telah dihapus adalah
:Rachmat
Press Any Key to continue...
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
2
Data yang telah dihapus adalah
:Rachmat
Press Any Key to continue...
Show data
MENU PILIHAN :
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
3
:Santoso
:nblognlife
Press Any Key to continue...
______________
[1] Input Data
[2] Delete Data
[3] Show data in queue
[4] Exit
Pilihan anda :
3
:Santoso
:nblognlife
Press Any Key to continue...
[RS]
Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?
Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).
Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.
Terima kasih