You are on page 1of 9

LAPORAN TUGAS PRAKTEK ALGORITMA DAN STRUKTUR DATA

DISUSUN UNTUK MEMENUHI TUGAS


MATA KULIAH : PRAKTEK ALGORITMA DAN STRUKTUR DATA
DOSEN PENGAMPU : SANIYATUL MAWADAH

OLEH:
1. RIJAL ABBAD FAKHRILLAH
NRP:312353211019

D3PSDKU LAMONGAN
JURUSAN D3 TEKNIK INFORMATIKA
Percobaan
1. Percobaan 1 : Implementasi antrian dengan array
Source Code: #include <stdio.h>
#define MAX 10

typedef struct {
int Item[MAX];
int Front;
int Rear;
int Count;
} Queue;

void Inisialisasi(Queue *q)


{
q->Front = q->Rear = -1;
q->Count = 0;
}

void Tambah(Queue *q, int item)


{
if (q->Rear == MAX-1)
{
printf ("\nAntrian Penuh");
return ;
}
q->Rear++;
q->Item[q->Rear] = item;
q->Count++;
if (q->Front == -1)
q->Front = 0;
}

int Hapus(Queue *q)


{
int data;
if (q->Front == -1)
{
printf ("\nAntrian Kosong");
return -1; // Ganti NULL dengan -1
}
data = q->Item[q->Front];
q->Count--;
if (q->Front == q->Rear)
q->Front = q->Rear = -1;
else
q->Front++;
return data;
}
void Tampil(Queue *q)
{
for(int i = q->Front; i <= q->Rear; i++)
printf("\nData : %d", q->Item[i]);
}

int main()
{
Queue q;
int data;
Inisialisasi(&q);
Tambah(&q,11);
Tambah(&q,12);
Tambah(&q,13);
Tambah(&q,14);
Tambah(&q,15);
Tambah(&q,16);
Tambah(&q,17);
Tambah(&q,18);
Tambah(&q,19);
Tambah(&q,20);
Tambah(&q,21);
Tampil(&q);
data = Hapus(&q);
printf("\nHapus Item = %d ", data);
data = Hapus(&q);
printf("\nHapus Item = %d ", data);
data = Hapus(&q);
printf("\nHapus Item = %d ", data);
Tampil(&q);
return 0;
}

Screnshoot:
2. Percobaan 2 : Implementasi circular queue
Source Code:
#include <stdio.h>
#define MAX 10

typedef struct {
int Item[MAX];
int Front;
int Rear;
int Count;
} Queue;

void Inisialisasi(Queue *q)


{
q->Front = q->Rear = -1;
q->Count = 0;
}

void Tambah(Queue *q, int item)


{
if ((q->Rear == MAX - 1 && q->Front == 0) || (q->Rear + 1 == q->Front))
{
printf("\nAntrian Penuh");
return;
}
if (q->Rear == MAX - 1)
q->Rear = 0;
else
q->Rear++;
q->Item[q->Rear] = item;
q->Count++;
if (q->Front == -1)
q->Front = 0;
}

int Hapus(Queue *q)


{
int data;
if (q->Front == -1)
{
printf("\nAntrian Kosong");
return -1;
}
else
{
data = q->Item[q->Front];
q->Count--;
if (q->Front == q->Rear)
q->Front = q->Rear = -1;
else
{
if (q->Front == MAX - 1)
q->Front = 0;
else
q->Front++;
}
}
return data;
}

void Tampil(Queue *q)


{
int i = q->Front;
while (i != q->Rear)
{
printf("\nData : %d", q->Item[i]);
i = (i + 1) % MAX;
}
printf("\nData : %d", q->Item[q->Rear]);
}

int main()
{
Queue q;
int data;
Inisialisasi(&q);
Tambah(&q, 11);
Tambah(&q, 12);
Tambah(&q, 13);
Tambah(&q, 14);
Tambah(&q, 15);
Tambah(&q, 16);
Tambah(&q, 17);
Tambah(&q, 18);
Tambah(&q, 19);
Tambah(&q, 20);
Tambah(&q, 21);
Tampil(&q);
data = Hapus(&q);
printf("\nHapus Item = %d ", data);
data = Hapus(&q);
printf("\nHapus Item = %d ", data);
data = Hapus(&q);
printf("\nHapus Item = %d ", data);
Tampil(&q);
return 0;
}
Screnshoot:

Latihan
3. Implementasikan studi kasus simulasi tempat parkir dengan ketentuan sebagai berikut :
a. Gunakan struktur data dengan elemen data berupa Nomor mobil.
b. Gunakan struktur data array.
c. Buatlah sebuah flowchart yang meliputi proses
Mobil masuk.
Mobil paling depan keluar.
Mobil tengah keluar disertai proses penampungan mobil sementara, memasukkan mobil
dari penampungan sementara dan menyusun tempat parkir kembali.

Source Code:
#include <stdio.h>
#define MAX_SIZE 10

typedef struct {
int nomor_mobil;
} Mobil;

typedef struct {
Mobil mobil[MAX_SIZE];
int jumlah_mobil;
} TempatParkir;

// Inisialisasi tempat parkir


void inisialisasi(TempatParkir *parkir) {
parkir->jumlah_mobil = 0;
}

// Mobil masuk ke tempat parkir


void mobil_masuk(TempatParkir *parkir, int nomor) {
if (parkir->jumlah_mobil < MAX_SIZE) {
parkir->mobil[parkir->jumlah_mobil].nomor_mobil = nomor;
parkir->jumlah_mobil++;
printf("Mobil dengan nomor %d telah masuk.\n", nomor);
} else {
printf("Tempat parkir penuh, mobil tidak dapat masuk.\n");
}
}

// Mobil paling depan keluar dari tempat parkir


void mobil_keluar_paling_depan(TempatParkir *parkir) {
if (parkir->jumlah_mobil > 0) {
printf("Mobil dengan nomor %d keluar dari tempat parkir.\n", parkir-
>mobil[0].nomor_mobil);
// Geser semua mobil ke depan
for (int i = 0; i < parkir->jumlah_mobil - 1; i++) {
parkir->mobil[i] = parkir->mobil[i + 1];
}
parkir->jumlah_mobil--;
} else {
printf("Tidak ada mobil di tempat parkir.\n");
}
}

// Mobil tengah keluar dari tempat parkir dengan proses penampungan sementara
void mobil_keluar_tengah(TempatParkir *parkir) {
if (parkir->jumlah_mobil > 2) {
printf("Mobil dengan nomor %d keluar dari tempat parkir.\n", parkir->mobil[parkir-
>jumlah_mobil / 2].nomor_mobil);
// Penampungan sementara
Mobil temp = parkir->mobil[parkir->jumlah_mobil / 2];
// Geser mobil setelah mobil tengah ke depan
for (int i = parkir->jumlah_mobil / 2 + 1; i < parkir->jumlah_mobil - 1; i++) {
parkir->mobil[i - 1] = parkir->mobil[i];
}
parkir->jumlah_mobil--;

// Masukkan mobil dari penampungan sementara ke tempat parkir


parkir->mobil[parkir->jumlah_mobil / 2] = temp;
parkir->jumlah_mobil++;
} else {
printf("Tidak cukup mobil di tempat parkir untuk melakukan proses ini.\n");
}
}

// Menampilkan nomor mobil yang ada di tempat parkir


void tampilkan_tempat_parkir(TempatParkir *parkir) {
if (parkir->jumlah_mobil == 0) {
printf("Tempat parkir kosong.\n");
} else {
printf("Nomor mobil di tempat parkir:\n");
for (int i = 0; i < parkir->jumlah_mobil; i++) {
printf("%d\n", parkir->mobil[i].nomor_mobil);
}
}
}

int main() {
TempatParkir parkir;
inisialisasi(&parkir);

// Mobil masuk
mobil_masuk(&parkir, 101);
mobil_masuk(&parkir, 102);
mobil_masuk(&parkir, 103);
mobil_masuk(&parkir, 104);
tampilkan_tempat_parkir(&parkir);

// Mobil paling depan keluar


mobil_keluar_paling_depan(&parkir);
tampilkan_tempat_parkir(&parkir);

// Mobil tengah keluar dengan proses penampungan sementara


mobil_keluar_tengah(&parkir);
tampilkan_tempat_parkir(&parkir);

return 0;
}
Screnshot:

You might also like