Antrian / Queue
Tujuan Praktikum :
1.Mahasiswa dapat mengenal dan memahami sruktur antrian
2.Mahasiswa dapat mengimplemen tasikan antrian (queue)
Dasar Teori :
- Create : Menginisialisasi antrian.
- IsEmpty : Mengecek apakah queue kosong atau tidak.
- IsFull : Mengecek apakah queue sudah penuh atau belum.
- Enqueue : Menambahkan data di queue.
- Dequeue : Mengambil data dari queue.
- Clear : Menghapus data dalam antrian.
- View : melihat data dalam antrian
Deklarasi Antrian / Queue
1. Deklarasi Awal QueueVariabel yang akan digunakan adalah data (array sebagai tempat queue), head, tail. Sama seperti Stack, Nilai dari head dan tail dimulai dari -1 yang menandakan queue kosong. Sebagai contoh kita akan membuat queue dengan data maksimal sebanyak 7 data.
#define max 7
int data[max];
int head =- 1, tail =- 1;
int data[max];
int head =- 1, tail =- 1;
2. IsEmpty
Sama seperti di Stack, IsEmpty berguna untuk mengecek apakah queue kosong atau tidak. Indikator bahwa queue kosong adalah nilai dari head dan tail bernilai -1. Sehingga kita tinggal buat fungsi nya sebagai berikut :
IsEmpty()
{
if (head == -1 && tail == -1)
return true;
else
return false;
}
{
if (head == -1 && tail == -1)
return true;
else
return false;
}
3. IsFull
Operasi IsFull digunakan untuk mengecek apakah queue sudah penuh atau belum. Indikator kalau queue penuh adalah nilai tail = max – 1. Mengapa? karena nilai maksimal pada array yang mempunyai index 7 pada saat diakses akan mempunyai nilai maksimal 6. Sehingga fungsi yang terbentuk seperti ini :
IsFull()
{
if (tail == max-1)
return true;
else
return false;
}
{
if (tail == max-1)
return true;
else
return false;
}
4. Enqueue
Enqueue digunakan untuk memasukkan data kedalam queue. Sama seperti push dalam stack. Sebelum memasukkan data kedalam antrian, kita harus mengecek terlebih dahulu apakah queue / antrian sudah penuh atau belum. Kalau belum maka kita harus mengecek apakah head sudah berada pada nilai 0 atau belum. Ini sangat penting karena nilai head tidak akan lebih dari 0. PERLU DIPERHATIKAN ! Yang akan bergerak terus adalah tail, sedangkan head hanya penunjuk urutan paling depan, sehingga nilainya tidak pernah lebih dari 0. Kecuali antrian kosong, maka posisi head dan tail akan kembali menjadi -1.
void Enqueue(){
if (IsFull())
{
cout << "Antrian sudah penuh, mohon tunggu beberapa saat lagi ";
getch();
}
else
{
if (IsEmpty())
{
head = tail = 0;
cout<<"Masukkan data : ";cin>>data[tail];
}
else
{
tail++;
cout << "Masukkan data : ";
cin >> data[tail];
}
}
}
if (IsFull())
{
cout << "Antrian sudah penuh, mohon tunggu beberapa saat lagi ";
getch();
}
else
{
if (IsEmpty())
{
head = tail = 0;
cout<<"Masukkan data : ";cin>>data[tail];
}
else
{
tail++;
cout << "Masukkan data : ";
cin >> data[tail];
}
}
}
5. Dequeue
Kebalikan dari fungsi enqueue, dequeue digunakan untuk mengambil data yang sudah masuk di urutan pertama. Sehingga kita tinggal membaca data yang ada di posisi head. Nah inilah fungsi dari head. Jangan lupa kita cek dulu apakah queue kosong atau tidak. Tapi jika ada isinya, setelah data diambil, data dibelakangnya digeser ke depan.
void Dequeue()
{
if (IsEmpty())
{
cout << "Antrian kosong ! ";
getch();
}
else
{
cout << "Data yang diambil : " << data[head];
for (a = head; a <= tail-1 ;a++)
data[a] = data[a+1];
tail--;
if(tail == -1)
head = -1;
}
}
{
if (IsEmpty())
{
cout << "Antrian kosong ! ";
getch();
}
else
{
cout << "Data yang diambil : " << data[head];
for (a = head; a <= tail-1 ;a++)
data[a] = data[a+1];
tail--;
if(tail == -1)
head = -1;
}
}
6. Clear
Operasi clear digunakan untuk menghapus data yang ada di dalam queue. Caranya cukup merubah nilai pada head dan tail menjadi -1. Tidak perlu diperhatikan data yang ada di dalam array. Nantinya data data tersebut juga akan ditimpa.
void Clear()
{
head = tail =- 1;
cout << "Antrian sudah dikosongkan ! ";
getch();
}
{
head = tail =- 1;
cout << "Antrian sudah dikosongkan ! ";
getch();
}
7. View
Operasi ini digunakan untuk melihat data yang ada didalam queue. Caranya adalah dengan membaca data pada index yang terdapat diantara head sampai tail
void View()
{
if (IsEmpty())
{
cout << "Antrian kosong ! ";
getch();
}
else
{
for(a = head; a <= tail; a++)
cout << "Data pada antrian ke " << a << " = " << data[a] << endl;
getch();
}
}
{
if (IsEmpty())
{
cout << "Antrian kosong ! ";
getch();
}
else
{
for(a = head; a <= tail; a++)
cout << "Data pada antrian ke " << a << " = " << data[a] << endl;
getch();
}
}
Praktikum 9.1
Konsep stack di logikakan seperti sebuah tumpukan barang yang tersusun ke atas dengan ketinggian tumpukan yang telah ditentukan. Untuk mengilustrasikannya program dibawah ini.
Syntaxnya :
Syntaxnya :
#include <iostream.h> // Lan-balon.blogspot.co.id
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main (void)
{
int cek = 0, data[8], x, hapus;
char pil;
do
{
cout << "Ujian Praktikum Struktur Data Queque" << endl;
cout << endl;
printf ("A. Masukan Data Antrian\n");
printf ("B. Hapus Data Antrian\n");
printf ("C. Lihat Data Antrian\n");
printf ("D. Exit Program\n");
cout << endl;
printf ("Ketikan huruf dari salah satu pilihan diatas : ");
pil = getche();
cout << endl;
if (pil != 'A' && pil != 'B' && pil != 'C' && pil != 'D')
printf ("\n\nSalah ketik, ulangi lagi . . .\n");
else
{
if (pil == 'A') //PUSH
{
if (cek == 8)
printf ("\nAntrian penih\n");
else
{
printf ("\nMasukan angka-> "); scanf ("%i", &x);
data[cek] = x;
cek++;
}
}
else
{
if (pil == 'B') //POP
{
if (cek == 0)
printf ("Maaf tidak ada antrian untuk dihapus\n\n");
else
{
hapus = data[0];
for (int v = 0; v < cek; v++)
data[v] = data[v + 1];
data[cek - 1] = NULL;
cek--;
cout << endl;
printf ("Yaki anda ingin data ini dihapus ?");
cout << endl;
printf ("\nData dengan nilai = %i akan terhapus. [Tekan Enter]", hapus);
}
getch();
}
else
{
if (pil == 'C') //mengecek data
{
if (cek == 0)
printf ("\nMaaf tidak ada antrian untuk ditampilkan\n\n");
else
{
printf ("\n");
for (int z = 0; z < cek; z++)
{
printf (" { ");
printf ("%i", data[z]);
printf (" } ");
}
}
getch();
}
}
}
}
}
while (pil != 'D');
cout << endl;
cout << endl;
printf ("Yakin anda ingin keluar ? {{{Tekan Enter}}}");
pil = getche();
}
Penjelasannya :
Program ini di buat untuk menyimpan data Antrian, kalian Bisa lihat Opsinya Ada A, B, C dan D itu Opsinya .. Kalau mau masuk pilih A, Hapus pilih B, Lihat Pilih C dan untuk keluar pilih D ..
Praktikum 9.2
Syntaxnya :
#include <stdio.h> // lan-balon.blogspot.co.id
#define N 20
int nilai, jml, i;
struct tumpukan //struktur tumpukan
{
int atas;
int nilai[N];
}T;
main (void)
{
printf ("Jumlah Maksimal Tunpukan (<=20) = ");
scanf ("%d", &jml);
T.atas =- 1;
do //perulangan do - while
{
if (T.atas == N-1) //manmpilkan apabila stack penuh
{
printf ("\nTumpukan penuh\n");
}
else
if (T.atas == N-1 == 0) //pemilihan jika data masih penuh
{
T.atas++;
printf ("Masukan data ke %d = ", i + 1); scanf ("%d", &nilai);
T.nilai [T.atas] = nilai;
}
i++;
}
while (i < jml);
//menampilkan isi stack
for (i = T.atas; i >= 0; i--)
{
printf ("\nData ke %d = %d", i + 1, T.nilai[i]);
}
0 Comment to "Modul 9 - Queue ( Antrian )"
Posting Komentar