Anda di halaman 1dari 16

LAPORAN PRATIKUM 4

“Data Sructure and Algorithm”

Nama : Khairul azmi


NIM : 1990343027
Kelas : TRKJ 1B

PROGRAM STUDI TEKNOLOGI REKAYASA KOMPUTER JARINGAN

JURUSAN TEKNOLOGI INFORMASI DAN KOMPUTER

POLITEKNIK NEGERI LHOKSEUMAWE

2019
1. DASAR TEORI
QUEQUE
Tujuan :

1. Menjelaskan pengertian queque


2. Menjelaskan cara menggunakan fungsi fungsi queue
3. Menjelaskan cara mengakses elemen queue
4. Menjelaskan pembentukan queque

Pengertian struktur data Antrian(queue)


Queue jika diartikan secara harfiah, queue berarti antrian, Queue merupakan suatu
struktur data linear. Konsepnya hampir sama dengan Stack, perbedaannya adalah operasi
penambahan dan penghapusan pada ujung yang bebeda. Pada Stack atau tumpukan
menggunakan prinsip “Masuk terakhir keluar pertama”atau LIFO (Last In First Out), Maka
pada Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau
FIFO (First In First Out).Data-data di dalam antrian dapat bertipe integer, real, record dalam
bentuk sederhana atau terstruktur.
Antrian disebut juga “Waiting Line” yaitu penambahan data baru dilakukan pada bagian
belakang dan penghapusan data dilakukan pada bagian depan.
Queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang
cukup sering kita temui dalam kehidupan sehari-hari,
Queue (Antrian) adalah list linier yang :
1. Dikenali data pertama (Head) dan data terakhirnya (Tail)
2. Aturan penyisipan dan penghapusan datanya disefinisikan sebagai berikut :
- Penyisipan selalu dilakukan setelah data terakhir
- Penghapusan selalu dilakukan pada data pertama
3. Satu data dengan data lain dapat diakses melalui informasi

(1) Queue dengan 2 data;


(2) Queue setelah proses enqueue C, D dan E;
(3) Setelah proses dequeue A dan B
Antrian Berprioritas
Dalam antrian yang telah dibahas di atas, semua data yang masuk dalam antrian dianggap
mempunyai prioritas yang sama, sehingga data yang masuk lebih dahulu akan diproses lebih
dahulu. Dalam praktek, data-data 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 datan yang akan msuk dalam antrian sudah ditentukan
lebih dahulu prioritasnya. Dalam hal ini berlaku dua ketentuan, yaitu:
1. Data-data yang mempunyai prioritas lebih tinggi akan diproses lebih dahulu.
2. Dua data yang mempunyai prioritas sama akan dikerjakan sesuai dengan urutan
pada saat kedua data ini masuk dalam antrian.
Dengan memperhatikan kedua ketentuan di atas, akan berlaku ketentuan bahwa data yang
mempunyai prioritas lebih tinggi akan dikerjakan lebih dahulu dibanding data yang mempunyai
prioritas lebih rendah, meskipun data yang berprioritas tinggi masuknya sesudah data 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.
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:
Setiap node dari linked list terdiri tiga bagian, yaitu bagian informasi, angka prioritas dan bagian-
bagian penyambung ke simpul lain.
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.
Contoh Antrian(queue) dalam kehidupan sehari-hari

Antrian mobil di pintu tol


Ketika sebuah mobil datang, dari belakang akan menuju kedepan dari antrian. Setelah
mobil mendapatkan karcis tol, antrian yang berada di depan akan maju. Pada saat menempatkan
data pada ujung (tail) dari queue disebut denganenqueue, pada saat memindahkan data dari
kepala (head) sebuah queue disebut dengan dequeue.

Antrian loket

Data yang pertama kali masuk ke antrian akan keluar pertama kalinya
Dequeue adalah mengeluarkan satu data dari suatu Antrian
Antrian dapat dibuat dengan menggunakan: Liniear Array dan Circular Array
Kondisi antrian yang menjadi perhatian adalah:
1. Penuh
Bila data pada antrian mencapai kapasitas maksimum antrian. Pada kondisi ini, tidak
mungkin dilakukan penambahan ke antrian. Penambahan data menyebabkan kondisi
kesalahan Overflow.
2. Kosong
Bila tidak ada data pada antrian. Pada kondisi ini, tidak mngkin dilakukan penghapusan data
dari antrian. Pengambilan data menyebabkan kondisi kesalahan Overflow.

Operasi-operasi pada Antrian(queue)


1. Create()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1
2. 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 (data pertama
dalam antrian) yang tidak akan berubah-ubah. Pergerakan pada Antrian terjadi dengan
penambahan data Antrian kebelakang, yaitu menggunakan nilai tail
3. IsFull()
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai tail, jika tail >= MAX-1 (karena MAX-1 adalah batas data
array pada C) berarti sudah penuh
4. Enqueue
Untuk menambahkan data ke dalam Antrian, penambahan data selalu ditambahkan di data
paling belakang. Penambahan data selalu menggerakan variabel tail dengan cara increment
counter tail
5. Dequeue()
Digunakan untuk menghapus data terdepan/pertama dari Antrian
Dengan cara mengurangi counter Tail dan menggeser semua data antrian kedepan.
Penggeseran dilakukan dengan menggunakan looping
6. Clear()
Untuk menghapus data-data Antrian dengan cara membuat tail dan head = -1.
Penghapusan data-data Antrian sebenarnya tidak menghapus arraynya, namun hanya
mengeset indeks pengaksesan-nya ke nilai -1 sehingga data-data Antrian tidak lagi terbaca
7. Tampil()
Untuk menampilkan nilai-nilai data Antrian menggunakan looping dari head s/d tail

Implementasi Antrian dengan Array


Seperti halnya pada tumpukan, maka dalam antrian kita juga mengenal ada dua operasi
dasar, yaitu menambah data baru yang akan kita tempatkan di bagian belakang antrian dan
menghapus data yang terletak di bagian depan antrian. Disamping itu seringkali kita juga perlu
melihat apakah antrian mempunyai isi atau dalam keadaan kosong. Operasi penambahan data
baru selalu bisa kita lakukan karena tidak ada pembatasan banyaknya data dari suatu antrian.
Tetapi untuk menghapus data, maka kita harus melihat apakah antrian dalam keadaan kosong
atau tidak. Tentu saja kita tidak mungkin menghapus data 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;
typedef struct{
int Count;
int Front;
int Rear;
ItemType Item[MAXQUEUE];
}Queue;

Front, menunjukkan item yang paling depan, yaitu data 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 <conio.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;
32 }
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);
}}

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;

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.
2. ALAT DAN BAHAN
 LAPTOP
 DEV ++

3. LANGKAH DAN PERCOBAAN

1. /* Simple Queue Program in C*/


/* Data Structure Programs,C Array Examples */
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAX_SIZE 100
int main() {
int item, choice, i;
int arr_queue[MAX_SIZE];
int rear = 0;
int front = 0;
int exit = 1;
printf("\nSimple Queue Example - Array");
do {
printf("\n\n Queue Main Menu");
printf("\n1.Insert \n2.Remove \n3.Display \nOthers to exit");
printf("\nEnter Your Choice : ");
scanf("%d", &choice);
switch (choice) {
case 1:
if (rear == MAX_SIZE)
printf("\n## Queue Reached Max!!");
else {
printf("\nEnter The Value to be Insert : ");
scanf("%d", &item);
printf("\n## Position : %d , Insert Value : %d ", rear + 1, item);
arr_queue[rear++] = item;
}
break;
case 2:
if (front == rear)
printf("\n## Queue is Empty!");
else {
printf("\n## Position : %d , Remove Value : %d ", front,
arr_queue[front]);
front++;
}
break;
case 3:
printf("\n## Queue Size : %d ", rear);
for (i = front; i < rear; i++)
printf("\n## Position : %d , Value : %d ", i, arr_queue[i]);
break;
default:
exit = 0;
break;
}
} while (exit);
return 0;
}
2. /* Simple Queue Program Using Functions in C*/
/* Data Structure Programs,C Array Examples */
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAX_SIZE 100
int item, choice, i;
int arr_queue[MAX_SIZE];
int rear = 0;
int front = 0;
int exit_p = 1;
void insert() {
if (rear == MAX_SIZE)
printf("\n## Queue Reached Max!");
else {
printf("\nEnter The Value to be Insert : ");
scanf("%d", &item);
printf("\n## Position : %d , Insert Value : %d ", rear + 1, item);
arr_queue[rear++] = item;
}
}
void removeData() {
if (front == rear)
printf("\n## Queue is Empty!");
else {
printf("\n## Position : %d , Remove Value : %d ", front, arr_queue[front]);
front++;
}
}
void display() {
printf("\n## Queue Size : %d ", rear);
for (i = front; i < rear; i++)
printf("\n## Position : %d , Value : %d ", i, arr_queue[i]);
}
int main() {
printf("\nSimple Queue Example - Array and Functions");
do {
printf("\n\n Queue Main Menu");
printf("\n1.Insert \n2.Remove \n3.Display \nOthers to exit");
printf("\nEnter Your Choice : ");
scanf("%d", &choice);
switch (choice) {
case 1:
insert();
break;
case 2:
removeData();
break;
case 3:
display();
break;
default:
exit_p = 0;
break;
}
} while (exit_p);
return 0;
}
4. HASIL PERCOBAAN
4.1. Percobaan (1)

Gambar 1.1 /* File program : /* Simple Queue Program in C*/


Analisa:

Program di atas merupakan program queue yang mempunyai fungsi proses PUSH
dan proses POP di dalamnya, stack dideklarasikan dengan array dengan fungsi antrian
dimana dalam program tersebut terdapat menu pilihan dintaranya tambah antrian,
hapus antrian, lihat antrian dan exit. Ketika menginputkan tambah maka akan terus di
tambahkan, dan yang pertama di inputkan yang pertama di eksekusi apabila memilih
hapus antrian, seperti contoh di atas, program diatas memiliki insert, remove,
display,%d adalah mencetak nilai decimal kemudian terdapat printf maka disana dia
akan menyetak sebuah program yang kita input kemudian terdapat else untuk
melakukan penyelesaian program dan if adalah pembaca program melakukan
pengecekkan data jika ya maka dia maka akan melanjutkan dan jika tidak maka dia
tidak melanjutkan.
Output program

Gambar 1.2 /* output program : /* Simple Queue Program in C*/


4.2. Percobaan (2)

Gambar 1.3 /* File program : /* Simple Queue Program Using Functions in C*/
Analisa:

Program di atas merupakan program queue yang mempunyai fungsi proses PUSH
dan proses POP di dalamnya, stack dideklarasikan dengan array dengan fungsi antrian
dimana dalam program tersebut terdapat menu pilihan dintaranya tambah antrian,
hapus antrian, lihat antrian dan exit. Ketika menginputkan tambah maka akan terus di
tambahkan, dan yang pertama di inputkan yang pertama di eksekusi apabila memilih
hapus antrian, seperti contoh di atas, program diatas memiliki insert, remove,
display,%d adalah mencetak nilai decimal kemudian terdapat printf maka disana dia
akan menyetak sebuah program yang kita input kemudian terdapat else untuk
melakukan penyelesaian program.
Output program

Gambar 1.4 /* output program : /* Simple Queue Program Using Functions in C*/
5. KESIMPULAN

 Simpul adalah semacam tipe data yang kita buat sendiri sebagaimanan nama tipe yang telah
disediakan oleh bahasa pemrograman.
 Info adalah tempat penyimpanan data dengan tipe yang berbeda-beda sesuai keinginan.
 Link adalah tempat penyimpanan alamat simpulnya (pointer).
 Linked list adalah sebuah struktur untuk menyimpan data yang bersifat dinamik
 Beberapa operasi dapat diterapkan pada linked list seperti sisip(insert), hapus(delete)
 Operasi-operasi yang ada pada linked list relatif lebih sulit jika dibandingkan dengan operasi-
operasi pada struktur yang statis
 Null adalah suatu kondisi khusus dimana pointer itu belum di set dengan sebuah address
tertentu, artinya pointer tidak menunjuk ke alamat manapun.
 Antrian (queue) adalah sebuah bentuk struktur yang berdasarkan pada proses FIFO (First In
First Out)
 Contoh Antrian (queue) bisa kita temukan di kehidupan sehari-hari seperti antrian masuk
jalan tol dan loket antrian.
 Pengoperasian Antrian (qeue) berbagai macam seperti, Create, Enque, Deque, IsEmpty,
IsFull, Tampil, Clear, dsb.
 Antrian dapat diimplementasikan dengan menggunakan array atau linked list

Anda mungkin juga menyukai