contoh antrian LIFO
<?php
// Inisialisasi jumlah quota loket
$quota_per_loket = 100;
$quota_loket_1 = $quota_per_loket;
$quota_loket_2 = $quota_per_loket;
$quota_loket_3 = $quota_per_loket;
// Antrian pelanggan
$customer_queue = array();
// Mendapatkan nomor antrian berikutnya
function get_next_queue_number()
{
// Mendapatkan nomor antrian terakhir dari file
$last_queue_number = file_get_contents("last_queue_number.txt");
// Menambahkan 1 ke nomor antrian terakhir untuk mendapatkan nomor antrian berikutnya
$next_queue_number = $last_queue_number + 1;
// Menyimpan nomor antrian berikutnya ke dalam file
file_put_contents("last_queue_number.txt", $next_queue_number);
return $next_queue_number;
}
// Menambahkan pelanggan ke dalam antrian
function add_customer_to_queue($customer)
{
global $customer_queue;
array_push($customer_queue, $customer); // LIFO
}
// Mengambil pelanggan dari antrian
function get_customer_from_queue()
{
global $customer_queue;
// Mengambil pelanggan paling akhir dari antrian menggunakan LIFO
$customer = array_pop($customer_queue);
return $customer;
}
// Menentukan loket yang akan digunakan untuk pelanggan selanjutnya
function get_next_counter()
{
global $quota_loket_1, $quota_loket_2, $quota_loket_3;
// Memeriksa apakah masih ada kuota tersedia di masing-masing loket
if ($quota_loket_1 > 0) {
$next_counter = 1;
} elseif ($quota_loket_2 > 0) {
$next_counter = 2;
} elseif ($quota_loket_3 > 0) {
$next_counter = 3;
} else {
// Jika tidak ada kuota tersedia di semua loket, kembalikan nilai null
$next_counter = null;
}
return $next_counter;
}
// Mendapatkan nomor antrian dan loket untuk pelanggan selanjutnya
function get_next_customer()
{
$next_queue_number = get_next_queue_number();
$next_counter = get_next_counter();
if ($next_counter !== null) {
// Mengurangi kuota di loket yang digunakan untuk pelanggan selanjutnya
global $quota_loket_1, $quota_loket_2, $quota_loket_3;
if ($next_counter == 1) {
$quota_loket_1--;
} elseif ($next_counter == 2) {
$quota_loket_2--;
} elseif ($next_counter == 3) {
$quota_loket_3--;
}
// Menambahkan pelanggan ke dalam antrian
add_customer_to_queue(array($next_queue_number, $next_counter));
} else {
// Jika tidak ada loket yang tersedia, kembalikan nilai null
return null;
}
}
// Modifikasi untuk menggunakan LIFO
function get_customer_from_queue_lifo()
{
global $customer_queue;
// Mengambil pelanggan paling akhir dari antrian menggunakan LIFO
$customer = array_pop($customer_queue);
return $customer;
}
// Contoh penggunaan sistem antrian dengan LIFO
$next_customer = get_next_customer();
if ($next_customer !== null) {
list($queue_number, $counter) = $next_customer;
echo "Silakan menuju loket $counter untuk nomor antrian $queue_number.";
} else {
echo "Maaf, semua loket sudah penuh. Silakan coba lagi nanti.";
}
// Memanggil fungsi get_customer_from_queue_lifo untuk mengambil pelanggan
$next_customer = get_customer_from_queue_lifo();
if ($next_customer !== null) {
list($queue_number, $counter) = $next_customer;
echo "Pelanggan dengan nomor antrian $queue_number, silakan menuju loket $counter.";
// Membebaskan kuota loket yang digunakan oleh pelanggan
if ($counter == 1) {
$quota_loket_1++;
} elseif ($counter == 2) {
$quota_loket_2++;
} elseif ($counter == 3) {
$quota_loket_3++;
}
} else {
echo "Tidak ada pelanggan yang menunggu.";
}
?>