Anda di halaman 1dari 6

Praktikum 6

Queue
NIM/Nama : 3312001006/Daffa Dhiya Ulhaq
Setelah mengikuti praktikum ini, mahasiswa diharapkan dapat:
 Menggambarkan konsep queue pada memory
 Membuat struktur data queue dalam bahasa C
 Melakukan operasi pada queue
 Mengaplikasikan queue pada program

1. Buatlah deklarasi queue dalam bahasa C yang bisa menyimpan nama pasien ke dalam
antrian! Salin dan jelaskan kode program di sini.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 5

typedef char string;


typedef struct {
string *data[MAX];
int count;
int front;
int rear;
}Queue;

Queue Q;
//membuat antrian
void create(Queue *Q){
(*Q).count= 0;
(*Q).front= 0;
(*Q).rear= -1;
}

//mengecek jika kosong


int isEmpty(Queue Q){
return(Q.count==0);
}
//mengecek jika penuh
int isFull(Queue Q){
return(Q.count==MAX);
}
//menambah antrian
void enqueue(Queue*Q, string*nama){
if(isFull(*Q)){
printf("Queue Penuh, enqueue gagal");

~1~
}
else{
(*Q).rear=((*Q).rear+1) %MAX;
(*Q).data[(*Q).rear]= malloc(strlen(nama)+1);
strcpy((*Q).data[(*Q).rear],nama);
(*Q).count++;
}
}
//mengurangi antrian
void dequeue(Queue*Q){
if(isEmpty(*Q)){
printf("Queue kosong, dequeue gagal");
}
else {
free((*Q).data[(*Q).front]);
(*Q).front=((*Q).front+1) %MAX;
(*Q).count--;
}
}

void Tampil(Queue Q){


int i;
for (i=0;i<Q.count;i++){
printf("Urutan Pasien ke[%d]=%s\n",i,Q.data[(Q.front+i)%MAX]);
}
}
Perubahan di prosedur mana saja yang berkaitan dengan perubahan data dalam deklarasi
queue? Jelaskan.
Typedef char String;
Buatlah prosedur dalam bahasa C untuk mencetak nama-nama pasien yang ada dalam
antrian. Salin dan jelaskan kode program di sini.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 5

typedef char string;


typedef struct {
string *data[MAX];
int count;
int front;
int rear;
}Queue;

Queue Q;
void create(Queue *Q){
(*Q).count= 0;
(*Q).front= 0;
(*Q).rear= -1;

~2~
}

int isEmpty(Queue Q){


return(Q.count==0);
}
int isFull(Queue Q){
return(Q.count==MAX);
}
void enqueue(Queue*Q, string*nama){
if(isFull(*Q)){
printf("Queue Overflow, enqueue gagal!");
}
else{
(*Q).rear=((*Q).rear+1) %MAX;
(*Q).data[(*Q).rear]= malloc(strlen(nama)+1);
strcpy((*Q).data[(*Q).rear],nama);
(*Q).count++;
}
}
void dequeue(Queue*Q){
if(isEmpty(*Q)){
printf("Queue Underflow, Dequeue gagal!");
}
else {
free((*Q).data[(*Q).front]);
(*Q).front=((*Q).front+1) %MAX;
(*Q).count--;
}
}

void Tampil(Queue Q){


int i;
for (i=0;i<Q.count;i++){
printf("Nama Pasien[%d]=%s\n",i,Q.data[(Q.front+i)%MAX]);
}
}

int main(){
create(&Q);
printf("Antrian Pasien:\n");
enqueue(&Q, "Dimas");
enqueue(&Q, "Agung");
enqueue(&Q, "Fayzal");
dequeue(&Q);
enqueue(&Q,"Ibnu");
Tampil(Q);
}
2. Dengan definisi fungsi dan prosedur yang telah Anda miliki sampai nomor 2 di atas,
buatlah program yang dapat mengelola antrian pasien di suatu klinik praktek dokter.

~3~
Ditentukan batas maksimal antrian pada satu hari adalah 30 pasien saja. Program
dapat menampilkan menu seperti contoh berikut.
PROGRAM ANTRIAN PASIEN
[1] Tambah Pasien
[2] Panggil Pasien
[3] Tampil Daftar Antrian
[4] Keluar
Salin dan jelaskan kode program Anda di sini.
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define MAX 30

typedef char string;


typedef struct{
string *data[MAX];
int count;
int front;
int rear;
} Queue;

Queue Q;
//membuat antrian
void create(Queue *Q){
(*Q).count = 0;
(*Q).front = 0;
(*Q).rear = -1;
}
//mengecek jika kosong
int isEmpty(Queue Q){
return (Q.count == 0);
}
//mengecek jika penuh
int isFull(Queue Q){
return (Q.count == MAX);
}
//menambah antrian
void enqueue(Queue *Q, string *nama){
if (isFull(*Q)){
printf("Queue Overflow, Enqueue Fail!");
}
else{
(*Q).rear = ((*Q).rear + 1) % MAX;
(*Q).data[(*Q).rear] = malloc(strlen(nama) + 1);
strcpy((*Q).data[(*Q).rear], nama);
(*Q).count++;
}
}
//mengurangi antrian
void dequeue(Queue *Q){

~4~
if (isEmpty(*Q)){
printf("Queue Underflow, Dequeue gagal!");
}
else {
free((*Q).data[(*Q).front]);
(*Q).front = ((*Q).front + 1) % MAX;
(*Q).count--;
}
}

void Tampil(Queue Q){


int i;
for (i=0;i<Q.count;i++){
printf("\n%s", Q.data[(Q.front+i)%MAX]);
}
}

int main(){
create(&Q);
int input;
char data[50];
printf("MENU QUEUE\n");
printf("[1]Tambah Pasien\n");
printf("[2]Panggil Pasien\n");
printf("[3]Tampil Daftar Antrian\n");
printf("[4]Keluar\n");

do{
printf("\nPilih : "); scanf("%d", &input);
if(input == 1){
printf("Masukkan nama : "), scanf("%s", &data);
enqueue(&Q, data);
}else if(input == 2){
dequeue(&Q);
}else if(input == 3){
Tampil(Q);
}else if(input == 4){
goto end;
}else{
printf("Salah input");
}
}while(input != 5);

end:
return 0;
}
Tampilkan hasil running program dan penjelasannya di sini.

~5~
Pertama program akan menampilkan menu, lalu apabila ada pasien datang pilih menu
No. 1,kemudian apabila ada yang datang lagi pilih No. 1 lagi, dan apabila dokter ingin
memanggil pasien maka pilih No. 2.

Kesimpulan
Setelah mengikuti praktikum ini, apa saja yang telah Anda pelajari?
Saya dapat Menggambarkan konsep queue pada memory, Melakukan operasi pada queue

Pengumpulan tugas praktikum:


Simpan laporan praktikum ini dengan nama P06_NIM.docx di folder yang sama dengan
folder tempat kode program. Namai folder dengan P06_NIM, kemudian zip. Upload ke
http://learning-if.polibatam.ac.id.

~6~

Anda mungkin juga menyukai