BAB IV Antrian(Queue)

dokumen-dokumen yang mirip
Praktikum 5. Antrian (Queue)

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

A. TUJUAN PEMBELAJARAN

ARNA FARIZA YULIANA SETIOWATI

BAB III QUEUE (ANTRIAN)

STRUKTUR DATA POKOK BAHASAN - 8 QUEUE ( ANTRIAN)

05. Double Linked List

Algoritma Dan Struktur Data II. Queue

Algoritma Pemrograman & Struktur Data

DIG1G3 Implementasi Struktur Data

ALGORITMA DAN STRUKTUR DATA ARRAY STACK DAN QUEUE

*Sekumpulan elemen yang diatur secara terurut. *Linear List tidak sama dengan Connected-List

Struktur Data Array. Rijal Fadilah S.Si

QUEUE (ANTREAN) Pertemuan 6 PENGERTIAN QUEUE (ANTREAN)

Stack. Gambar 1.1 Stack

QUEUE (ANTRIAN) Depan=1 Belakang=

LAPORAN PRAKTIKUM RESMI QUEUE

MODUL PEMROGRAMAN 2. Queue (Antrian)

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

04. Single Linked List

Algoritma dan Struktur Data. Ramos Somya

Antrian (Queue) Susunan koleksi data dimana proses penambahan data (add) dilakukan dari belakang dan penghapusan data (delete) dilakukan dari depan.

1. Traversing Untuk algoritma traversing sama seperti pada single Link List

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Queue.

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

Algoritma dan Struktur Data. Queue

QUEUE (ANTRIAN) Struktur Data - Queue

KUM 5 IMPLEMENTASI QUEUE

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

Algoritma Dan Struktur Data II

DOUBLE LINKED LIST. Danang Wahyu Utomo Danang Wahyu Utomo, M.Kom, M.CS

LOGO STRUKTUR DATA QUEUE

IX. Implementasi ADT : Stacks & Queues. Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based

Algoritma Dan Struktur Data II

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE

Tutorial - Single Linked List

5. QUEUE (ANTRIAN) TUJUAN PRAKTIKUM

STACK DAN QUEUE (Muhammad Fachrie, STMIK Amikom Yogyakarta)

# NINE Queue dengan Array

BAB VIII QUEUE (ANTRIAN)

Tumpukan(Stack)!! " # $ %&' $ %& ( ) ( * +, / ( (

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

STRUKTUR DATA (2) Single Linked List

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Struktur Data II. Single Linked List - Non circular

Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

STACK dan QUEUE MODUL PRAKTIKUM STRUKTUR DATA 09 UNIVERSITAS KRISTEN DUTA WACANA. Daftar Isi: Stack dan Queue. Latihan soal. Guided.

SENARAI BERANTAI (LINK LIST)

Data structure :Metode LINK LIST. Kusnawi, S.Kom, M.Eng STMIK AMIKOM Yogyakarta

Implementasi Queue menggunakan Array. Imam Fahrur Rozi

Praktikum Algoritma dan Struktur Data

Linked List 6.3 & 7.3 NESTED LOOP

SINGLE LINKED LIST (NON CIRCULAR)

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

QUEUE (ANTREAN) Operasi Antrean : FIFO (First In First Out) Elemen yang pertama masuk merupakan elemen yang pertama keluar.

LIST. Dewi Sartika, M.Kom

Senarai berantai. linked list. Pertemuan keenam Struktur data st3telkom.ac.id. by : tenia wahyuningrum & Sisilia Thya Safitri

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

MODUL 6 SINGLE & DOUBLE LINKED LIST

SINGLE LINKED LIST NON CIRCULAR (SENARAI BERANTAI TUNGGAL TIDAK BERPUTAR)

PRAKTIKUM STRUKTUR DATA QUEUE. SULIDAR FITRI, M.Sc

KONSEP POINTER DAN LINKED LIST

Politeknik Elektronika Negeri Surabaya

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

BAB IV QUEUE ATAU ANTREAN

ARNA FARIZA YULIANA SETIOWATI

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

IF PEMROGRAMAN LANJUT TUGAS 1. Oleh : Andri Heryandi, M.T.

BAB II Senarai Berantai (Linked List)

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

QUEUE ( ANTREAN ) 4.1. PENGERTIAN QUEUE (ANTREAN)

//membuat sebuah tipe data baru yang terdiri dari. //field data bertipe integer //field next merupakan pointer dari list

Algoritma dan Struktur Data. Ramos Somya

Pertemuan 7. REVIEW dan QUIS

Algoritma dan Struktur Data. Linked List

KONSEP POINTER DAN LINKED LIST

Algoritma dan Struktur Data STACK

TIF 4201 Algoritma Dan Struktur Data

Pertemuan 3. Perubah Dinamis (Dinamic variable) Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

QUEUE / ANTREAN. Pertemuan 7 Yani sugiyani, M.Kom

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

Pertemuan VI ANTRIAN (Queue)

PERTEMUAN KE-6. Pertemuan 6

STRUKTUR DATA. Literatur

DIG1G3 Implementasi Struktur Data

QUEUE Antrian 1. DEFINISI

Array VS Linked List

Praktikum 4. Tumpukan (Stack)

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

STRUKTUR DATA single linked list non circular

Lab. Teknik Informatika Struktur Data 1

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA QUEUE

Stack. Pointer ke node pertama dari stack. Bagian deklarasi di atas kita asumsikan disimpan menjadi sebuah header file dengan nama stack.

Materi 9 : QUEUE (ANTREAN) Dosen:

A. TUJUAN PEMBELAJARAN

Queue Priority Queue STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 6 : 7 Juli 2015

Laporan makalah ini berjudul Queue (Antrian), laporan ini diharapkan dapat menjadi literatur bagi proses belajar mengajar dalam perkuliahan, terutama

Transkripsi:

BAB IV Antrian(Queue) Tujuan 1. Memahami berbagai cara untuk merepresentasikan queue secara sekuensial maupun dengan menggunakan linked list 2. Memahami implementasi queue dalam menyelesaikan sebuah permasalahan Karakteristik yang membedakan queue (antrian) dari stack adalah cara menyimpan dan mengambil data dengan struktur first in first out (FIFO). Hal ini berarti elemen pertama yang ditempatkan pada queue adalah yang pertama dipindahkan. Contoh yang paling populer untuk membayangkan sebuah queue adalah antrian pada kasir sebuah bank. Ketika seorang pelanggan datang, akan menuju ke belakang dari antrian. Setelah pelanggan dilayani, antrian yang berada di depan akan maju. Pada saat menempatkan elemen pada ujung (tail) dari queue disebut dengan enqueue, pada saat memindahkan elemen dari kepala (head) sebuah queue disebut dengan dequeue. Pada Gambar 5.1 diperlihatkan sebuah queue serta proses enqueue dan dequeue. head tail A B head A B C D tail E head C D tail E Gambar 5.1 (1) Queue dengan 2 elemen; (2) Queue setelah proses enqueue C, D dan E; (3) Setelah proses dequeue A dan B 4.1 Karakteristik Queue Karakteristik penting dari antrian adalah : 29

1. Elemen antrian yaitu item-item data yang terdapat di elemen antrian 2. Front (elemen terdepan dari antrian) 3. Rear (elemen terakhir dari antrian) 4. Jumlah elemen pada antrian (Count) 5. Status antrian Kondisi antrian yang menjadi perhatian adalah ; 1. Penuh Bila elemen pada antrian mencapai kapasitas maksimum antrian. Pada kondisi ini, tidak mungkin dilakukan penambahan ke antrian. Penambahan elemen menyebabkan kondisi kesalahan Overflow. 2. Kosong Bila tidak ada elemen pada antrian. Pada kondisi ini, tidak mngkin dilakukan pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan Overflow. 4.2 Representasi Antrian Representasi antrian secara sekuen relatif lebih sulit dibanding stack. Seperti dijelaskan di atas bahwa antrian juga merupakan satu kumpulan data. Dengan demikian tipe data yang sesuai untuk menyajikan antrian adalah menggunakan array atau linked list. 4.2.1 Implementasi Antrian dengan Array Seperti halnya pada tumpukan, maka dalam antrian kita juga mengenal ada dua operasi dasar, yaitu menambah elemen baru yang akan kita tempatkan di bagian belakang antrian dan menghapus elemen yang terletak di bagian depan antrian. Disamping itu seringkali kita juga perlu melihat apakah antrian mempunyai isi atau dalam keadaan kosong. Operasi penambahan elemen baru selalu bisa kita lakukan karena tidak ada pembatasan banyaknya elemen dari suatu antrian. Tetapi untuk menghapus elemen, maka kita harus melihat apakah antrian dalam keadaan kosong atau tidak. Tentu saja kita tidak mungkin menghapus elemen dari suatu antrian yang sudah kosong. Untuk menyajikan antrian menggunakan array, maka kita membutuhkan deklarasi antrian, misalnya sebagai berikut: #define MAXQUEUE 100; typedef int ItemType; 30

typedef struct int Count; int Front; int Rear; ItemType Item[MAXQUEUE]; Queue; Front, menunjukkan item yang paling depan, yaitu elemen yang akan dihapus jika dilakukan operasi penghapusan. Setelah kita melakukan penghapusan, kita melakukan increment pada indeks Front, sehingga indeks menunjuk pada posisi berikutnya. Jika indeks ini jatuh pada angka tertinggi, yaitu angka paling maksimum dari array (N), maka kita melakukan setting ulang ke 0. Array Item[0:N-1] berisi N item yang merupakan isi dari antrian. Berada pada posisi 0:N-1dimana pada posisi ini dapat diindikasikan dua pengenal, yaitu Front dan Rear. Count menunjukkan jumlah item dalam antrian. Rear menunjukkan posisi dimana setelahnya dapat dimasukkan item berikutnya. Representasi antrian lengkap dengan operasi-operasi yang merupakan karakteristik antrian adalah sebagai berikut: #include <stdio.h> #include <stdlib.h> #define MAXQUEUE 100; typedef int ItemType; typedef struct int Count; int Front; int Rear; ItemType Item[MAXQUEUE]; Queue; void InitializeQueue(Queue *Q) Q->Count = 0; Q->Front = 0; Q->Rear = 0; 31

int Empty(Queue *Q) return(q->count == 0); int Full(Queue *Q) return(q->count == MAXQUEUE); void Insert(ItemType ins, Queue *Q) if (Q->Count == MAXQUEUE) printf("tidak dapat memasukkan data! Queue Penuh!"); else Q->Item[Q->Rear] = ins; Q->Rear = (Q->Rear + 1) % MAXQUEUE; ++(Q->Count); void Remove(Queue *Q, ItemType *rm) if (Q->Count == 0) printf("tidak dapat mengambil data! Queue Kosong!"); else *rm = Q->Item[Q->Front]; Q->Front = (Q->Front + 1) % MAXQUEUE; --(Q->Count); Program 4.1 Implementasi Antrian dengan Array 32

Jika kita meletakkan beberapa item yang baru dari antrian dalam sebuah array, maka kita menambahkannya pada Rear dan memindah item dari Front. Dengan penambahan dan pengurangan item ini, permasalahan akan terjadi jika ukuran dari array habis. Kita bisa keluar dari permasalahan ini jika kita merepresentasikan antrian secara circular. Cara mensimulasikan antrian secara circular dalam array linear menggunakan arithmetic modular. Arithmetic modular menggunakan ekspresi rumus (X % N) untuk menjaga besarnya nilai X pada range 0:N-1. Jika indeks telah sampai pada N dengan penambahan atau pengurangan tersebut, maka indeks akan diset pada angka 0. Hal yang sama juga dilakukan pada Front jika dilakukan pengambilan item dari antrian. Setelah mengambil item dari antrian, kita melakukan increment terhadap Front untuk penunjukan pada posisi sesudahnya. Apabila indeks telah berada pada N, maka indeks diset juga pada angka 0. Perintah di bawah ini merupakan perintah yang menunjukkan proses Arithmetic Modular yang diterapkan pada antrian. Front = (Front + 1) % N; Rear = (Rear +1) % N; 4.2.2 Implementasi Antrian dengan Linked list Antrian yang direpresentasikan dengan linked list mempunyai beberapa variasi. Pada kesempatan kali ini hanya direpresentasikan satu macam saja. Linked list yang digunakan di sini menggunakan struktur yang berisi pointer yang menunjuk pada simpul Front dan Rear dari linked list. Masing-masing simpul berisi data dari antrian dan juga link yang menunjuk pada simpul selanjutnya dari linked list, yang dinamakan Link. #include <stdio.h> #include <stdlib.h> typedef int ItemType; typedef struct QueueNodeTag ItemType Item; struct QueueNodeTag *Link; QueueNode; typedef struct QueueNode *Front; QueueNode *Rear; Queue; 33

void InitializeQueue(Queue *Q) Q->Front = NULL; Q->Rear = NULL; int Empty(Queue *Q) return(q->front == NULL); int Full(Queue *Q) return 0; void Insert(ItemType R, Queue *Q) QueueNode *Temp; Temp = (QueueNode *) malloc(sizeof(queuenode)); if (Temp == NULL) printf("queue tidak dapat tercipta"); else Temp->Item = R; Temp->Link = NULL; if (Q->Rear == NULL) Q->Front = Temp; Q->Rear = Temp; else Q->Rear->Link=Temp; Q->Rear = Temp; 34

void Remove(Queue *Q, ItemType *F) QueueNode *Temp; if (Q->Front == NULL) printf("queue masing kosong!"); else *F = Q->Front->Item; Temp = Q->Front; Q->Front = Temp -> Link; free(temp); if(q->front == NULL) Q->Rear = NULL; Program 4.2 Implementasi Antrian dengan Linked list 4.3 Antrian Berprioritas Dalam antrian yang telah dibahas di atas, semua elemen yang masuk dalam antrian dianggap mempunyai prioritas yang sama, sehingga elemen yang masuk lebih dahulu akan diproses lebih dahulu. Dalam praktek, elemen-elemen yang akan masuk dalam suatu antrian ada yang dikatakan mempunyai prioritas yang lebih tinggi dibanding yang lain. Antrian yang demikian ini disebut dengan antrian berprioritas (priority queue). Dalam antrian berprioritas, setiap elemenn yang akan msuk dalam antrian sudah ditentukan lebih dahulu prioritasnya. Dalam hal ini berlaku dua ketentuan, yaitu: 1. Elemen-elemen yang mempunyai prioritas lebih tinggi akan diproses lebih dahulu. 2. Dua elemen yang mempunyai prioritas sama akan dikerjakan sesuai dengan urutan pada saat kedua elemen ini masuk dalam antrian. Dengan memperhatikan kedua ketentuan di atas, akan berlaku ketentuan bahwa elemen yang mempunyai prioritas lebih tinggi akan dikerjakan lebih dahulu dibanding elemen yang mempunyai prioritas lebih rendah, meskipun elemen yang berprioritas tinggi masuknya sesudah elemen yang berprioritas rendah. Salah satu contoh antrian berprioritas ini adalah pada sistem berbagi waktu (time-sharing system) dimana program yang mempunyai prioritas tinggi akan dikerjakan lebih dahulu dan program-program yang berprioritas sama akan membentuk antrian biasa. 35

Ada beberapa cara untuk mengimplementasikan antrian berprioritas. Salah satu caranya adalah dengan menggunakan linked list. Jika kita menggunakan linked list, khususnya single linked list atau double linked list, maka ada ketentuan lain yang perlu diperhatikan, yaitu: 1. Setiap node dari linked list terdiri tiga bagian, yaitu bagian informasi, angka prioritas dan bagian-bagian penyambung ke simpul lain. 2. Simpul X mendahului (terletak di sebelah kiri) simpul Y, jika prioritas X lebih tinggi dibanding prioritas Y atau jika prioritas X dan Y sama, maka simpul X datang lebih dahulu dibanding dengan Y. Biasanya dibuat suatu perjanjian bahwa angka prioritas yang lebih kecil menunjukkan derajad prioritas yang lebih tinggi. Sebagai contoh, jika angka prioritas pada simpul X adalah 1 dan pada simpul Y adalah 2, maka dikatakan bahwa simpul X berprioritas lebih tinggi dibanding dengan simpul Y. 4.4 Kesimpulan 1. Antrian (qeue) adalah sebuah bentuk struktur yang berdasarkan pada proses FIFO (First In First Out) 2. Antrian dapat diimplementasikan dengan menggunakan array atau linked list 4.5 Latihan 1. Implementasikan program simulasi tempat parkir. Program simulasi ini didasarkan pada persoalan berikut. Ada suatu tempat parkir yang hanya bisa memuat mobil dalam satu baris, jumlah mobil yang bisa masuk untuk nomor ini bisa dibatasi. Mobil masuk lewat pintu Utara (belakang) dan keluar lewat pintu Selatan (depan). Jika mobil yang berada paling depan (di sisi paling Selatan) akan keluar maka mobil tersebut segera bisa keluar. Tetapi jika mobil yang akan keluar adalah mobil yang di tengah, maka mobil yang terletak di depannya (di sebelah Selatan) harus dikeluarkan sementara. Setelah mobil yang dimaksud keluar, maka mobil yang dikeluarkan sementara tadi dimasukkan kembali ke tempat parkir dengan susunan seperti semula. Sehingga mobil yang semula berada paling depan tetap berada pada posisinya semula. Mobil-mobil yang terletak di sebelah Utaranya mobil yang keluar tadi digeser maju ke depan, sehingga bagian kosong selalu berada pada pintu Utara (belakang). Dengan memperhatikan persoalan di atas, sebenarnya simulasi ini selain berisi antrian juga berisi tumpukan, yakni pada saat sebuah mobil yang berada di 36

tengah akan dikeluarkan, maka semua mobil yang ada di sebelah Selatannya ditumpuk (di-push) di tempat penampungan sementara. Baru setelah mobil yang dimaksud keluar, maka semua mobil yang berada di tempat penampungan sementara dipop kembali. Dengan cara ini semua mobil akan mempunyai posisi yang sama seperti sebelum suatu mobil dikeluarkan dari tempat parkir. 2. Implementasikan persoalan no.1 dengan jumlah mobil yang bisa masuk tidak dibatasi. 37