Senin, 21 Desember 2009

Modul 5 SDA

Modul 5

Queue

Tujuan Praktikum :

1. Memahami queue dan operasi-operasi terhadap queue

2. Memanfaatkan queue pada persoalan pemrograman tertentu

3. Memahami pembuatan stack dengan array dan linked-list

Teori :

Queue adalah sebuah struktur data yang mengimplementasikan protokol FIFO (First In First Out). Artinya adalah objek yang dapat diakses dalam queue adalah objek pertama yang dimasukkan. Analogi queue adalah sebuah antrian di bank atau di jalan tol.

Queue sering dipakai dalam simulasi misalnya untuk mensimulasikan pelanggan yang mengantri diteller bank atau antrian paket internet.

Praktikum :

Alat dan Bahan:

- IDE C++ (Integrated Development Environtment) seperti Borland C++

- System Operasi Windows

Langkah-langkah Praktikum :

1. Buat project baru beri nama Lab05_01 (seperti langkah 1 s/d 5 pada Lab01_01)

2. Buatlah source code Lab05_01.cpp

#include

#include

#include

struct nilaiMatkul

{

char nim[10];

char nama[50];

float nilai;

};

struct queue

{

int first;

int last;

nilaiMatkul data[10];

};

void createEmpty(queue *Q)

{

(*Q).first = -1;

(*Q).last = -1;

}

bool isEmpty(queue Q)

{

bool hasil = false;

if(Q.first == -1)

{

hasil = true;

}

return hasil;

}

bool isFull(queue Q)

{

bool hasil = false;

if(Q.last == 9)

{

hasil = true;

}

return hasil;

}

void add(char nim[], char nama[], float nilai, queue *Q)

{

/*Jika queue kosong*/

if(isEmpty(*Q) == true)

{

(*Q).first = 0;

(*Q).last = 0;

strcpy((*Q).data[0].nim, nim);

strcpy((*Q).data[0].nama,nama);

(*Q).data[0].nilai = nilai;

}

else

{

/*Jika queue tidak kosong*/

if(isFull(*Q) != true)

{

(*Q).last = (*Q).last +1;

strcpy((*Q).data[(*Q).last].nim,nim);

strcpy((*Q).data[(*Q).last].nama,nama);

(*Q).data[(*Q).last].nilai = nilai;

}

else

{

printf("Queue penuh\n");

}

}

}

void del(queue *Q)

{

if((*Q).last == 0)

{

(*Q).first = -1;

(*Q).last = -1;

}

else

{

/*Menggeser elemen kedepan*/

int i;

for(i = ((*Q).first + 1); i <= (*Q).last; i++)

{

strcpy((*Q).data[i-1].nim,(*Q).data[i].nim);

strcpy((*Q).data[i-1].nama,(*Q).data[i].nama);

(*Q).data[i-1].nilai = (*Q).data[i].nilai;

}

(*Q).last = (*Q).last -1;

}

}

void printQueue(queue Q)

{

if(Q.first != -1)

{

printf("------isi queue------\n");

int i;

for(i=Q.last; i>=Q.first; i--)

{

printf("====================\n");

printf("elemen ke : %d\n", i);

printf("nim : %s\n",Q.data[i].nim);

printf("nama : %s\n",Q.data[i].nama);

printf("nilai : %f\n",Q.data[i].nilai);

}

printf("---------------------\n");

}

else

{

/*Proses jika queue kosong*/

printf("queue kosong\n");

}

}

int main()

{

queue Q;

createEmpty(&Q);

printQueue(Q);

printf("=================\n");

//Gunakan nama dan NIM masing-masing

add("06406002", "Ana", 90, &Q);

add("06406017", "Rara", 70,&Q);

add("06406018", "clew", 80, &Q);

printQueue(Q);

printf("=================\n");

del(&Q);

del(&Q);

printQueue(Q);

printf("=================\n");

getch();

return 0;

}

Pertanyaan Praktikum:

1. Jelaskan keluaran Lab05_01.cpp!

2. Jelaskan kegunaan fungsi kelas Queue berikut:

a. add()

b. del()

c. printQueue()

d. createEmpty()

Pertanyaan Singkat Modul 5:

1. Apakah Queue bersifat LILO (Last In Last Out) atau bersifat FILO (First In Last Out)?

2. Sebutkan dalam contoh pemrograman apa queue sering diigunakan!

Tidak ada komentar: