P. 1
Queue

Queue

|Views: 98|Likes:
Published by Ahmad Reza Musthafa

More info:

Published by: Ahmad Reza Musthafa on Aug 24, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/09/2013

pdf

text

original

Praktikum Pemrograman Bahasa C

PENDAHULUAN QUEUE TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: 1. Memahami konsep queue dan mengerti kegunaannya 2. Mengimplementasikan struktur queue dalam pemrograman 3. Mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan queue dan menyelesaikannya. TUGAS PENDAHULUAN: 1. Buatlah algoritma/flowchart untuk operasi shift kiri menggunakan queue Input : bilangan desimal dan jumlah shift Output : bilangan desimal setelah shift Contoh : Masukkan bilangan desimal : 25 Masukkan jumlah shift : 3 Bilangan desimal setelah shift : 18 PEMBAHASAN Algoritma : 1. Input : Memasukkan bilangan decimal, memasukkan jumlah shift 2. Membaca input bilangan decimal, simpan pada variable tertentu untuk input tersebut 3. Membaca input jumlah shift, simpan pada variable tertentu untuk input tersebut 4. Bagilah input bilangan decimal dengan format integer dengan input jumlah shift, sehingga diperoleh nilai yang belum tentu bernilai integer 5. Konversikan hasil pembagian tadi ke dalam bentuk variable bertipe integer 6. Buatlah shape dari input bilangan decimal, dimana setiap shape terdiri dari bilangan satuan yang mewakili dari semua bilangan dari input. Apabila terdapat n bilangan, maka banyaknya shape yaitu sebanyak n 7. Seleksi sebanyak sisa shape dimulai dari nilai decimal terbesar, dimana dalam gambar situnjukkan dari posisi kanan ke kiri. 8. Dari hasil seleksi, nilai yang terkecil merupakan Bilangan decimal setelah di shift. 1 2 3 4 5 6 7 8 9 1 0 Hasil pembagian (integer) = 8 1 2 3 4 5 6 7 8 9 1 0 Seleksi 8 shape dari kanan Bilangan setelah dishift = 18 1 2 3 4 5 6 7 8 9 1 0 1 1 1 1 1 1 1 2 1 2 1 2 1 3 1 3 1 3 1 4 1 4 1 4 1 5 1 5 1 5 1 6 1 6 1 6 1 7 1 7 1 7 1 8 1 8 1 8 1 9 1 9 1 9 2 0 2 0 2 0 2 1 2 1 2 1 2 2 2 2 2 2 2 3 2 3 2 3 2 4 2 4 2 4 2 5 2 5 2 5

1

Praktikum Pemrograman Bahasa C

QUEUE TUJUAN Setelah melakukan praktikum ini siswa diharapkan mengerti dan dapat membuat : 1. Cara lain untuk merepresentasikan sekumpulan data menggunakan queue 2. Anggota/elemen dari sebuah elemen queue dengan array atau linked list 3. Cara penggunaan queue dengan array ataupun dengan linked list 4. Penelusuran simpul/pembacaan queue = FIFO (first In First Out) SOAL-SOAL TUGAS PEMROGAMAN 1. Untuk latihan program no 1, 2, dan 3 buatlah bagan proses dari queue, untuk setiap operasi enqueuing (insert) dan dequeuing (remove) pada representasi array dan linked list jangan lupa memasukkan perubahan nilai indeks array dan perubahan nilai pointernya 2. Buatlah program simulasi penjadwalan CPU dengan queue berprioritas, parameter yang dimasukkan : o Waktu kedatangan (arrival time) o Waktu proses o Nilai prioritas Dapatkan total waktu yang dibutuhkan sampai selesai seluruh proses.

2

Praktikum Pemrograman Bahasa C

PEMBAHASAN 1. o PROGRAM 1
PROSEDUR MEMASUKKAN ELEMEN DALAM ANTRIAN struct antrian { char isi[MAX]; int depan; int belakang; } if(q.belakang==MAX) { if(q.depan==0) printf(“Antrian penuh”); else q.belakang=1; } q.belakang==MAX q.belakang=q.belakang+1 q.belakang==MAX

q.depan!=MAX

q.belakang==3 q.belakang==2 q.belakang==1 q.depan==0 q.belakang==1 q.belakang==0

If(q.depan!=q.belakang) q.isi[q.belakang]=x

if(q.belakang=MAX) q.depan=0; Cetak antrian sekarang

q.belakang==MAX

q.belakang==x

q.depan==0

q.depan==0

PROSEDUR MENGELUARKAN ELEMEN DARI ANTRIAN If(q.depan==MAX) q depan=0; else q.depan=q.depan+1; kardel=q.isi[q.depan];

q.depan==MAX

q.depan==1 q.depan==0 q.depan==0

LIFO

o

PROGRAM 2

3

Praktikum Pemrograman Bahasa C
struct antrian

plat

next

next

next

next

next

plat

plat

plat

plat

plat

depan

bantu

mobil

belakang

baru

MEMASUKKAN MOBIL KE DALAM ANTRIAN char noplat; j=1

next

plat

noplat

depan j!=1

depan

belakang

next

next

plat

noplat

next

plat

noplat

baru MENGELUARKAN MOBIL DARI ANTRIAN int ada=0;

baru

belakang

belakang=baru

next

plat

plat

mobil=depan

bantu=depan

while((ada==0)||(mobil!=NULL))

next

plat

noplat

next

next

ada=1;

mobil

mobil

next

next

plat

plat

plat

bantu=bantu->next mobil=bantu

ada=0;

plat

mobil=depan

next

next

free(mobil);

next

next

next

next

next

next

baru->plat=noplat; baru->next=NULL:

next

depan->plat=noplat; depan->next=NULL: belakang=depan;

next

plat

plat

plat

plat

plat

plat

depan=mobil->next; mobil else depan mobil depan

plat

next

next

bantu=depan

4

Praktikum Pemrograman Bahasa C
while((bantu->plat!=noplat))

next

next

next

next

plat

plat

noplat

plat

plat

break; bantu

next

next

next

next

plat

plat

noplat

plat

plat

bantu=bantu->next; mobil bantu

o

PROGRAM 3
struct antrian

prioritas data prioritas

next

data

next

next

next

next

prioritas

prioritas

prioritas

prioritas

depan

bantu

bantu1

belakang

baru

char dt;int bil; if(j==1)

next

prioritas

bil

depan char dt;int bil; else

belakang=depan

next

next

next

next

prioritas

prioritas

bil

prioritas

bil

baru

belakang

baru

belakang=baru

char kartemp;int biltemp;bantu=depan; while(bantu!=NULL)

next

next

next

next

prioritas

prioritas

prioritas

prioritas

prioritas

next

data

data

data

data

data

next

data

baru->data=dt; baru->prioritas=bil; baru->next=NULL; belakang->next=baru; belakang=baru;

next

data

depan->data=dt; depan->prioritas=bil; depan->next=NULL; belakang=depan;

dt

next

data

data

data

data

next

next

data

dt

data

dt

5

Praktikum Pemrograman Bahasa C

next

next

next

next

prioritas

prioritas

prioritas

prioritas

prioritas

bantu=bantu->next; bantu if(bantu1->prioritas<bantu->prioritas) biltemp=bantu->prioritas; bantu->prioritas=bantu1->prioritas; bantu1->prioritas=biltemp; kartemp=bantu->data; bantu->data=bantu1->data; bantu1->data=kartemp;

next

next

next

next

prioritas biltemp

prioritas

prioritas

prioritas

prioritas

bantu

next

next

next

next

prioritas biltemp

prioritas

prioritas

prioritas

prioritas

bantu

bantu1

next

next

next

next

prioritas biltemp

prioritas

prioritas

prioritas

prioritas

bantu

bantu1

next

next

next

next

prioritas biltemp

prioritas

prioritas

prioritas

prioritas

bantu

bantu1

kartemp

2. #include<stdio.h> #include<string.h> #include<stdlib.h> struct queue { char name[32]; double arrive,time; int prioritas; struct queue *next; }*head,*back,*temp,*x,*y; int sum=0,end=0,temp_prioritas; char input[32],temp_name[32]; double temp_arrive,temp_time=0,iddle=0,temp_iddle=0;

next

data

data

data

data

data

next

data

data

data

data

data

next

data

data

data

data

data

next

data

data

data

data

data

next

data

data

data

data

data

6

Praktikum Pemrograman Bahasa C

void enqueue() { printf("\tNama Proses %c ",16); gets(temp_name); printf("\tWaktu datang %c ",16); gets(input); temp_arrive=atof(input); printf("\tWaktu Proses %c ",16); gets(input); temp_time=atof(input); printf("\tNilai Prioritas %c ",16); gets(input); temp_prioritas=atoi(input); if(sum==0) { head=(struct queue *)malloc(sizeof(struct queue)); head->next=NULL; strcpy(head->name,temp_name); head->arrive=temp_arrive; head->time=temp_time; head->prioritas=temp_prioritas; back=head; } else { temp=(struct queue *)malloc(sizeof(struct queue)); back->next=temp; temp->next=NULL; strcpy(temp->name,temp_name); temp->arrive=temp_arrive; temp->time=temp_time; temp->prioritas=temp_prioritas; back=temp; } ++sum; x=head; while(x!=NULL) { y=x->next; while(y!=NULL) { if(x->prioritas<y->prioritas||(x->arrive>y->arrive&&x->prioritas==y->prioritas)) { strcpy(temp_name,x->name); strcpy(x->name,y->name); strcpy(y->name,temp_name); 7

Praktikum Pemrograman Bahasa C

} } void process() { sum=0; x=head; if(x==NULL) printf("\tTidak ada sesuatu yang diproses\n"); else { while(x!=NULL) { if(sum==0) { iddle=x->arrive; temp_time=x->time+iddle; } else { if(temp_time<x->arrive) { temp_iddle=x->arrive-temp_time; iddle+=temp_iddle; temp_time+=temp_iddle; temp_time+=x->time; } else temp_time+=x->time; } printf("\tNama = %s\n",x->name); printf("\tDatang = %g\n",x->arrive); printf("\tWaktu = %g\n",x->time); printf("\tPriority = %d\n\n",x->prioritas); 8

} x=x->next;

} y=y->next;

temp_time=x->time; x->time=y->time; y->time=temp_time; temp_prioritas=x->prioritas; x->prioritas=y->prioritas; y->prioritas=temp_prioritas; temp_arrive=x->arrive; x->arrive=y->arrive; y->arrive=temp_arrive;

Praktikum Pemrograman Bahasa C

}

} sum=0;

} printf("\tIddle time %g ms\n",iddle); printf("\tTotal process %g ms\n",temp_time); printf("\t======================================================\n");

x=x->next; sum++;

void main() { printf("\n\n\t%c SELAMAT DATANG DI PROGRAM SIMULASI PENJADWALAN CPU %c\n",1,1); printf("\t------------------------------------------------------\n"); puts(""); printf("\n\tApakah yang anda inginkan :\n"); printf("\t1. Menambahkan data CPU\n"); printf("\t2. Tampilkan hasil\n"); printf("\t3. Keluar (exit)\n"); while(end==0) { printf("\t======================================================\n"); printf("\n\tProses: %d ",sum); printf("\n\tMasukkan pilihan anda: "); gets(input); strlwr(input); if(strcmp(input,"1")==0) enqueue(); else if(strcmp(input,"2")==0) process(); else if(strcmp(input,"3")==0) end=1; else printf("\tKesalahan, input harus angka 1, 2, atau 3\n"); } } Preview:

9

Praktikum Pemrograman Bahasa C

10

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->