CIRCULAR QUEUE
PERTEMUAN 07
MATA KULIAH : STRUKTUR DATA
CIRCULAR QUEUE
Cicular Queue
I. Representasi
Misal n= 10
atau,
Counter : Jumlah pengantri yang ada dalam antrian
Pendefinisian :
F tidak selalu <= R
Setelah R dan F sampai ke n-1, maka tidak direset tetapi melingkar ke 0.
II. Prinsip : FIFO(First In First Out)
III. Proses :
- AWAL (Inisialisasi)
- INSERT (Sisip, Masuk, Simpan, Tulis)
- DELETE (Hapus, Keluar, Ambil, Dilayani)
a) Fungsi dasar untuk proses AWAL :
b) Fungsi dasar proses INSERT :
c) Fungsi dasar proses DELETE :
IV. Kondisi antrian (n : jml elemen array).
Beberapa kondisi antrian al :
1. Kondisi awal
a. F = 0, R = -1, COUNTER = 0 kondisi awal
b. COUNTER = 0 : Antrian kosong
2. Misal masuk 1 pengantri, belum ada yang keluar
a. COUNTER > 0 ada isinya
b. F = R isinya hanya 1
c. Counter < n masih bisa diisi
3. Misal masuk lagi 3 pengantri, belum ada yang keluar
a. COUNTER > 0 ada isinya
b. F <> R + 1 ada isinya
c. COUNTER < n masih bisa diisi
4. Misal keluar 1 pengantri
a. COUNTER > 0 ada isinya
b. F <> R + 1 ada isinya
c. COUNTER < n bisa diisi
5. Misal masuk lagi 3 pengantri
a. COUNTER > 0 ada isinya
b. F <> R + 1 ada isinya
c. COUNTER < n bisa diisi
6. Misal keluar 2 pengantri
a. COUNTER > 0 ada isinya
b. R <> R + 1 ada isinya
c. COUNTER < n bisa diisi
7. Misal keluar lagi 3 pengantri
a. COUNTER > 0 ada isinya
b. F = R hanya 1 pengantri
c. COUNTER < n bisa diisi
8. Misal keluar lagi 1 pengantri
a. COUNTER = 0 antrian kosong
b. COUNTER < n bisa diisi
9. Misalkan masuk lagi 3 pengantri
a. COUNTER > 0 ada isinya
b. COUNTER < n bisa diisi
10. Misal masuk lagi 4 pengantri
a. COUNTER > 0 ada isinya
b. COUNTER < n bisa diisi
11. Misal masuk lagi 2 pengantri
a) COUNTER >0 ada isinya
b) F <> R + 1 ada isinya
c) COUNTER < n bisa diisi
12. Misal masuk lagi 1 pengantri
a) COUNTER > 0 ada isinya
b) COUNTER = n antrian penuh
Kondisi antrian:
V. Fungsi INSERT dan DELETE lengkap
Soal
1. Buatlah suatu program Animasi Antrian Melingkar dengan 4 buah pilihan : INSERT, DELETE, CETAK ANTRIAN, QUIT.
Jika dipilih INSERT : program akan meminta user untuk menginput sebuah karakter yang akan dimasukan kedalam antrian
Jika dipilih DELETE : maka karakter pertama masuk akan dikeluarkan dari antrian
Jika dipilih CETAK ANTRIAN : komputer menampilkan karakter yang ada pada antrian
Jika dipilih QUIT : program keluar
Jawab :
#include<iostream>
#include<cstdlib>
#include<conio.h>
#define n 3
void INSERT(void);
void DELETE(void);
void CETAKLAYAR(void);
void inisialisasi(void);
int PIL,F,R,COUNTER;
char PILIHAN[1],HURUF;
char Q[n];
using namespace std;
int main()
{
inisialisasi();
do
{
cout<<" CIRCULAR QUEUE "<<endl;
cout<<"_____________________________________________________________________"<<endl;
cout<<" PROGRAM ANIMASI QUEUE "<<endl;
cout<<"====================================================================="<<endl;
cout<<" 1.INSERT "<<endl;
cout<<" 2.DELETE "<<endl;
cout<<" 3.CETAK ANTRIAN "<<endl;
cout<<" 4.KELUAR "<<endl;
cout<<" * CATATAN : BATAS INPUT = 3 HURUF "<<endl;
cout<<"_____________________________________________________________________"<<endl;
cout<<endl;
cout<<" SILAHKAN MASUKKAN PILIHAN : ";cin>>PILIHAN;
PIL=atoi(PILIHAN);
switch(PIL)
{
case 1:
INSERT();
break;
case 2:
DELETE();
break;
case 3:
CETAKLAYAR();
break;
default :
cout<<"TERIMA KASIH"<<endl;
break;
}
cout<<"Press any key to continue"<<endl;
getch();
system("cls");
}
while (PIL<4);
return 0;
}
void INSERT(void)
{
if(COUNTER<n)
{
cout<<endl<<"Masukkan 1 huruf : ";
cin>>HURUF;
R = (R + 1) % n;
Q[R] = HURUF;
COUNTER++;
}
else
cout<<"Antrian Penuh!"<<endl;
}
void CETAKLAYAR(void)
{
if(COUNTER>0)
{
for(int k = 0; k < COUNTER; k++)
{
int i = (F+k) % n;
cout << "Q["<<k<<"]="<<Q[i] << endl;
}
}
else
cout<<"Queue kosong!"<<endl;
}
void DELETE(void)
{
if(COUNTER>0)
{
HURUF=Q[F];
F = (F + 1) %n;
COUNTER--;
cout<<"Data yang di ambil :"<<HURUF<<endl;
}
else
cout<<"Antrian Kosong!"<<endl;
}
void inisialisasi(void)
{
F=0;
R=-1;
COUNTER=0;
}
Jawab :
#include<iostream>
#include<cstdlib>
#include<conio.h>
#define n 3
void INSERT(void);
void DELETE(void);
void CETAKLAYAR(void);
void inisialisasi(void);
int PIL,F,R,COUNTER;
char PILIHAN[1],HURUF;
char Q[n];
using namespace std;
int main()
{
inisialisasi();
do
{
cout<<" CIRCULAR QUEUE "<<endl;
cout<<"_____________________________________________________________________"<<endl;
cout<<" PROGRAM ANIMASI QUEUE "<<endl;
cout<<"====================================================================="<<endl;
cout<<" 1.INSERT "<<endl;
cout<<" 2.DELETE "<<endl;
cout<<" 3.CETAK ANTRIAN "<<endl;
cout<<" 4.KELUAR "<<endl;
cout<<" * CATATAN : BATAS INPUT = 3 HURUF "<<endl;
cout<<"_____________________________________________________________________"<<endl;
cout<<endl;
cout<<" SILAHKAN MASUKKAN PILIHAN : ";cin>>PILIHAN;
PIL=atoi(PILIHAN);
switch(PIL)
{
case 1:
INSERT();
break;
case 2:
DELETE();
break;
case 3:
CETAKLAYAR();
break;
default :
cout<<"TERIMA KASIH"<<endl;
break;
}
cout<<"Press any key to continue"<<endl;
getch();
system("cls");
}
while (PIL<4);
return 0;
}
void INSERT(void)
{
if(COUNTER<n)
{
cout<<endl<<"Masukkan 1 huruf : ";
cin>>HURUF;
R = (R + 1) % n;
Q[R] = HURUF;
COUNTER++;
}
else
cout<<"Antrian Penuh!"<<endl;
}
void CETAKLAYAR(void)
{
if(COUNTER>0)
{
for(int k = 0; k < COUNTER; k++)
{
int i = (F+k) % n;
cout << "Q["<<k<<"]="<<Q[i] << endl;
}
}
else
cout<<"Queue kosong!"<<endl;
}
void DELETE(void)
{
if(COUNTER>0)
{
HURUF=Q[F];
F = (F + 1) %n;
COUNTER--;
cout<<"Data yang di ambil :"<<HURUF<<endl;
}
else
cout<<"Antrian Kosong!"<<endl;
}
void inisialisasi(void)
{
F=0;
R=-1;
COUNTER=0;
}
DAFTAR PUSTAKA
Buku
1. Esakov, Jeffrey, Tom Weiss, Data Structures An Advanced Approach Using C, Prentice-Hall, Inc. 1989
2. Hariyanto, Bambang, Struktur Data, Informatika Bandung, Pebruari 2000
3. Kadir, Abdul, Pemrograman Dasar Turbo C, Andi Offset, Yogyakarta, 1991
4. Kruse, Robert L. Data Structures & Program Design, Prentice-Hall, Inc. 1987
5. Standish, Thomas A. Data Structures, Algorithms & Software Principles In C, Addison Wesley, 1995.
Komentar
Posting Komentar