I am learning circular queue and I am facing some error.
While displaying the queue it only shows the first and last element, after deleting an element it gets even worse, now I don't know where exactly I am going wrong if it's while inserting an element or displaying.
Here is my code:
#include<stdio.h>
#include<stdlib.h>
struct Queue{
int rear, front;
unsigned capacity;
int *arr;
};
struct Queue* createQueue(unsigned capacity)
{
struct Queue* queue = (struct Queue*)malloc(sizeof(struct Queue));
queue->front = queue->rear = -1;
queue->capacity = capacity;
queue->arr = (int*)malloc(sizeof(int)*capacity);
return queue;
}
struct Queue* enQueue(struct Queue* queue, int data)
{
if(queue->front == 0 && queue->rear == queue->capacity -1)
{
printf("Queue is full.");
}
else if(queue->front == -1)
{
queue->front = queue->rear = 0;
queue->arr[queue->rear] = data;
}
else if(queue->rear = queue->capacity -1 && queue->front != 0)
{
queue->rear = 0;
queue->arr[queue->rear] = data;
}
else
{
queue->rear++;
queue->arr[queue->rear] = data;
}
return queue;
}
struct Queue* deQueue(struct Queue* queue)
{
if(queue->front == -1)
{
printf("Error: Queue underflow.");
}
else if(queue->front == queue->rear)
{
queue->front = queue->rear = -1;
}
else
{
if(queue->front == queue->capacity -1)
{
queue->front = 0;
}
else
{
queue->front++;
}
}
return queue;
}
void printQueue(struct Queue* queue)
{
if(queue->front == -1)
{
printf("Queue is empty.");
}
if(queue->rear >= queue->front )
{
for(int i = queue->front; i <= queue->rear; i++)
{
printf("%d ", queue->arr[i]);
}
}
else
{
for(int i = queue->front; i< queue->capacity; i++)
{
printf("%d ", queue->arr[i]);
}
for (int i = 0; i < queue->rear; i++)
{
printf("%d ", queue->arr[i]);
}
}
}
int main(){
int num, data;
printf("Enter the size of your queue:");
scanf("%d", &num);
struct Queue* queue = createQueue(num);
printf("Start filling the queue:\n");
for (int i = 0; i < num; i++)
{
printf("\nEnter the element:");
scanf("%d", &data);
enQueue(queue, data);
}
printQueue(queue);
deQueue(queue);
printf("\nAfter deleting one element:\n");
printQueue(queue);
printf("\nEnter one element:");
scanf("%d", &data);
enQueue(queue, data);
printf("The final queue is:\n");
printQueue(queue);
return 0;
}
Here is the output:
Enter the size of your queue:5
Start filling the queue:
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:4
Enter the element:5
1 5 <- this is the queue I am getting
After deleting one element:
5 <- just a 5?
Enter one element:4 <- I entered 4.
The final queue is:
5 -1007484592 565 1734960750 <- why?