Anda di halaman 1dari 17

TUGAS 06

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA


Nama : Yesika Rizki Fanita Lumban Raja
Kelas : S1-IF-07-E
NIM : 19102109

A. MATERI
QUEUE
Queue pada Struktur Data atau antrian adalah sekumpulan data yang mana
penambahan elemen hanya bias dilakukan pada suatu ujung disebut dengan sisi
belakang (rear), dan penghapusan (pengambilan elemen) dilakukan lewat ujung lain
(disebut dengan sisi depan atau front).
Pada Stack atau tumpukan menggunakan prinsip “Masuk terakhir keluar
pertama” atau LIFO (Last In Frist Out). Maka pada Queue atau prinsip yang digunakan
adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out).
Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, example:
antrian mobil diloket tol, antrian mahasiswa mendaftar, dll.
Contoh lain dalam bidang komputer adalah sistem komputer berbagi waktu
(time sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan
sistem tersebut secara serempak.
Pada Queue ata antrian terdapat satu buah pintu masuk di suatu ujung dan satu
buah pintu keluar diujung satunya dimana membutuhkan variabel Head dan Tail (depan
/front, belakang/rear).
Karakteristik Queue atau antrian:
1. Elemen antrian
2. Front (elemen terdepan antrian)
3. Tail (elemen terakhir)
4. Jumlah elemen pada antrian
5. Status antrian

Operasi pada Queue atau antrian:

1. Push (x) : Menambahkan data x ke dalam queue


2. Pop () : Menghapus data paling depan dari dalam
3. Peek () atau Top () : Melihat data paling depan dari stack.

Berikut respresentasi queue :

Sample Input 1: Sample Ouput 1:

Push(5); 5
Push(10); 10
Push(12); 12
Push(3); 3
Push(30); 30

Sample Input 1: Sample Ouput 1:

Push(5); 10
Push(10); 3
Pop();
Push(3);

B. PRAKTIK SOAL
- Tambahkan fasilitas untuk menghitung banyaknya data,jumlah data,dan rata-ratadari
keseluruhan data yang masuk ke dalam antrian!
a. Source code

#include <iostream>

#include <windows.h>

#define MAX 8

using namespace std;

struct queue{
int data[MAX];

int head;

int tail;

}antrian;

void setAwal(){

antrian.head=antrian.tail=-1;

int isEmpty(){

if(antrian.tail == -1){

return 1;

}else{

return 0;

int isFull(){

if(antrian.tail == MAX-1){

return 1;

}else{

return 0;

}
}

void Enqueue(int data){

if(isFull() == 1){

cout << "Antrian Penuh" << endl;

}else if(isEmpty() == 1){

antrian.tail = 0;

antrian.head = 0;

antrian.data[antrian.tail]=data;

cout << antrian.data[antrian.tail] << " Masuk kedalam antrian"


<< endl;

}else{

antrian.tail++;

antrian.data[antrian.tail]=data;

cout << antrian.data[antrian.tail] << " Masuk kedalam antrian"


<< endl;

void Dequeue(){

if(isEmpty() == 0){

for(int i = antrian.head; i <= antrian.tail-1; i++){

antrian.data[i] = antrian.data[i+1];

}
antrian.tail--;

cout << "Data paling awal telah keluar" << endl;

}else{

cout << "Antrian Masih Kosong" << endl;

void Clear(){

antrian.head=antrian.tail-1;

cout << "Antrian telah dihapus" << endl;

void tampil(){

if(isEmpty() == 0){

for(int i = antrian.head; i <= antrian.tail; i++){

cout << antrian.data[i] << " ";

}else{

cout << "Antrian Masih Kososng" << endl;

void operasidata(int pill){


int jum=0;

int b=antrian.tail+1;

float avg;

if(isEmpty() == 0){

for(int i = antrian.head; i <= antrian.tail; i++){

jum = jum + antrian.data[i];

avg=jum/b;

switch(pill){

case 1:

cout << "Jumlah datanya = " << jum;

break;

case 2:

cout << "Rata-rata datanya = " << avg;

break;

case 3:

cout << "Banyak datanya = " << antrian.tail+1;

break;

default:

break;

}else{
cout<<"data kosong!n";

int main()

int pil, data;

setAwal();

do{

system("cls");

cout << "1. Enqueue\n";

cout << "2. Dequeue\n";

cout << "3. Show\n";

cout << "4. Clear\n";

cout << "5. Jumlah Data\n";

cout << "6. Rata - Rata\n";

cout << "7. Banyak Data\n";

cout << "8. Exit\n";

cout << "Masukan Pilihan = "; cin >> pil;

switch(pil){
case 1:

cout << "Masukan Data = "; cin >> data;

Enqueue(data);

break;

case 2:

Dequeue();

break;

case 3:

tampil();

break;

case 4:

Clear();

break;

case 5:

operasidata(1);

break;

case 6:

operasidata(2);

break;

case 7:

operasidata(3);

break;

case 8:
system("exit");

break;

default:

cout << "Pilihan Tidak tersedia" << endl;

break;

cout << endl;

system("PAUSE");

}while(pil != 8);

return 0;

b. Deskripsi code

#define MAX 8 Untuk mendefinisikan sebuah


konstanta.

struct queue{ Mendeklarasikan struct queue

int data[MAX];

int head;

int tail;

}antrian; Sebagai prosedur set awal

void setAwal(){
antrian.head=antrian.tail=-
1;

int isEmpty(){ Untuk memeriksa apakah queue


kosong
if(antrian.tail == -1){

return 1;

}else{

int isFull(){ Untuk memeriksa apakah queue


sudah penuh
if(antrian.tail == MAX-1){

return 1;

}else{

return 0;

void Enqueue(int data){ Untuk menambahkan item pada


posisi paling belakang
if(isFull() == 1){

cout << "Antrian Penuh"


<< endl;

}else if(isEmpty() == 1){

antrian.tail = 0;

antrian.head = 0;

antrian.data[antri
an.tail]=data;
cout <<
antrian.data[antri
an.tail] << "
Masuk kedalam
antrian" << endl;

}else{

antrian.tail++;

antrian.data[antri
an.tail]=data;

cout <<
antrian.data[antri
an.tail] << "
Masuk kedalam
antrian" << endl;

void Dequeue(){ Untuk menghapus item dari


posisi paling depan
if(isEmpty() == 0){

for(int i = antrian.head; i
<= antrian.tail-1;
i++){

antrian.data[i] =
antrian.data[i+1];

antrian.tail--;

cout << "Data paling awal


telah keluar" <<
endl;

}else{

cout << "Antrian Masih


Kosong" << endl;

void Clear(){ Untuk menghapus elemen-


elemen dengan cara membuat
antrian.head=antrian.tail-1;
Tail dan Head = -1
cout << "Antrian telah
dihapus" << endl;

void operasidata(int pill){ Operasi data

int jum=0;

int b=antrian.tail+1;

float avg;

if(isEmpty() == 0){ Untuk memeriksa apakah antrian


penuh atau kosong.
for(int i = antrian.head; i
Dengan cara memeriksa nilai
<= antrian.tail;
Tail, jika Tail= -1, maka antrian
i++){
kosong (empty).
jum = jum + Head adalah tanda untuk kepala
antrian.data[i]; antrian (elemen pertama dalam
antrian) yang tidak akan beruba-
}
ubah.
avg=jum/b; Pergerakan pada antrian terjadi

switch(pill){ dengan penambahan elemen


antrian kebelakang, yaitu
case 1:
menggunakan nilai Tail.
cout << "Jumlah
datanya = " <<
jum;

break;

case 2:

cout << "Rata-rata


datanya = " <<
avg;

break;

case 3:

cout << "Banyak


datanya = " <<
antrian.tail+1;

break;

default:

break;

}else{

cout<<"data kosong!n";

}
}

int main() Input dan output menu tampilan

int pil, data;

setAwal();

do{

system("cls");

cout << "1. Enqueue\n";

cout << "2. Dequeue\n";

cout << "3. Show\n";

cout << "4. Clear\n";

cout << "5. Jumlah Data\n";

cout << "6. Rata - Rata\n";

cout << "7. Banyak Data\n";

cout << "8. Exit\n";

cout << "Masukan Pilihan =


"; cin >> pil;

switch(pil){ Pernyataan penyelesaian untuk


case 1: memanipulasi jalannya aliran
program berdasarkan conditional
cout << "Masukan Data =
expression, mengendalikan
"; cin >> data;
aliran program agar dapat
Enqueue(data); berjalan secara fleksibel atas

break; keadaan program dan keinginan


pengguna.
case 2:

Dequeue();

break;

case 3:

tampil();

break;

case 4:

Clear();

break;

case 5:

operasidata(1);

break;

case 6:

operasidata(2);

break;

case 7:

operasidata(3);

break;

case 8:
system("exit");

break;

default:

cout << "Pilihan Tidak


tersedia" << endl;

break;

cout << endl;

system("PAUSE");

}while(pil != 8);

return 0;

C. Screenshot

Anda mungkin juga menyukai