LAPORAN PRAKTIKUM
ALGORITMA PEMROGRAMAN
DAN STRUKTUR DATA
MODUL 9
Disusun oleh :
Nama :
Ricky Rudianto
NIM :
2012081127
Kelas :
Teknik Informatika A
LABORATORIUM
KOMPUTER
FAKULTAS ILMU
KOMPUTER
UNIVERSITAS
KUNINGAN
2012
MODUL
9
ANTRIAN
(QUEUE)
“PEMBAHASAN”
Dasar
Teori
Antrian (Queue) adalah suatu kumpulan
data yang penambahan elemennya hanya bisa dilakukan pada suatu ujung (disebut
dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen
dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Antrian
(Queue) mempunyai prinsip FIFO (Firs In Firs Out) bahwa yang pertama masuk maka
yang pertama keluar.
Operasi
Dasar Queue
1. Create
Queue
· Untuk
menciptakan dan menginisialisasi Queue
· Dengan
cara membuat Head dan Tail
· Bentuk
umum :
void create( )
{
antrian.head
= -1;
antrian.tail
= -1;
}
2. Empty
Queue
· Untuk
memeriksa apakah antrian sudah penuh atau belum
· Dengan
cara memeriksa Tail, jika Tail = -1 maka empty
· Kita
tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen
pertama dalam antrian) yang tidak akan berubah-ubah
· Pergerakan
pada antrian terjadi dengan penambahan elemen antrian kebelakang, yaitu
menggunakan nilai Tail
· Bentuk
umum :
{
if
(antrian.tail = -1)
return
1;
else
return
0;
}
3. Full
Queue
· Untuk
mengecek apakah antrian sudah penuh atau belum
· Dengan
cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas
elemen array pada C) berarti sudah penuh
· Bentuk
umum :
void idFull
{
if
(antrian.tail = Max-1)
return
1;
else
return
0;
}
4. Enqueue
· Untuk
menambahkan elemen ke dalam antrian, penambahan elemen selalu di tambahkan di
elemen paling belakang.
· Penambahan
elemen selalu menggerakan Variabel Tail dengan cara increment counter Tail
terlebih dahulu.
· Bentuk
umum :
{
if
(isEmpty ( ) = 1)
{
antrian.head=antrian.tail=0;
printf(“%d,
masuk”, antrian.data[antrian.tail]);
}
else
if
(isFull ( ) = 0)
{
antrian.tail++;
antrian.data[antrian.tai]=data;
printf(“%d,
masuk”, antrian.data[antrian.tail]);
}
}
5. Dequeue
· Digunakan
untuk menghapus elemen terdepan/pertama (head) dari antrian
· Dengan
cara menggeser semua elemen antrian kedepan dan mengurangi Tail dengan 1
· Penggeseran
dilakukan dengan menggunakan looping
· Bentuk
umum :
int Dequeue
{
int
i;
int
e = antrian.data[antrian.head];
for
(i=antrian.head; i<=antrian.tail; i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return
e;
}
6. Clear
Queue
· Untuk
menghapus elemen antrian dengan cara membuat Tail dengan Head = -1
· Penghapusan
elemen-elemen antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset
indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen antrian tidak lagi
terbaca
· Bentuk
umum :
void clear ( )
{
antrian.head
= -1;
antrian.tail
= -1;
printf(“data
clear”);
}
7. Tampilan
Queue
· Untuk
menampilkan nilai-nilai elemen antrian
· Menggunakan
looping dari Head s/d Tail
· Bentuk
umum :
void clear ( )
{
antrian.head
= -1;
antrian.tail
= -1;
printf(“data
clear”);
}
PRAKTIKUM
Praktikum
1
1. Tulis
source code di bawah ini :
#include <iostream.h>
#include <conio.h>
class Linked_list_Queue
{
private:
struct
node
{
int
data;
node
*next;
};
node
*rear;
node
*entry;
node
*print;
node
*front;
public:
Linked_list_Queue(
);
void
Delete( );
void
Insert( );
void
print_list( );
void
show_working( );
};
Linked_list_Queue::Linked_list_Queue( )
{
rear=NULL;
front=NULL;
}
void Linked_list_Queue::Insert( )
{
int
num;
cout<<"\n\n\n\n\n\t
Masukkan angka dalam Queue : ";
cin>>num;
entry=new
node;
if(rear==NULL)
{
entry->data=num;
entry->next=NULL;
rear=entry;
front=rear;
}
else
{
entry->data=num;
entry->next=NULL;
rear->next=entry;
rear=entry;
}
cout<<"\n\n\t
*** "<<num<<" masuk ke Queue."<<endl;
cout<<"\n\n\n\t\t
Press any key to return to Menu. ";
getch();
}
void Linked_list_Queue::Delete( )
{
if(front==NULL)
cout<<"\n\n\n\t
***Error : Queue is empty.\n"<<endl;
else
{
int
deleted_element=front->data;
node
*temp;
temp=front;
front=front->next;
delete
temp;
cout<<"\n\t***"<<deleted_element<<"dihapus"<<endl;
}
cout<<"\n\n\n\t\t
Press any key to return to Menu. ";
getch();
}
void Linked_list_Queue::print_list( )
{
print=front;
if(print!=NULL)
cout<<"\n\n\t
Angka yang ada di Queue : \n"<<endl;
else
cout<<"\n\n\t
*** Tidak ada yang ditampilkan."<<endl;
while(print!=NULL)
{
cout<<"\t
"<<print->data<<endl;
print=print->next;
}
cout<<"\n\n\n\t\t
Press any key to return to Menu. ";
getch();
}
void Linked_list_Queue::show_working( )
{
char
Key=NULL;
do
{
clrscr();
gotoxy(5,5);
cout<<"Menu"<<endl;
gotoxy(10,8);
cout<<"Pilih
salah satu menu : "<<endl;
gotoxy(15,10);
cout<<"Press
\'I\' to Masukkan data Queue"<<endl;
gotoxy(15,12);
cout<<"Press
\'D\' to Hapus data dari Queue"<<endl;
gotoxy(15,14);
cout<<"Press
\'P\' to Tampilkan data Queue"<<endl;
gotoxy(15,16);
cout<<"Press
\'E\' to Exit"<<endl;
Input:
gotoxy(10,20);
cout<<" ";
gotoxy(10,20);
cout<<"Masukkan
Pilihan : ";
Key=getch();
if(int(Key)==27
|| Key=='e' || Key=='E')
break;
else
if(Key=='i'
|| Key=='I')
Insert(
);
else
if(Key=='d'
|| Key=='D')
Delete(
);
else
if(Key=='p'
|| Key=='P')
print_list(
);
else
goto
Input;
}
while(1);
}
int main()
{
Linked_list_Queue
obj;
obj.show_working();
return
0;
}
|
Bahasa C++ :
2. Di
kompile dan jalankan, maka hasilnya adalah sebagai berikut :
Dari hasil diatas sudah jelas bahwa
apabila kita :
Ketik ‘I’ untuk memasukan data Queue
Ketik ‘D’ untuk menghapus data dari
Queue
Ketik ‘P’ untuk menampilkan data Queue
Ketik ‘E’ untuk keluar
Sebagai contoh dari program diatas
adalah sebagai berikut :
Ketika saya ketik ‘I’ maka saya harus
memasukan angka dalam Queue misalkan angka yang saya masukan adalah 12
Maka akan tampil “12 masuk ke Queue”.
Dan untuk menampilkan data Queue tersebut saya akan mengetik ‘P’, maka :
Dan untuk menghapus data yang ada di
Queue yaitu ketik “D”, maka :
TUGAS
MODUL 9
Soal !
1.Tambahkanlah Function Untuk Mencari Suatu Elemen Dalam
Queue.
2.Tambahkan Function Untuk Mengedit suatu elemen dalam
Queue.
3.Carilah Nilai total, Rata-Rata, terbesar dan terkecil
dari elemen-elemen queue dalam function itu tersendiri.
Penyelesaian
!
No.
1
#include <stdio.h>
void main()
{
int queue[5];
int depan = -1;
int belakang = -1;
int pilihan, data,
i;
do
{
printf("MENU\n");
printf("1. ENQUEUE\n2. DEQUEUE\n3. VIEW\n4.
EXIT\n");
printf("Pilihan = "); scanf("%d",
&pilihan);
switch (pilihan)
{
case 1: //enqueue
//apakah queue
belum penuh?
if (belakang < 4
)
{
printf("Data Masuk (masukkan
integer) = "); scanf("%d", &data);
queue[belakang+1] =
data;
belakang++;
if (belakang == 0)
depan = 0;
}
else
printf("Queue
penuh!\n");
break;
//apakah queue
belum kosong?
if (depan <=
belakang)
{
printf("Data
keluar = %d\n", queue[depan]);
depan++;
}
else
printf("Queue
kosong!\n");
break;
case 3:
for(i=depan;
i<=belakang; i++)
printf("%d
", queue[i]);
printf("\n");
break;
}
}
while (pilihan !=
4);
}
Bahasa C++ :
Dikompile dan jalankan, maka hasilnya
yaitu :
No.
2
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#define QSIZE 5
int front=0,rear=-1,q[QSIZE];
void insert(int x)
{
rear=(rear+1)%QSIZE;
q[rear]=x;
}
int del()
{
int t=0;
if(rear<=-1)
cout<<"\nQueue
is empty.\n\n";
else
{
t=q[front];
if(front!=rear)
front=(front+1)%QSIZE;
else
{
front=0;
rear=-1;
}
}
return t;
void display()
{
int i;
if(rear<=-1)
cout<<"\nQueue
is empty.\n\n";
else
{
cout<<"\nThe
queue is\n";
for(i=front;i!=rear;i=(i+1)%QSIZE)
cout<<q[i]<<"
\t";
cout<<q[i]<<"
\n";
}
}
void destroy()
{
int i=0;
if(rear<=-1)
cout<<"\nQueue
is empty.\n\n";
else
for(i=front;i<=rear;i=(front+1)%QSIZE)
del();
if(i!=0)
cout<<"\nQueue
is destroy.\n\n";
}
void main()
{
int ch,in,d;
clrscr();
do
{
cout<<"1.Insert\n";
cout<<"2.Delete\n";
cout<<"3.Display\n";
cout<<"4.Destroy\n";
cout<<"5.Exit\n\n";
cout<<"Enter
your choice:";
cin>>ch;
switch(ch)
{
case 1:clrscr();
if(front==(rear+1)%QSIZE && rear>=QSIZE-1)
cout<<"\nQueue is full\n\n";
else
{
cout<<"\nEnter the
element to be inserted (integer only):";
cin>>in;
insert(in);
clrscr();
}
break;
case 2:clrscr();
d=del();
if(d!=0)
cout<<"\nElement
deleted="<<d<<"\n\n";
break;
case 3:clrscr();
display();
break;
case 4:clrscr();
break;
case 5:break;
default:clrscr();
cout<<"\nEnter
an appropriate choice.\n\n";
}
}
while(ch!=5);
}
Bahasa C++ :
Dokompile dan
jalankan, maka hasilnya adalah :
No.
3
#include <iostream.h>
void main ()
{
int i,j=11;
float k,z=0;
int x[12]={1,3,5,4,7,2,99,16,45,67,89,45};
int maks = -1000;
int min = 1000;
cout<<" "<<" Menghitung Total
,Nilai Maksimal ,Minimal ,Dan Nilai Rata-rata "<<endl;
cout<<"================================================================================"<<endl;
for (i=0; i<12; i++)
{
if (i==j)
cout<<"
"<<x[i]<<" ";
else
cout<<"
"<<x[i]<<" + ";
z=z+x[i];
}
cout<<endl<<endl;
cout<<" Nilai Total : "<<z;
cout<<endl;
for (i=0; i<12; i++)
{
if (x[i]>maks)
}
cout<<" Nilai Maksimal : "<<maks<<endl;
for (i=0; i<12;i++)
{
if (x[i]<min)
min=x[i];
}
cout<<" Nilai Minimal : "<<min<<endl;
k=z/j;
cout<<" Nilai Rata-rata :
"<<k;
}
Bahasa C++ :
Dikompile dan jalankan, maka hasilnya adalah :
KESIMPULAN
Antrian (Queue) adalah suatu kumpulan
data yang penambahan elemennya hanya bisa dilakukan pada suatu ujung (disebut
dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen
dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Antrian
(Queue) mempunyai prinsip FIFO (Firs In Firs Out) bahwa yang pertama masuk maka
yang pertama keluar.
Ada yg versi baahasa c kah
ReplyDelete