Anda di halaman 1dari 9

PIPO BOBO ALIFIAN

191011401652
04TPLP015
PRAKTIKUM STRUKTUR DATA PERTEMUAN 13
SOAL:
1. Apa yang dimaksud dengan Queue!
2. Sebutkan dan Jelaskan operasi-operasi pada Linier Queue!
3. Sebutkan dan Jelaskan operasi-operasi pada Circular Queue!
4. Buatlah tambahan program menggunakan sistem menu pada program yang
telah dipraktekkan!

HASIL CODING PERTEMUAN 13


1. Buatlah program untuk operasi Queue dengan menggunakan Singly Linked List
(simpan dengan nama lat13_1.cpp)
Source Code:
#include <iostream>
#include <conio.h>
#define MAX 8

using namespace std;

typedef struct{
int
data[MAX];
int head;
int tail;
}
Queue;
Queue
antrian;
void
Create(){
antrian.head=antrian.tail=-1;
}

int IsEmpty(){
return 0;
}

int IsFull(){
if(antrian.tail==MAX-1) return 0;
else return 0;
}

void Enqueue(int data){


if(IsEmpty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
}else
{
if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
}
}
}

int Dequeue(){
int i;
int e=antrian.data[antrian.head];
for(i=antrian.head; i<=antrian.tail-1; i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}

void Clear(){
antrian.head=antrian.tail=-1;
cout<<"data clear";
}

void Tampil(){
if(IsEmpty()==0)
{
cout<<"\nData di antrian";
for(int i=antrian.head; i<=antrian.tail; i++)
{
cout<<"\n"<<antrian.data[i];
}
}else {cout<<"data kosong ! \n";}
}

int main(){
int data;
Create();
cout<<"\nData = ";cin>>data;
Enqueue(data);
cout<<"\nData = ";cin>>data;
Tampil();
cout<<"\nElemen yang keluar : "<<Dequeue();
Tampil();
getch;
}
OUTPUT:
JAWABAN:
1. Queue (antrian) adalah barisan elemen yang apabila elemen ditambah maka
penambahannya berada di posisi belakang (rear) dan jika dilakukan pengambilan
elemen dilakukan di elemen paling depan (front). Oleh karena itu, queue bersifat FIFO
(first in first out).
2. - Inisialisasi queue menjadi kosong (pembuatan queue kosong) membuat queue kosong
diperlukan untuk memulai memakai queue.
- Test Queue Kosong » mencari tahu status queue kosong atau tidak mengetahui bahwa
queue kosong atau tidak sangat penting, sebab semua operasi akan dilakukan
berdasarkan kosong atau tidaknya suatu queue.
- Test Queue Penuh » mencari tahu status queue penuh
atau tidak
- Mencari panjang queue (jumlah elemen queue)
- Penambahan sebuah elemen pada queue. penambahan selalu dilakukan pada
ekor, dan karena alamat ekor diketahui maka prosesnya sederhana, yaitu hanya
insert last.
3. 1. Create()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1
2. IsEmpty()
Untuk memeriksa apakah Antrian sudah penuh atau belum
Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen
pertama dalam antrian) yang tidak akan berubah-ubah
Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu
menggunakan nilai Tail.
3. IsFull
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen
array pada C) berarti sudah penuh
4. Enqueue
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu
ditambahkan di elemen paling belakang
Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter
Tail terlebih dahulu
5. Dequeue()
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1
Penggeseran dilakukan dengan menggunakan looping.
6. Clear()
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun
hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian
tidak lagi terbaca
7. Tampil()
Untuk menampilkan nilai-nilai elemen Antrian
Menggunakan looping dari head s/d tail
4.
Source Code:
#include <iostream>
#define MAX 20 //maksimum data queue
using namespace std;
//Deklarasi struct antrian
struct Queue {
int front, rear, data[MAX];
}Q;
//cek apakah antrian penuh
bool isFull() {
return Q.rear == MAX;
}

//cek apakah antrian kosong


bool isEmpty() {
return Q.rear == 0;
}
//Menampilkan Queue
void printQueue() {
if (isEmpty()) {
cout << "Antrian kosong"<<endl;
}
else {
cout << "QUEUE : ";
for (int i = Q.front; i < Q.rear; i++)
//menambahkan koma jika data tidak terdapat di antrian pertama
cout << Q.data[i] << ((Q.rear-1 == i) ? "" : ",");
cout << endl;
}
}
//manambahkan data ke antrian
void enqueue() {
if (isFull())
{
cout << "Antrian penuh!"<<endl;
}
else {
int data;
//menambahkan data ke antrian
cout << "Masukkan Data : ";cin >> data;
Q.data[Q.rear] = data;
//menempatkan tail pada elemen data terakhir yang ditambahkan
Q.rear++;
cout << "Data ditambahkan\n";
printQueue();
}
}
// mengambil data dari antrian
void dequeue() {
if (isEmpty())
{
cout << "Antrian masih kosong"<<endl;
}
else{
cout << "Mengambil data \"" << Q.data[Q.front] << "\"..." << endl;
//menggeser antrian data ke head
for (int i = Q.front; i < Q.rear; i++)
Q.data[i] = Q.data[i + 1];
//menempatkan tail pada data terakhir yang digeser
Q.rear--;
printQueue();
}
}
int main() {
int choose;
do
{
//Tampilan menu
cout << "-------------------\n"
<< " Menu Pilihan\n"
<< "-------------------\n"
<< " [1] Enqueue \n"
<< " [2] Dequeue\n"
<< " [3] Keluar \n\n"
<< "-------------------\n"
<< "Masukkan pilihan : "; cin >> choose;
switch (choose)
{
case 1:
enqueue();
break;
case 2:
dequeue();
break;
default:
cout << "Pilihan tidak tersedia";
break;
}
} while (choose !=3);
return 0;
}
OUTPUT:

Anda mungkin juga menyukai