Anda di halaman 1dari 20

BAB I

LANDASAN TEORI
1.1.

Array
Array adalah tipe terstruktur yang terdiri dari sejumlah komponen yang memiliki

tipe yang sama. Array memiliki indeks yang digunakan untuk membedakan data dalam
array satu dan yang lainnya.
Array memiliki susunan tertentu, array yang paling sederhana adalah array 1
dimensi. Gabungan dari array 1 dimensi dengan array 1 dimensi menghasilkan array 2
dimensi. Gabungan dari array 1 dimensi dengan array 2 dimensi menghasilkan array 3
dimensi.
Didalam pembuatan laporan ini hanya memakai array 1 dimensi. Pendeklarasian
array dilakukan dengan cara sebagai berikut:
//deklarasi array 1 dimensi
Tipe_data variable[panjang_array ];

//pemberian nilai

array

Tipe_data variable[panjang_array ]=nilai;

pemberian nilai pada array dilakukan dengan cara sebagai berikut:

1.2.

Looping atau perulangan


Looping adalah sebuah program perulangan statement dengan jumlah tertentu jika

kondisi terpenuhi. Perulangan akan berhenti jika nilai yang dimasukan sudah tidak
memenuhi syarat yang diberikan.

Macam-macam looping pada C :

while loop

Syntax : while (expression) statement

do-while loop

Syntax : do statement while (condition);


Secara fungsional hampir sama dengan while loop, hanya saja condition dalam
do-while dievaluasi setelah eksekusi statement, dengan kata lain sedikitnya satu kali
eksekusi statement walaupun kondisi tidak terpenuhi.

for loop

Syntax : for(initialization;condition;increase) statement;


1.3.

Queue
Antrian (queue) mempunyai prinsip FIFO (First In First Out) bahwa yang pertama

masuk yang pertama keluar. Queue memiliki kosep, data yang diinputkan akan
dimasukan kedalam tail, atau data paling belakang, dan head akan di akan dijumlahkan
untuk mengambil atau mengeluarkan data.
Adapun operasi didalam Queue sebagai berikut:
1. EnQueue Memasukkan data ke dalam antrian
Enque
digunakan
untuk

proses

pamasukan
data,

dengan

cara
menambahkan
tail dengan satu.
Untuk

void enqueue(int x)
{
if ((antrian.HEAD == 0) && (antrian.TAIL == 0))
{
antrian.HEAD = 1;
antrian.TAIL = 1;
}
else
{
antrian.TAIL = antrian.TAIL + 1;
}
antrian.data[antrian.TAIL] = x;
}

menambah panjang antrian, program akan menerima inputan user dan disimpan pada
array indeks ke tail.

2. DeQueue Mengeluarkan data terdepan dari antrian


void Dequeue(){
if (q.head > q.tail) {
q.head = 0;
q.tail = 0;
}
q.head = q.head + 1;

Dequeue melakukan proses untuk menghilangkan indeks terdepan, sehingga


data terdepan seakan tidak ada, tapi sebenarnya datanya masih ada, tapi indeks head di
tambahkan satu sehingga ketika saat menampilkan data maka indeks terdepan sebelum
di dequeuer tidak akan ditampilkan.
3. Clear Menghapus seluruh antrian
void createEmpty()
{
antrian.HEAD = 0;
antrian.TAIL = 0;
}

Clear atau create empty melakukan proses untuk membuat data kembali seperti
awal dengan mengembalikan indeks head dan tail ke indeks ke 0.
4. IsEmpty Memeriksa apakah antrian kosong
IsEmpty
digunakan
untuk

int IsEmpty()
{
if ((antrian.HEAD> antrian.TAIL) || (antrian.HEAD ==
0) &&
(antrian.TAIL == 0))
return 1;
else
3
return 0;
}

menyatakan apakah antrian masih kosong atau tidak. Dengan cara menentukan apakah
indek head lebih besar dari tail, atau apakah head sama dengan tail.
5. IsFull Memeriksa apakah antrian penuh
IsFull
digunakan
untuk
menyatakan
apakah antrian
sudah

int IsFull()
{
if (antrian.TAIL == max)
return 1;
else
return 0;
}

penuh

atau belum, dengan cara mengecek apakah tail sama dengan panjang maksimum
antrian.

BAB II
PEMBAHASAN
2.1.

Contoh
Program
Pada

program

}
}

else
{
{

ini,

user

akan

satu, kemudian
setelah selesai
menginputkan
data ke dalam
queue , maka
program

akan

menampilkan
semua

isi

queue.
2.1.1.

Source

Code

Contoh

Program

antri.tail++;

return 0;
}
}
antri.data[antri.tail]=x;

menginputkan
data satu per

else

}
}
#include <stdio.h>
int main()
void deque()
#include <stdlib.h>
{
{
#define max 5
int Input,lagi,alinan;
if(antri.head>antri.tail)
create_empty();
{
typedef struct
lagi =1;
antri.head=0;
{
while(lagi==1)
antri.tail=0;
int tail, head, data[max];
{
}
}Queue;
if((isEmpty()==1)||(isFull()==0))
antri.head++;
Queue antri;
{
}
void create_empty()
printf("antrian tersedia!\n");
int isEmpty()
{
printf("masukan data: ");
{
antri.head=0;
scanf("%d",&Input);
if((antri.head>antri.tail)||(antri.head==0)&&(antri.tail==0))
antri.tail=0;
enque(Input);
{
}
printf("tambahkan data\n");
return 1;
void enque(int x)
printf("1.ya,0.tidak\n");
}
{
printf("input pilihan: ");
else
if((antri.head==0)&&(antri.tail==0))
scanf("%d",&lagi);
{
{
}
return 0;
antri.head=1;
else if(isFull()==1)
}
antri.tail=1;
{
}
}
printf("antrian penuh!\n");
int isFull()
{

lagi=0;
}
if(antri.tail==max)
}
{
while(isEmpty()==0)
return 1;

{
printf("%d",antri.data[antri.head]);
deque();
}
return 0;

2.1.2. Penjelasan contoh


Contoh
program

void create_empty()
{

tersebut adalah

antri.head=0;

penerapan

antri.tail=0;

queue,

bagaimana
bilangan diantri. Didalam source code tersebut menggunakan fungsi Enque, Deque,
IsFull, IsEmpty, dan Create Empty. Didalam fungsi Enque dalam program jika nilai
Head dan Tail bernilai 0, nilai Head dan Tail akan diubah menjadi 1, untuk membulai
sebuah antrian.
Jika
tidak

maka

void enque(int x)
{

seperti

if((antri.head==0)&&(antri.tail==0))

biasannya,

nilai

antri.head=1;

dari tail akan

antri.tail=1;

bahwa

di ingkremen,

} else {
antri.tail++;

untuk

} antri.data[antri.tail]=x;

menerima
}

inputan data kedalam antrian yang dimulai dari paling belakang. Didalam fungsi
inputan user diambil dengan variable x. maka ketika user menginputkan, variable
didalam struck akan menyamakan nilai dengan variable x,

void deque()

Pada

Fungsi Deque,

if(antri.head>antri.tail)

jika nilai head


lebih

besar

antri.head=0;

dari tail maka

antri.tail=0;

Head dan tail

diberi nilai 0,

antri.head++;

karena antrian

dinyatakan
sudah kosong jika nilai head lebih besar dari pada tail. Pada deque yang mengalami
ingkremen adalah head. Untuk menghilangkan data atau pengambilan data.
Fungsi isEmpty dan isFull menyatakan syarat penuh dari queue dan syarat
kosong dari queue. Syarat penuh adalah saat tail mencapai nilai max, dan saat kosong
adalah saat nilai head lebih besar dari tail dan saat nilai head dan tail bernilai 0.
while(lagi==1)
{
if((isEmpty()==1)||(isFull()==0))
{
printf("antrian tersedia!\n");
printf("masukan data: ");

Didalam program akan melakukan perulangan selama nilai lagi sama dengan 1,
dengan menerima inputan user untuk menentukan ingin menambah data atau tidak.
Didalam perulang ini user akan diminta menginputkan data.
2.1.3. Screen Shoot Program A

Gambar 2.1 run contoh program


2.2. Latihan
Pada program ini, user akan menginputkan data satu per satu, kemudian setelah
selesai menginputkan data ke dalam queue , maka program akan menampilkan semua
isi queue. Dengan menambahkan fitur untuk mencari data pada antrian menggunakan
fungsi,

dan

Algoritma
pencarian.
2.2.1.
Code

#include <stdio.h>
#include <stdlib.h>
#define max 5

Source
typedef struct
{
int tail, head, data[max];
}Queue;

Queue antri;
void create_empty()
{
antri.head=0;
antri.tail=0;
}

void enque(int x)
{
if((antri.head==0)&&(antri.tail==0))
{
antri.head=1;
antri.tail=1;
}
else
{
antri.tail++;
}
antri.data[antri.tail]=x;
}

void deque()
{
if(antri.head>antri.tail)
{
antri.head=0;
antri.tail=0;
}
antri.head++;
}
int isEmpty()
{
if((antri.head>antri.tail)||(antri.head==0)&&(antri.tail==0))
{
return 1;
}
else
{
return 0;
}
}
int isFull()
{
if(antri.tail==max)
{
return 1;
}
else
{
return 0;
}

int cari(int x)
{
int y;
for(y=0;y<antri.tail;y++)
{
if(x==antri.data[y])
{
printf("data %d ditemukan pada antrian ke- %d",x,y);
}
}
}

int main()
{
int Input,lagi,alinan;
create_empty();
lagi =1;
while(lagi==1)
{
if((isEmpty()==1)||(isFull()==0))
{
printf("antrian tersedia!\n");
printf("masukan data: ");
scanf("%d",&Input);
enque(Input);
printf("tambahkan data\n");
printf("1.ya,0.tidak\n");
printf("input pilihan: ");
scanf("%d",&lagi);
}

10

else if(isFull()==1)
{
printf("antrian penuh!\n");
lagi=0;
}
}
while(isEmpty()==0)
{
printf("%d\t",antri.data[antri.head]);
deque();
}
printf("masukan data yg akan dicari: ");
scanf("%d",&alinan);
cari(alinan);
return 0;

2.2.2. Penjelasan Latihan


Sama Halnya seperti Contoh program, namun didalam latihan program diminta
untuk menambahkan fungsi pencarian data. Proses pencarian data adalah dengan
menggunakan nilai dari head kemudian dilakukan perulangan untuk mencari data
dengan mencocokan nilainya satu-satu dari nilai head sampai nilai tail.
2.2.3.

Screen

Shoot Latihan

int cari(int x)
{ int y;
for(y=0;y<antri.tail;y++) {
if(x==antri.data[y]) {
printf("data %d ditemukan pada antrian ke- %d",x,y);
}
}
}

11

Gambar 2.2. Run Latihan

BAB III
LAMPIRAN TUGAS
3.1 Tugas
Realisasi Queue dalam kehidupan sehari-hari dan buat program sederhana untuk
merepresentasikannya. Program yang dibuat adalah program untuk melakukan antrian
pengambilan sembako, dengan menggunakan ringbuffer

12

3.1.1. Source Code Tugas


#include <stdio.h>

menu:

#include <stdlib.h>
printf("menu\n");printf("1.registrasi
antrian\n");
int head=1,tail=1;
printf("2.proses
antrian terdepan\n");printf("3.tampilkan
antrian\n");
printf("pilihan: ");scanf("%d",&pilihan);
void Enque();
switch(pilihan)
void Deque();
{
void tampil();
case 1:
void isi();
while(lagi==1)
int isFull();
{
int isEmpty();
if(isFull(mks)==0&&isEmpty()==1)
{

typedef struct
isi();
{
Enque();
int penghasilan,kepemilikan,tandai;
printf("tambah lagi 1.ya/0.tidak\n");
char nama[25],alamat[25];
scanf("%d",&lagi);
}sembako;

sembako antrian[100];
else
int main()
{
{
break;
int x,mks,pilihan,lagi=1,ulang=1;
printf("\t\t\t\tAntrian Sembako\n");
}
}

printf("masukan jumlah maksimum antrian: ");scanf("%d",&mks);

menu:

goto menu;
break;
case 2:
ulang=1;

if(ulang==1)
{
Deque();

13

printf("%d",head);
printf("prosese lagi 1.ya/0.tidak\n");
scanf("%d",&ulang);
}
else{
goto menu;
break;
}
case 3:
if(head==1&&tail==1)
{
printf("data kosong");
}
else
{
tampil();
}
goto menu;
break;
}
}
void Enque(int mks)
{
if(head==1&&tail==1)
{
tail++;
}else if(head<=tail)
{
tail++;
}
}

14

void isi()
{
fflush(stdin);
printf("nama: ");
gets(antrian[tail].nama);
printf("alamat: ");
gets(antrian[tail].alamat);
printf("penghasilan: ");
scanf("%d",&antrian[tail].penghasilan);
printf("golongan: ");
scanf("%d",&antrian[tail].kepemilikan);
}

int isEmpty()
{
if(head>tail)
{
printf("antrian kosong!\n");
head=1;
tail=1;
return 0;
}
else
{
return 1;
}
}
int isFull(int mks)
{
if(tail>mks)
{

15

return 1;

3.1.2.

Screen

else

shoot program

Tugas

return 0;

Berikut adalah
tampilan

dari

}
}

program:
void Deque()

Gambar 3.1.

tampilan

if(isEmpty()==1&&(head<tail))

program

{
head++;

3.1.3.
}

Penjelasan

else

Program

Tugas

printf("antrian kosong!\n");
}
}
void tampil()
{
int x,y;
x=head;
y=tail;
for(x;x<tail;x++)
{
printf("antrian ke-%d : %s\n",x,antrian[x].nama);
}
}

16

Pada progam antrian sembako, program pertama akan meminta inputan user
berupa banyaknya antrian yang akan disediakan.
printf("\t\t\t\tAntrian Sembako\n");
printf("masukan jumlah maksimum antrian: ");scanf("%d",&mks);

Kemudian ditampilkan menu pilihan. Dengan pilihan pertama berupa registrasi yang
berupa pemasukan data yaitu enque, dengan syarat jika fungsi isEmpty bernilai 0 dan
isFull bernilai 1. Maka antrian dapat dimasukan lagi.
Didalam fungsi isEmpty pernyataanya adalah jika nilai head lebih besar dari tail maka
antrian penuh. Didalam fungsi isFull pernyataannya adalah jika tail sama dengan mks
maka antian penuh.
Jika inputan user saat didalam menu pilihan memasukan 2 maka masuk ke dalam menu
proses antrian, sehingga dilakukan proses Dequeue untuk menghilangkan data terdepan,
sehingga data terdepan tidak ditampilkan.

case 2:
ulang=1;
if(ulang==1)
{
Deque();
printf("%d",head);
printf("prosese lagi 1.ya/0.tidak\n");
scanf("%d",&ulang);
}
else{
goto menu;
break;
}

Jika user memasukan pilihan 3 maka program akan masuk ke dalam menu 3 yaitu
tampilan data. Tampilan data menggunakan fungsi dengan nama tampil, user akan
17

masuk ke menu tampil jika nilai head dan tail bernilai 1 atau kosong. Didalam fungsi
tampil dilakukan proses perulangan dengan menggunakan for dan diulang sebanyak tail
dengan nilai awal berupa head.
BAB IV
PENUTUP
4.1 Kesimpulan
Dapat disimpulkan dari tugas ini, queue merupakan proses pengantirian dimana
data pertama yang masuk adalah yang pertama keluar. Fungsi digunakan agar program
lebih efisien dan sedikit menggunakan memori.
4.2 Saran
Saran pada saat melakukan ring buufer, pada saat penampilan data diharapkan
lebih teliti dengan nilai dari pada head agar tidak terjadi kesalahan dalam pengambilan
nilai awal.

void tampil()
{
int x,y;

x=head;

y=tail;

for(x;x<tail;x++)
{ printf("antrian ke-%d : %s\n",x,antrian[x].nama);
}
}

18

DAFTAR PUSTAKA
1. KOMANG ANOMS BLOG1. Looping (Perulangan) Pada Bahasa C. 21
Maret 2016.http://komanganombudiutama.blogspot.co.id/2012/04/inputprogram-include-main-int-abn.html
2. AZIZAH.ELEARNING.Pengertian Array, Cara Kerja Dan Contohnya.
Diakses 21 maret 2016.http://azizah.ilearning.me/programming/pengertianarray-cara-kerja-dan-contohnya/
3. CODEPROGRAM CPP. Memahami Struct pada Bahasa C. 21 maret 2016.
http://kodeprogramcpp.blogspot.co.id/2015/04/memahami-struct-pada-bahasac.html

19

20

Anda mungkin juga menyukai