LAPORAN
PRAKTIKUM V
QUEUE
a)
Tujuan Pembelajaran
1.
-
Mahasiswa mampu menjelaskan pengertian queue dan dequeue.
2.
-
Mahasiswa mampu menjelaskan dan menunjukkan cara pembuatan queue, operasi push
dan pop pada array.
3.
-
Mahasiswa mampu menjelaskan dan menunjukkan program dengan ADT(Abstract Data
Type) queuedan dequeue dengan array.
b) Dasar Teori
Antrian (Queue) dapat
diartikan sebagai suatu kumpulan data yang seolah-olah terlihat seperti ada
data yang diletakkan di sebelah data yang lain seperti pada gambar 01. Pada gambar, data
masuk melalui lorong di sebelah kanan dan masuk dari terowongan sebelah kiri. Hal ini
membuat antrian bersifat FIFO (First In First Out), beda dengan stack yang berciri
LIFO.
Antrian dapat dibuat
baik dengan array maupun dengan struct. Pada pembuatan antrian dengan array,
antrian yang disajikan bersifat statis. Ini disebabkan oleh jumlah maksimal array sudah ditentukan sejak deklarasi awal.
QUEUE DENGAN LINIEAR
ARRAY:
- Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di
ujung Satunya Sehingga membutuhkan variabel Head dan Tail
Create()
• Untuk menciptakan dan menginisialisasi Queue
• Dengan cara membuat Head dan Tail = -1
IsEmpty()
• Untuk memeriksa apakah Antrian sudah penuh atau belum
• Dengan cara memeriksa nilai 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
• Untuk menciptakan dan menginisialisasi Queue
• Dengan cara membuat Head dan Tail = -1
IsEmpty()
• Untuk memeriksa apakah Antrian sudah penuh atau belum
• Dengan cara memeriksa nilai 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
IsFull()
• 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
• 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
Enqueue(data)
• Untuk menambahkan elemen ke dalam Antrian, penambahan elemen
selalu ditambahkan di elemen paling belakang
• Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment counter Tail
• Untuk menambahkan elemen ke dalam Antrian, penambahan elemen
selalu ditambahkan di elemen paling belakang
• Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment counter Tail
Dequeue()
• Digunakan untuk menghapus elemen terdepan/pertama dari Antrian
• Dengan cara mengurangi counter Tail dan menggeser semua elemen
antrian kedepan.
• Penggeseran dilakukan dengan menggunakan looping
Clear()
• 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 ke nilai -1
sehingga elemenelemen Antrian tidak lagi terbaca
• 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 ke nilai -1
sehingga elemenelemen Antrian tidak lagi terbaca
Print()
• Untuk menampilkan nilai-nilai elemen Antrian
• Menggunakan looping dari head s/d tail
Perbedaan antara stack dan queue terdapat pada aturan penambahan dan
penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen
dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat
dengan ujung atau dianggap paling atas sehingga pada operasi penghapusan, elemen
teratas tersebut akan dihapus paling awal, sifat demikian dikenal dengan LIFO. Pada
queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu
dilakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang
sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan
elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling
awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO.
• Untuk menampilkan nilai-nilai elemen Antrian
• Menggunakan looping dari head s/d tail
Perbedaan antara stack dan queue terdapat pada aturan penambahan dan
penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen
dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat
dengan ujung atau dianggap paling atas sehingga pada operasi penghapusan, elemen
teratas tersebut akan dihapus paling awal, sifat demikian dikenal dengan LIFO. Pada
queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu
dilakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang
sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan
elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling
awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO.
c)
LATIHAN(PERCOBAAN):
Percobaan 1
Algoritma dan Struktur Data
Nama Program : Program Queue
Bahasa Pemrogramam : C++
Compiler :
Code Blocks
Script program :
#include<iostream.h>
#include<stdlib.h>
#define MAX 10
void insert(int gueue[],
int*rear, int nilai);
void del(int
gueue[],int*front, int rear, int*nilai);
void main()
{
int queue[MAX];
int front, rear;
int n, nilai;
front=rear=(-1);
do
{
do
{
cout<<"masukkan nilai
elemen: " ;
cin>>nilai;
insert(queue,&rear,nilai);
cout<<endl;
cout<<"tekan 1 untuk
melanjutkan: " ;
cin>>n;
}while(n==1);
cout<<endl;
cout<<"tekan 1 untuk
menghapus sebuah elemen"<<endl;
cin>>n;
while(n==1)
{
del(queue,&front,rear,&nilai);
cout<<"nilai telah
dihapus:"<<nilai<<endl;
cout<<endl;
cout<<"tekan 1 untuk
menghapus sebuah elemen:"<<endl;
cin>>n;
}
cout<<endl;
cout<<"tekan 1 untuk
melanjutkan:";
cin>>n;
}while(n==1);
}
void insert(int gueue[],
int*rear, int nilai)
{
if(*rear<MAX-1)
{
*rear=*rear+1;
gueue[*rear]=nilai;
}
else
{
cout<<"queue penuh, insert
tidak dapat dilakukan"<<endl;
exit(0);
}
}
void del(int queue[],
int*front, int rear, int *nilai)
{
if(*front==rear)
{
cout<<"queue kosong, delete
tidak dapat dilakukan"<<endl;
exit(0);
}
*front=*front+1;
*nilai=queue[*front];
}
Script yang benar :
#include<iostream>
#include<stdlib.h>
#define MAX 10
using namespace std;
void insert(int gueue[], int*rear, int nilai);
void del(int gueue[],int*front, int rear, int*nilai);
int main()
{
int queue[MAX];
int front, rear;
int n, nilai;
front=rear=(-1);
do
{
do
{
cout<<"masukkan
nilai elemen: " ;
cin>>nilai;
insert(queue,&rear,nilai);
cout<<endl;
cout<<"tekan
1 untuk melanjutkan: " ;
cin>>n;
}while(n==1);
cout<<endl;
cout<<"tekan 1
untuk menghapus sebuah elemen"<<endl;
cin>>n;
while(n==1)
{
del(queue,&front,rear,&nilai);
cout<<"nilai
telah dihapus:"<<nilai<<endl;
cout<<endl;
cout<<"tekan
1 untuk menghapus sebuah elemen:"<<endl;
cin>>n;
}
cout<<endl;
cout<<"tekan 1
untuk melanjutkan:";
cin>>n;
}while(n==1);
}
void insert(int gueue[], int*rear, int nilai)
{
if(*rear<MAX-1)
{
*rear=*rear+1;
gueue[*rear]=nilai;
}
else
{
cout<<"queue
penuh, insert tidak dapat dilakukan"<<endl;
exit(0);
}
}
void del(int queue[], int*front, int rear, int *nilai)
{
if(*front==rear)
{
cout<<"queue
kosong, delete tidak dapat dilakukan"<<endl;
exit(0);
}
*front=*front+1;
*nilai=queue[*front];
}
Output Program :
Algoritma :
1. Mulai.
2. Membaca file header.
3.
Membaca fungsi insert(int gueue[], int*rear, int nilai)
del(int gueue[],int*front, int rear, int*nilai).
4.
Membaca fungsi utama.
5.
Membaca tipe data int queue[MAX], front, rear n dan nilai.
6.
Membaca fungsi front=rear=(-1).
7.
Membaca percabangan do-while.
8.
Membaca percabangan do-while kedua dalam do-while pertama.
9.
Inputan nilai elemen.
10.
Pemanggilan fungsi insert(queue,&rear,nilai).
11.
Tekan 1 untuk melanjutkan.
12.
Cetak hasil.
13.
Jika bukan 1 maka lanjut ke tekan 1 untuk menghapus.
14.
Pemanggilan fungsi del(queue,&front,rear,&nilai).
15.
Cetak hasil.
16.
Deklarasi fungsi insert(int gueue[], int*rear, int nilai).
17.
Deklarasi fungsi del(queue,&front,rear,&nilai).
18. Cetak hasil.
19. Selesai.
Deskripsi:
d) TUGAS PRAKTIKUM
Tugas
Praktikum
Algoritma dan Struktur Data
Nama Program
: Program Implementasi Queue.
Bahasa Pemrogramam : C++
Compiler :
Code Blocks.
Script
program :
#include<iostream.h>
#include<conio.h>
class Queue
{
private:
struct kue
{
int data;
kue*kuebaru;
};
kue*tail;
kue*entry;
kue*print;
kue*head;
public:
Queue();
void
Delete();
void
Insert();
void cetak();
void menu();
};
Queue: :Queue()
{
tail=1;
head=NULL;
}
void Queue: :Insert()
{
int num;
cout<<"\n\n\n\n\n\t Masukkan data dalam Queue: ";
cin>>num;
entry=new
kue;
if(tail==1)
{
entry->data=num;
//(*entry).data=num
entry->kuebaru=NULL;//(*entry).kuebaru=null
tail=entry;
head=tail;
}
else
{
entry*data=num;//(*entry).data=num
entry->kuebaru=NULL;
tail->kuebaru=entry;//(*entry).kuebaru=entry
tail=entry;
}
cout<<"\n\n\t***"<<num<<"sudah
masuk dalam Queue. "<<endl;
getch();//getch:bwan conio
}
void Queue: :Delete()
{
if(head==NULL)
cout<<"\n\n\n\t***ERROR:Queue is empty. \n"<<endl;
else
{
int
deleted_element=head->data;//(*head).data=deleted_elemnt
kuebaru*temp;//kue: nm struct, *temp=data yg ditunjuk olh tbl
temp=head;
head=head->kuebaru;//(*head).kuebaru=head
delete
temp;
cout<<"\n\n\n\t***"<<deleted_element<<"dihapus
dari queue. "<<endl;
}
cout<<"\n\n\n\t\t press any key to return
to menu";
getch();
}
void Queue: :cetak()
{
print=head;
if(print!=NULL)
cout<<"\n\n\n\n\t angka-angka yang ada di dalam queue
adalah:\n"<<endl;
else
cout<<"\n\n\n\n\t***tidak ada yang
ditampilkan"<<endl;
while(print=NULL)//while cek dulu
{
cout<<"\t"<<print->data<<endl;
print=print->kuebaru;
}
cout<<"\n\n\n\t\t press any key to return
to menu. ";
getch();
}
void Queue: :menu()
{
char Key =
NULL;
do
{
cout<<"**Implementasikan Queue**"<<endl;
cout<<"pilih salah satu menu: "<<endl;
cout<<"Tekan\'I\' to Masukkan data dalam
Queue"<<endl;
cout<<"Tekan\'D\' to hapus data dari Queue"<<endl;
cout<<"Tekan\'P'\'to Tampilkan data dari
Queue"<<endl;
cout<<"Tekan\'E\'to Exit"<<endl;
Input:
cout<<"Masukkan pilihan: ";
Key =
getche();
if(Key=='e'||Key=='e'||Key=='E')/*untuk fungsi exit*/
break;
else
if(Key=='i'||Key=='I')
Insert();
else
if(Key=='d'||Key=='D')
Delete();
else
if(Key=='p'||Key=='P')
cetak();
else
goto
Input;
}
while(0);
}
int main()
{
Queue obj;
obj.menu();
return 1;
}
Script program yang benar :
#include<iostream>
#include<conio.h>
using
namespace std;
class queue
{
private:
struct kue
{
int data;
kue*kuebaru;
};
kue*tail;
kue*entry;
kue*print;
kue*head;
public:
queue();
void Delete();
void Insert();
void cetak();
void menu();
};
queue::queue()
{
tail=NULL;
head=NULL;
}
void
queue::Insert()
{
int num;
cout<<"\n\n\n\n\n\t Masukkan
data dalam Queue:";
cin>>num;
entry=new kue;
if(tail==NULL)
{
entry->data=num; //(*entry).data=num
entry->kuebaru=NULL;//(*entry).kuebaru=null
tail=entry;
head=tail;
}
else
{
entry->data=num;//(*entry).data=num
entry->kuebaru=NULL;
tail->kuebaru=entry;//(*entry).kuebaru=entry
tail=entry;
}
cout<<"\n\n\t***"<<num<<"sudah
masuk dalam Queue. "<<endl;
getch();//getch:bwan
conio
}
void
queue::Delete()
{
if(head==NULL)
cout<<"\n\n\n\t***ERROR:Queue is
empty. \n"<<endl;
else
{
int
deleted_element=head->data;//(*head).data=deleted_elemnt
kue*temp;//kue: nm struct, *temp=data yg
ditunjuk olh tbl
temp=head;
head=head->kuebaru;//(*head).kuebaru=head
delete temp;
cout<<"\n\n\n\t***"<<deleted_element<<"dihapus
dari queue. "<<endl;
}
cout<<"\n\n\n\t\t
press any key to return to menu";
getch();
}
void
queue::cetak()
{
print=head;
if(print!=NULL)
cout<<"\n\n\n\n\t angka-angka
yang ada di dalam queue adalah:\n"<<endl;
else
cout<<"\n\n\n\n\t***tidak ada
yang ditampilkan"<<endl;
while(print=NULL)//while
cek dulu
{
cout<<"\t"<<print->data<<endl;
print=print->kuebaru;
}
cout<<"\n\n\n\t\t
press any key to return to menu. ";
getch();
}
void
queue::menu()
{
char Key = NULL;
do
{
cout<<"**Implementasikan
Queue**"<<endl;
cout<<"pilih salah satu menu:
"<<endl;
cout<<"Tekan\'I\' to Masukkan
data dalam Queue"<<endl;
cout<<"Tekan\'D\' to hapus data
dari Queue"<<endl;
cout<<"Tekan\'P'\'to Tampilkan
data dari Queue"<<endl;
cout<<"Tekan\'E\'to
Exit"<<endl;
Input:
cout<<"Masukkan pilihan: ";
Key = getche();
if(Key=='e'||Key=='e'||Key=='E')/*untuk
fungsi exit*/
break;
else if(Key=='i'||Key=='I')
Insert();
else if(Key=='d'||Key=='D')
Delete();
else if(Key=='p'||Key=='P')
cetak();
else
goto Input;
}
while(0);
}
int main()
{
queue obj;
obj.menu();
return 1;
}
OutProgram
:
Algoritma
:
1. Mulai.
2. Membaca file header.
3. Cetak hasil.
4. Selesai.
Deklarasi
:
e)
TUGAS RUMAH
Tugas
Rumah 1
Algoritma dan Struktur Data
Nama Program : Program untuk memasukkan, menghapus
dan mencetak suatu antrian data berupa string.
Bahasa Pemrogramam
: C++
Compiler : Code Blocks.
Script
program :
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#define MAX 10
char *p[MAX], *pop(void);
int spos = 0;
int rpos = 0;
void insert(void), push(char *q), print(void),
clear(void);
void insert(void)
{
char s[10],
*p;
do {
printf("spos %d: ", spos+1);
gets(s);
if(*s==0)
{
break;
}
p = (char
*) malloc(strlen(s)+1);
if(!p) {
printf("Out of memory.\n");
return;
}
strcpy(p,
s);
if(*s) {
push(p);
}
} while(*s);
}
void print(void)
{
int t;
for(t=rpos;
t < spos; ++t)
printf("%d. %s\n", t+1, p[t]);
}
void clear(void)
{
char *p;
if((p=pop())==NULL) {
return;
}
printf("%s\n", p);
}
void push(char *q)
{
if(spos==MAX) {
printf("List Full\n");
return;
}
p[spos] = q;
spos++;
}
char *pop(void)
{
if(rpos==spos) {
printf("No more.\n");
return
NULL;
}
rpos++;
return
p[rpos-1];
}
int main(void)
{
char s[10];
register int
t;
for(t=0; t
< MAX; ++t) {
p[t] =
NULL;
}
while(1) {
printf("Insert(I), Print(P), Clear(C), Quit(Q): ");
gets(s);
*s =
toupper(*s);
switch(*s)
{
case
'I':
insert();
break;
case
'P':
print();
break;
case
'C':
clear();
break;
case
'Q':
exit(0);
}
}
return 0;
}
Output
Program :
Algoritma
:
1. Mulai.
2. Membaca file header.
3. Cetak hasil.
4. Selesai.
Deklarasi
:
Tugas
Rumah 2
Algoritma dan Struktur Data
Nama Program
: Program queue dengan modifikasi inputan
karakter huruf dan angka, lalu
lakukan penghapusan dengan konsep FIFO.
Bahasa Pemrogramam : C++
Compiler :
Code Blocks.
Script
program :
OutProgram
:
Algoritma
:
1. Mulai.
2. Membaca file header.
3. Cetak hasil.
4. Selesai.
Deklarasi
:
f) KESIMPULAN
g) DAFTAR RUJUKAN
1. Tim
Asisten Dosen. 2014.
Modul 5 QUEUE (Antrian). Malang: Unversitas Negeri Malang.
0 komentar:
Post a Comment