In the circular queue, we can use an empty data cell again when we remove the cell value using a dequeue. Another important thing is we can not add value before the end of the head index( for example, if my array size is 5 and the head point to an index of 0, then we need to empty the array index 4. Which means we can add 4 value when the array size is 5). We can use this queue implementation in banking software( ex: give tokens to customers and call them according to that token). Here is the complete code below:
$devisor = 5;
$data_array = [];
$head = 0;
$tail = 0;
function enqueue( $item = NULL ){
global $head, $tail, $data_array, $devisor;
if(empty($item)){
echo 'invalid function call. Need to pass item as a function parametter';
return;
}
$tail = $tail % $devisor;
$next_tindex = $tail + 1;
if( $head == $next_tindex % $devisor){
echo 'Queue is full';
return;
}else{
$data_array[$tail] = $item;
$tail++;
}
return $data_array;
}
function dequeue(){
global $head,$tail,$devisor,$data_array;
if($tail == $head){
echo 'Queue is empty';
return -1;
}
$item = $data_array[$head];
$head = ++$head % $devisor;
return $item;
}
echo '<pre>';
print_r(enqueue(1));
echo '</pre>';
echo '<pre>';
print_r(dequeue());
echo '</pre>';