Bab 7 - Antrian(Queue)

download Bab 7 - Antrian(Queue)

of 16

Transcript of Bab 7 - Antrian(Queue)

TUGAS VII STRUKTUR DATA ANTRIAN(QUEUE)

Anggota kelompok : 1. Putu Anantha Prasetya Y. 2. AA. Ngr. Hary Susila 3. Putu Arismawan J.K (1004505031) (1004505039) (1004505042)

Program Studi Teknologi Informasi Fakultas Teknik Universitas Udayana 2012

TUGAS VII Queue (antrian)7.1 Tinjauan Pustaka Queue atau antrian ada 2 macam yaitu Queue biasa ( tanpa prioritas ) dan Queue Berprioritas. Queue atau antrian dapat disajikan dengan array maupun pointer, dengan array maka dapat digunakan array of record dimana recordnya berupa penyimpan data dan penyimpan prioritas. Queue merupakan kumpulan data yang penambahan elemennya hanya bisa dilakukan pada sisi belakang dan

penghapusannya hanya bisa dilakukan pada sisi depan. Konsep utamanya berkebalikan dari stack (tumpukan), yaitu First In First Out. Contoh : orang antri beli tiket ke kebun binatang, Mahasiswa antre bayar KRS. Implementasi antrian menggunakan dua pointer, yaitu pointer yang menunjukkan elemen terdepan dan elemen terakhir7.1.1 Konsep Queue Queue biasa ( tanpa prioritas ) berlaku sebagai berikut : a. Bersifat FIFO (First In First Out) b. Elemen yang pertama masuk ke antrian akan keluar pertama kalinya c. Dequeue adalah mengeluarkan satu elemen dari suatu Antrian d. Antrian dapat dibuat dengan menggunakan: Linear Array dan Circular Array

7.1.2

Operasi queue a. Menambah elemen baru pada bagian belakang antrian b. Menghapus elemen baru pada bagian depan antrian c. Melakukan pengecekan apakah antrian kosong. tidak mungkin menghapus antrian yang sudah kosong.

7.1.3

Pola Antrian Operator penyisipan (insertion) disebut INSERT dan operator penghapusan

(deletion) disebut Remove. Sebagai contoh untuk memperjelas bekerjanya antrean,

perhatikan sederetan operasi berikut ini. Kita mulai dengan antrean hampa Q. Antrean hampa Q, atau Q[ ] dapat disajikan seperti terlihat pada Gambar 7.1.

Gambar 7.1 Antrean hampa

Di sini : NOEL(Q) = 0 FRONT(Q) = tidak terdefinisi REAR(Q) = tidak terdefinisi Lalu insert elemen A, diperoleh Q = [A], seperti terlihat di Gambar 7.2

Gambar 7.2 Elemen A dimasukkan

Di sini : NOEL(Q) = 1 FRONT(Q) = A REAR(Q) = A Dilanjutkan dengan insert elemen B, sehingga diperoleh Q = [A, B], seperti terlihat di Gambar 7.3

Gambar 7.3 Elemen B dimasukkan setelah elemen A

Di sini : NOEL(Q) = 2 F

RONT(Q) = A REAR(Q) = B Dilanjutkan dengan INSERT elemen C, sehingga diperoleh Q = [A, B, C], seperti terlihat di Gambar 7.4.

Gambar 7.4 Elemen C dimasukkan setelah elemen B

Di sini : NOEL(Q) = 3 FRONT(Q) = A REAR(Q) = C Dilanjutkan dengan delete satu elemen dari Q, sehingga diperoleh Q = [B, C], seperti terlihat di Gambar 7.5.

Gambar 7.5 Satu elemen dihapus

Di sini : NOEL(Q) = 2 FRONT(Q) = B REAR(Q) = C

Demikian seterusnya, kita dapat melakukan serangkaian insert dan delete yang lain. Suatu kesalahan underflow dapat terjadi, yakni apabila kita melakukan penghapusan pada antrean hampa. Antrean dikatakan beroperasi dalam cara first-infirst-out (FIFO). Disebut demikian karena elemen yang pertama masuk merupakan elemen yang pertama ke luar. Model antrean, sangat sering ditemukan dalam kejadian sehari-hari, seperti

mobil yang menunggu untuk pengisian bahan bakar, mobil pertama dari antrean merupakan mobil pertama yang akan keluar dari antrean. Sebagai contoh lain adalah orang yang menunggu dalam antrean di suatu bank. Orang pertama yang berada di dalam barisan tersebut akan merupakan orang pertama yang akan dilayani. 7.1.4 Operasi Dasar Pada Antrean Ada 4 operasi dasar yang dapat dilakukan pada struktur data antrean, yakni :1. create(antrean) 2. isempty(antrean) 3. insert(elemen,antrean) 4. remove(antrean)

Berikut adalah penjelasan tentang operasi dasar pada antrian : 1. Create(antrean) Create(Q) adalah suatu operator untuk membentuk dan menunjukkan suatu antrean hampa Q. Berarti : Noel(Create(Q)) = 0 Front(Create(Q)) = tidak terdefinisi Rear(Create(Q)) = tidak terdefinisi 2. Isempty(antrean) Isempty(Q) adalah operator yang menentukan apakah antrean Q hampa atau tidak. Operand dari operator ini merupakan antrean, sedangkan hasilnya merupakan tipe data boolean. Di sini : Isempty(antrean) = true, jika Q hampa, yakni jika Noel(Q)=0 = false, dalam hal lain. Maka, Isempty(Create(Q)) = true. 3. Insert(Elemen, Antrean) Insert(E,Q) adalah operator yang memasukkan elemen E ke dalam antrean Q. Elemen E ditempatkan di bagian belakang dari antrean. Hasil dari operasi ini adalah antrean yang lebih panjang.

Di sini : REAR(INSERT(E,Q)) = E Qnoel adalah E ISEMPTY(INSERT(E,Q)) = false 4. Remove(antrean) Remove(Q) adalah operator yang menghapus elemen bagian depan dari Antrean Q. Hasilnya merupakan antrean yang lebih pendek. Pada setiap operasi ini, harga dari Noel(Q) berkurang satu, dan elemen kedua dari Q menjadi elemen

terdepan. Jika Noel(Q) = 0, maka Remove(Q) memberikan suatu kondisi error, yakni suatu underflow. Jelas bahwa Remove(Create(Q)) juga memberikan kondisi underflow error. 7.1.5 Penyajian Dari Antrean Antrean dapat disajikan di dalam komputer dalam berbagai cara. Biasanya dengan menggunakan one-way-list (linear linked list) ataupun menggunakan array. Kalau tidak disebutkan lain, maka antrean kita sajikan dalam array Queue, dengan dilengkapi dua variabel penunjuk. Front, berisi lokasi dari elemen Depan antrean dan Rear, berisi lokasi dari elemen Belakang antrean. Nilai Front = Null menunjukkan bahwa antrean adalah hampa. Gambar 7.6 menunjukkan bagaimana menyajikan suatu antrean dalam sebuah array Queue dengan N elemen. Gambar itu juga menunjukkan bagaimana melakukan pemasukan dan penghapusan elemen antrean Pada Gambar 7.7 terlihat bahwa antrean mula-mula terdiri atas elemen AAA (sebagai Depan), BBB, CCC, dan DDD (sebagai Belakang). Gambar 7.8 menunjukkan keadaan setelah penghapusan elemen. Di sini elemen Depan yakni AAA dihapus. Gambar 4.6.(c) menggambarkan keadaan setelah penambahan berturut-turut elemen EEE dan FFF. Terakhir sekali, keadaan setelah penghapusan elemen Depan, BBB.

Gambar 7.6 Cara Kerja Antrean

Dapat kita lihat bahwa pada setiap kali penghapusan, nilai lokasi Front akan bertambah 1. Untuk setiap kali pemasukan elemen, nilai Rear akan bertambah 1. Hal ini berakibat bahwa setelah pemasukan elemen ke N (berawal dari antrean hampa), maka lokasi Queue(N) telah diduduki. Di sini mungkin saja tidak sebanyak N elemen ada dalam antrean (karena sudah dilakukan beberapa penghapusan). Untuk melakukan pemasukan berikutnya, yakni memasukkan elemen Item, kita dapat menggunakan lokasi Queue(1). Demikian seterusnya. Dalam hal ini, kita menggunakan array sirkular, yakni bahwa Queue(1) datang sesudah Queue(N) di array dalam. Berdasarkan asumsi ini, maka Rear adalah 1. Secara yang sama, jika Front = N dan kita akan melakukan penghapusan, maka sekarang Front adalah 1, bukan N+l. Gambar 7.7 memperlihatkan antrean yang disimpan dalam array dengan 5 lokasi memori, sebagai array sirkular.

Gambar 7.7 Circular Array

Sekarang akan ditampilkan algoritma insert, yang dimaksudkan untuk memasukkan data ke dalam suatu antrean. yang mula-mula kita laksanakan dalam algoritma adalah, memeriksa kemungkinan terjadi overflow error, yakni dengan melihat apakah antrean tersebut terisi penuh. Algoritma kedua adalah algoritina delete yang dimaksudkan untuk menghapus elemen depan dari antrean.yang mula-mula kita laksanakan ialah memeriksa kemungkinan terjadi underflow error, yakni dengan melihat apakah antrean tersebut kosong.

7.2

Flowchart Pada bagian ini akan dijelaskan beberapa fungsi yang digunakan dalam

program antrian. Selain itu juga akan ditampilkan flowchart dari masing-masing fungsi untuk lebih memahami alur dari program tersebut.

7.2.1

Fungsi Tambah Fungsi ini digunakan untuk menginputkan elemen/nilai pada antrian yang

akan diinputkan secara manual oleh user. User dapat menginputkan nilai yang diinginkan dan program akan sendirinya mengisi masing masing nilai elemen sesuai dengan nilai yang diinputkan.

Gambar 7.8 Flowchart fungsi tambah

7.2.2

Fungsi Cetak Fungsi ini digunakan untuk menampilkan hasil dari nilai pada antrian yang

diinputkan oleh user. Fungsi ini juga menampilkan panjang antrian yang sudah dibuat oleh user.

Gambar 7.9 Flowchart fungsi cetak

7.2.3

Fungsi Hapus Fungsi ini digunakan untuk menghapus nilai daripada antrian yang pertama,

antrian akan terus maju hingga antrian paling belakang habis. Fungsi ini juga menampilkan nilai mana yang dihapuskan.

Gambar 7.10 Flowchart fungsi hapus

7.2.4

Prosedur Program Utama Prosedur ini digunakan untuk menampilkan isi keseluruhan dari program

yang telah dibuat, atau dikatakan sebagai user interface dari suatu program. Sehingga disini hanya memanggil fungsi-fungsi yang telah dibuat untuk menciptakan program menjadi satu kesatuan yang utuh.

Gambar 7.11 Fungsi program utama

7.3

Kode ProgramPada bagian ini akan ditampilkan sintaks program yang digunakan untuk

membangun program antrian. Berikut sintaks yang digunakan adalah :#include #include #include #include #define MAX 50 char *p[MAX], *pop(void); int antrian = 0; int rpos = 0; void tambah(void), push(char *q), cetak(void), hapus(void); void tambah(void) { char s[50], *p; do { printf("antrian %d: ", antrian+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 cetak(void) { int t; for(t=rpos; t < antrian; ++t) printf("%d. %s\n", t+1, p[t]); } void hapus(void) { char *p; if((p=pop())==NULL) { return; } printf("%s\n", p); } void push(char *q) { if(antrian==MAX) { printf("List Full\n"); return; } p[antrian] = q; antrian++; } char *pop(void) { if(rpos==antrian) { printf("No more.\n"); return NULL; } rpos++; return p[rpos-1]; } int main(void) { char s[50];

register int t; for(t=0; t < MAX; ++t) { p[t] = NULL; } while(1) { printf("Tambah(T), Cetak(C), Hapus(H), Keluar(K): "); gets(s); *s = toupper(*s); switch(*s) { case 'T': tambah(); break; case 'C': cetak(); break; case 'H': hapus(); break; case 'K': exit(0); } } return 0; } Kode Program 7.1 Sintaks program antrian

7.4

Uji Coba Program Pada bagian ini akan ditampilkan hasil running program antrian. Hasil yang diperoleh dari program di atas adalah sebagai berikut.

Gambar 7.12 Tampilan awal program

Pada tampilan diatas terdapat 4 jenis menu yaitu Tambah, cetak, hapus, dan keluar. Untuk menambah jumlah antrian digunakan fungsi tambah, contohnya terdapat pada gambar 7.12.

Gambar 7.13 Program Tambah Antrian

Setelah ditambahkan antrian, jumlah dari antrian tersebut kita tambah kembali sehingga antrian yang ada semakin panjang. Setelah menambahkan antrian untuk menampilkan antrian yang ada digunakan fungsi cetak untuk menampilkan antrian yang ada, seperti yang terdapat pada gambar 7.13.

Gambar 7.14 Program Tambah Antrian

Begitu antrian telah ditambah, sekarang antrian dapat pula dihapus, fungsi hapus digunakan untuk menghapus barisan terdepan daripada suatu antrian. Contohnya terdapat pada gambar 7.14.

Gambar 7.15 Program Antrian