Anda di halaman 1dari 17

QUEUE (ANTRIAN)

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

Disusun Untuk Memenuhi Matakuliah Algoritma dan Struktur Data yang Dibimbing Oleh I Made Wirawan, S.T.,M.Eng.

Oleh : Rahmi Wahyulianti 110533430572 S1 PTI Off C 2011

UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO S1 PENDIDIKAN TEKNIK INFORMATIKA OKTOBER 2012

Bab V QUEUE (ANTRIAN)

A. TUJUAN Mahasiswa mampu menjelaskan pengertian queue dan dequeue. Mahasiswa mampu menjelaskan dan menunjukkan cara pembuatan queue, operasi push dan pop pada array. Mahasiswa mampu menjelaskan dan menunjukkan program dengan ADT (Abstract Data Type) queue dan dequeue dengan array. B. DASAR TEORI Queue (antrian) adalah suatu kumpulan data yang penambahan elemennya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen yang dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Jadi, dalam antrian menggunakan prinsip masuk pertama keluar pertama atau disebut juga dengan prinsip FIFO (first in first out). Dengan kata lain, urutan keluar akan sama dengan urutan masuknya. Contoh : antrian mobil saat membeli karcis di pintu jalan tol, antrian di bioskop dan sebagainya. Operasi Operasi pada Queue: Create() : untuk menciptakan dan menginisialisasi Queue. IsEmpty() : untuk memeriksa apakah antrian sudah penuh atau belum. IsFull() : untuk mengecek apakah antrian sudah penuh atau belum. Clear() : untuk menghapus elemen elemen antrian dengan cara membuat Tail dan Head =-1. Tampil() : untuk menampilkan nilai-nilai elemen antrian dengan menggunakan looping dari head s.d tail. Elemen antrian yaitu item-item data yang terdapat di elemen antrian: Head/front (elemen terdepan dari antrian ). Tail/rear (elemen terakhir dari antrian ). Jumlah elemen pada antrian (count). Implementasi Antrian dengan Array Untuk memahami penggunaan antrian dalam array, kita membutuhkan deklarasi antrian, misalnya:
#define MAXN 6 Typedef enum {NOT_OK, OK} Tboolean; Typedef struct { Titem arrau [MAXN]; int first; int last; int number_of_items; } Tqueue;

Dengan deklarasi di atas , elemen antrian dinyatakan dalam tipe integer yang semuanya terdapat dalam struktur. Variabel first menunjukkan posisi elemen pertama dalam array, dan variabel last menunjukkan posisi elemem terkahir dalam array. Algoritma dari penggalan program di atas adalah : 1. Tentukan elemen yang akan dimasukkan ke dalam antrian (dalam hal ini adalah 6 elemen).

2. Deklarasikan struktur untuk menampung elemen pada antrian. 3. Selesai. Queue dengan Array Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya Sehingga membutuhkan variabel Head dan Tail

Enqueue Proses enqueue berguna untuk memasukkan 1 elemen ke dalam antrian.


If empty then front 0; rear -1; Queue[front] elemen; endif If not full then Rear rear + 1 Queue(rear) elemen; Endif (elemen antrian bertambah 1)

Dequeue Proses ini berguna untuk mengambil 1 elemen dari antrian. Hal ini dilakukan dengan cara memindahkan semua elemen satu langkah ke posisi di depannya, sehingga otomatis elemen yang paling depan akan tertimpa dengasn elemen yang terletak di belakangnya.
If not empty then For i := front to rear-1 do Queue[i] queue[i+1] berkurang 1) Rear rear 1 Endfor Endif (elemen antrian

C. LATIHAN Syntaxs:
//Program Queue //by : Rahmi Wahyulianti (110533430572) S1 PTI OFF C 2011 //berkas header #include<iostream.h> #include<stdlib.h> #define MAX 10 //ukuran maksimum stack void insert(int queue[],int*rear,int nilai); //inisialisasi fungsi insert nilai void del(int queue[], int*front, int rear, int*nilai);//inisialisasi fungsi delete nilai int main() { //deklarasi fungsi menu utama //deklarasi variabel int queue[MAX]; int front, rear; int n, nilai; front=rear=(-1); do { do { cout<<"=+=+=+=+=+=\n"; cout<<"= Queue =\n"; cout<<"=+=+=+=+=+=\n"; cout<<"Masukkan nilai elemen : "; cin>>nilai; insert(queue,&rear,nilai);//fungsi untuk insert nilai cout<<endl; cout<<"Tekan 1 untuk melanjutkan : "; cin>>n; } while (n==1); cout<<endl; cout<<"Tekan 1 untuk menghapus sebuah elemen : "; cin>>n; while(n==1){ del(queue,&front,rear,&nilai);//fungsi untuk delete nilai cout<<"Nilai telah dihapus : "<<nilai<<endl; cout<<"Tekan 1 untuk menghapus lagi : "; cin>>n; } } while(n==1); } //proses untuk insert nilai void insert(int queue[],int*rear, int nilai) { if(*rear<MAX-1) { *rear=*rear+1; queue[*rear]=nilai; } else { cout<<"Queue penuh, insert tidak dapat dilakukan"<<endl; exit(0); } }

//proses penghapusan nilai 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:

D. TUGAS PRAKTIKUM Syntaxs:


//program Queue //by : Rahmi Wahyulianti (110533430572) S1 PTI OFF C 2011 //berkas header #include<iostream.h> #include<conio.h> class Queue { private : struct kue { int data; int temp; kue *kuebaru; }; //deklarasi variabel kue*kuebaru;//untuk menampung inputan data baru yang ingin dimasukkan kue*tail;//variabel tail selalu berada di akhir rangkaian kue*entry; kue*print; kue*head; //variabel head selalu berada di awal rangkaian kue*temp;//wadah untuk menampung data sementara public : Queue(); void Delete();//inisialisasi fungsi delete void Insert();//inisialisasi fungsi insert void cetak();//inisialisasi fungsi cetak void menu();//inisialisasi fungsi menu };

Queue::Queue() { tail=NULL;//elemen terakhir dalam keadaan NULL atau kosong head=NULL;//elemen pertama dalam keadaan NULL atau kosong } //proses untuk memasukkan data void Queue::Insert() { int num;//tipe data num berupa ineteger cout<<"\n\n\t Masukkan data dalam Queue :"; cin>>num; entry=new kue;//memasukkan kue baru if(tail==NULL)//jika tail kosong maka kue baru mengarah ke data menjadi num { entry->data=num; //(*entry).data=num //data yang telah dimasukkan tadi mengarah pada kue baru entry->kuebaru=NULL; //(*entry).kuebaru=null tail=entry;//tail tidak NULL lagi head=tail;//head menjadi tail } else { entry->data=num;//(*entry).data=num//entry mengarah ke data yang disebut sebagai num entry->kuebaru=NULL;//entry ke kue baru dimana mengarah ke NULL tail->kuebaru=entry;//(*entry).kuebaru=entry //tail kue baru = entry tail=entry; } cout<<"\n\n\t***"<<num<<" sudah masuk dalam Queue. "<<endl; getch(); //getch:bwanconio } //proses penghapusan data void Queue::Delete() { if(head==NULL)//jika head sama dengan NULL maka queue kosong, jika head tidak sama dengan NULL maka elemen yang terhapus adalah head yang mengarah ke data cout<<"\n\n\t***Error:Queue is Empty.\n"<<endl; else { int deleted_element=head>data;//(*head).data=deleted_element kue*temp;//kue: nm struct.*temp=data ygdtnjukolhtbl temp=head; head=head->kuebaru;//(*head).kuebaru=head//head menagarah ke kue baru delete temp;//data yang ada dalam queue telah berhasil dihapus cout<<"\n\n\t***"<<deleted_element<<" Dihapus dari Queue."<<endl; } cout<<"\n\n\n\t\t press any key to return to menu\n"; getch(); } //proses untuk mencetak tampilan data void Queue::cetak() { print=head; if(print!=NULL)//jika print tidak sama dengan NULL maka angkaangka dalam queue akan ditampilkan

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 menagarah ke data print=print->kuebaru;//print menuju ke kue baru, namun jika tidak maka tidak ada yang akan ditampilkan } cout<<"\n\n\n\t\t press any key to return to menu\n"; getch(); } //proses untuk pemilihan menu void Queue::menu() { char Key=NULL; //key dalam keadaan NULL do { cout<<"==++==++==++==++==++==++==++==++==++==++==++==++==\n"; cout<<"** Implementasikan Queue **"<<endl cout<<"==++==++==++==++==++==++==++==++==++==++==++==++==\n"; 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; cout<<"\n pilihan menu :"; Input : Key = getche(); if(Key=='e'||Key=='e'||Key=='E')//untuk fungsi exit break; else if(Key=='i'||Key=='I')//untuk fungsi insert Insert(); else if(Key=='d'||Key=='D')//untuk fungsi delete Delete(); else if(Key=='p'||Key=='P')//untuk fungsi print cetak(); else goto Input; } while(1); } int main()//deklarasi fungsi menu utama { Queue obj; obj.menu(); return 1; }

Output:

E. TUGAS RUMAH Syntaxs:


//by :Rahmi Wahyulianti (110533430572) S1 PTI OFF //berkas header #include<iostream.h> #include<conio.h> #include<stdlib.h> class Queue { private : struct antri //deklarasi struct { char data; char temp; antri *antribaru; }; //deklarasi variabel antri*antribaru; //untuk menampung dimasukkan C 2011

inputan

data

baru

yang

ingin

antri*rear;//variabel tail selalu berada di akhir rangkaian antri*entry; antri*print; antri*front;//variabel head selalu berada di awal rangkaian antri*temp; //wadah sementara public : Queue(); void masuk();//inisialisasi void hapus();//inisialisasi void cetak();//inisialisasi void menu(); //inisialisasi };

fungsi fungsi fungsi fungsi

untuk untuk untuk untuk

memasukkan data menghapus data mencetak data menu pilihan

Queue::Queue() { rear=NULL;//elemen terakhir dalam keadaan NULL atau kosong front=NULL;//elemen pertama dalam keadaan NULL atau kosong } //proses memasukkan data void Queue::masuk() { char string; cout<<"\n----------------------\n"; cout<<"Masukkan string dalam Queue :"; cin>>string; entry=new antri;//memasukkan antrian baru if(rear==NULL)//jika rear kosong maka antri baru mengarah ke data menjadi string { entry->data=string; //(*entry).data=string //data yang telah dimasukkan tadi mengarah pada antri baru entry->antribaru=NULL; //(*entry).antribaru=null rear=entry;//rear tidak NULL lagi front=rear;//front menjadi rear } else { entry->data=string;//entry mengarah ke data yang disebut sebagai string entry->antribaru=NULL;//entry ke antri baru dimana mengarah ke NULL rear->antribaru=entry;//rear ke antri baru iti sama dengan entry rear=entry;//rear tidak kosong lagi sampai semua data telah menjadi queue } cout<<"\n\t*** String "<<string<<" Sudah masuk dalam Queue. "<<endl; getch(); //getch:bwanconio } //proses untuk menghapus data void Queue::hapus() { if(front==NULL) //jika front sama dengan NULL maka queue kosong, jika front tidak sama dengan NULL maka elemen yang terhapus adalah head yang mengarah ke data cout<<"\n\t***Error:Queue is Empty.\n"<<endl; else { char deleted_element=front->data;//tipe data elemen yang terhapus berupa character antri*temp; temp=front; front=front->antribaru;//front mengarah ke antri baru

delete temp;//data yang ada dalam queue telah berhasil dihapus cout<<"\n~~~~~~~~~~~~~~~~~~~~~~\n"; cout<<"\n\n\t***string "<<deleted_element<<" Dihapus dari Queue."<<endl; } cout<<"\n\t\t press any tanda to return to menu\n"; getch(); } //proses untuk mencetak data void Queue::cetak() { cout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; print=front; if(print!=NULL)//jika print tidak sama dengan NULL maka angka-angka dalam queue akan ditampilkan cout<<"\n Barisan string yang ada di dalam queue adalah :\n"<<endl; else cout<<"\n\n\t*** tidak ada yang ditampilkan"<<endl; while(print!=NULL)//while cekdulu { cout<<"\t"<<print->data<<endl;//print mengarah ke data print=print->antribaru;//print menuju ke antri baru, namun jika tidak maka tidak ada yang akan ditampilkan } cout<<"\n\t\t press any key to return to menu.\n"; getch(); } //proses untuk menu pilihan void Queue::menu() { char tanda=NULL;//tanda dalam keadaan NULL do { cout<<"------------------------\n"; cout<<" QUEUE "<<endl; cout<<"------------------------\n"; cout<<"Pilih salah satu menu :"<<endl; cout<<"Tekan\'I\' untuk Memasukkan data dalam Queue"<<endl; cout<<"Tekan\'D\' untuk Menghapus data dari Queue"<<endl; cout<<"Tekan\'T\' untuk Menampilkan data dari Queue"<<endl; cout<<"Tekan\'E\' untuk Keluar"<<endl; cout<<"Masukkan pilihan :"; Input : tanda = getche(); if(tanda=='e'||tanda=='E')//untuk fungsi keluar break; else if(tanda=='i'||tanda=='I')//untuk fungsi insert masuk(); else if(tanda=='d'||tanda=='D')//untuk fungsi delete hapus(); else if(tanda=='t'||tanda=='T')//untuk fungsi cetak data cetak(); else goto Input; } while(1); } int main() { Queue obj;

obj.menu(); return 1; }

Algoritma: 1. Mulai 2. Deklarasi struct untuk antrian 3. Deklarasi variabel :


antri*antribaru; //untuk menampung inputan data baru yang ingin dimasukkan antri*rear; //variable rear selalu berada di akhir rangkaian antri*entry; antri*print; antri*front;//variable head selalu berada di awal rangkaian antri*temp;

4. Insialisasi masing-masing fungsi:


public : Queue(); void masuk(); //deklarasi fungsi untuk menghapus data dari queue void hapus(); //deklarasi fungsi untuk memasukkan data void cetak(); //deklarasi fungsi untuk mencetak data void menu();

5. Proses memasukkan data dalam bentuk string. 6. Proses antrian dimulai. 7. Proses penghapusan data
if(front==NULL) /*jika front sama dengan NULL maka queue kosong. Jika front tidak sama denganNULL maka elemen yang terhapus adalah head yang mengarah ke data*/ cout<<"\n\t***Error:Queue is Empty.\n"<<endl; else { char deleted_element=front->data; //tipe data elemen yang terhapus berupa character antri*temp; //antri: nm struct.*temp=data yg dtnjuk olh tbl temp=front; front=front->antribaru; //front mengarah ke antribaru delete temp; //data yang ada dalam queue telah berhasil di hapus

8. Proses untuk mencetak tampilan data.


if(print!=NULL) //jika print tidak sama dengan NULL maka angka-angka dalam queue akan ditampilkan cout<<"\n Barisan string yang ada di dalam queue adalah:\n"<<endl; else

9. Proses untuk kemabali ke menu pilihan


if(tanda=='e'||tanda=='E')//untuk fungsi keluar break; else if(tanda=='i'||tanda=='I')//untuk fungsi pemasukan data masuk(); else if(tanda=='d'||tanda=='D')//untuk fungsi penghapusan data hapus(); else if(tanda=='t'||tanda=='T')//untuk fungsi mencetak data

cetak(); else

10. Selesai. Output:

F. KESIMPULAN Queue (antrian) adalah suatu kumpulan data yang penambahan elemennya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen yang dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Queue menggunakan prinsip FIFO (First In First Out). Operasi Operasi pada Queue: o Create() : untuk menciptakan dan menginisialisasi Queue. o IsEmpty() : untuk memeriksa apakah antrian sudah penuh atau belum. o IsFull() : untuk mengecek apakah antrian sudah penuh atau belum. o Clear() : untuk menghapus elemen elemen antrian dengan cara membuat Tail dan Head =-1. o Tampil() : untuk menampilkan nilai-nilai elemen antrian dengan menggunakan looping dari head s.d tail. Elemen antrian yaitu item-item data yang terdapat di elemen antrian: o Head/front (elemen terdepan dari antrian ). o Tail/rear (elemen terakhir dari antrian ). o Jumlah elemen pada antrian (count).

Queue dengan Array Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya Sehingga membutuhkan variabel Head dan Tail

Enqueue berguna untuk memasukkan satu elemen ke dalam antrian. Dequeue berguna untuk mengambil satu elemen dari antrian. Dalam kehidupan sehari-hari proses antrian terdapat pada antrian mobil saat membeli karcis di pintu jalan tol, antrian di bioskop dan sebagainya.

Anda mungkin juga menyukai