Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can some experts please fix my code? It is about Queue singly linked list using

ID: 3842172 • Letter: C

Question

Can some experts please fix my code?

It is about Queue singly linked list using C language..

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include "locker.h"

void QueueInit(Queue* p)
{
   p->front = NULL;
   p->rear = NULL;
}

int QIsEmpty(Queue* p)
{
   if(p->front == NULL)
   {
       return 1;
   }
   return 0;
}

void Enqueue(Queue* p, int data)
{
   Node* newNode = (Node*)malloc(sizeof(Node));
   newNode->next = NULL;
   newNode->id = data;
  
   if(QIsEmpty(p))
   {
       p->front = newNode;
       p->rear = newNode;
   } else {
       p->rear->next = newNode;
       p->rear = newNode;
   }
}

void attachEnqueue(Queue* p, int user_id)
{
   Node* temp = p->front;
   temp->user_id = user_id;
   p->front = temp;
      
   while(1)
   {
   printf("Locker %d Owned By %d ", temp->id, temp->user_id);
  
   temp = temp->next;
   }
}

int Dequeue(Queue* p)
{
   Node* temp = p->front;
   uint16_t item;
  
   if(QIsEmpty(p))
   {
       printf("No element exists!");
       exit(0);
   } else {
       item = temp->id;
       p->front = temp->next;
       free(temp);
      
       if(temp == NULL)
       {
           p->rear = NULL;
       }
       return (item);
   }
}
  
void printList(Queue* p)
{
   Node* v = p->front;
   while(v != NULL){
       printf("Locker: %d ", v->id);
       v = v->next;
   }
}

int count (Queue p)
{
int c = 0 ;
Node* temp = p.front ;

while ( temp != NULL )
{
temp = temp->next;
c++ ;
}

return c ;
}

void SearchQueue(Queue* p, int val1)
{
   Node* v = p->front;
   while( v != NULL)
   {
       if(v->id == val1)
       {
           printf("Locker ID: %d ", val1);
           printf("Lock Status: locked ");
           printf("unowned ");
       }
       v = v->next;
   }
}

int main(int argc, char* argv[])
{
  
   Queue queue;
   QueueInit(&queue);
      
   char input[50];
   char command[20];
   int val1;
   uint16_t id = 1;
  
      
   while(1)
   {
       scanf(" %49[^ ]s", input);
       sscanf(input, "%s %d", &command, &val1);
  
       if(strcmp(command, "CREATE") == 0)
       {
           printf("New Locker created: %d ", id);
           Enqueue(&queue, id);
           id++;
       } else if(strcmp(command, "DISPLAY") == 0)
       {
           SearchQueue(&queue, val1);
          
       } else if(strcmp(command, "ATTACH") == 0)
       {
           attachEnqueue(&queue, val1);  
          
       } else if(strcmp(command, "DISPLAYALL") == 0)
       {
           printList(&queue);
                  
       }else if(strcmp(command, "DELETE") == 0)
       {
           printf("Deleted the locker, %d ",Dequeue(&queue));
          
       }else if(strcmp(command, "QUIT") == 0)
       {
           printf("Good Bye! ");
           exit(0);
       }
       continue;
   }
   return 0;
}

The problem is in the attachEnqueue. If I input CREATE, the locker 1 should be created and if I again input CREATE, the locker 2 should be created and they are stored in the queue. What I want to do is, when I input <ATTACH> <value> , the locker 1 should get the value. For example. if I input ATTACH 20, the locker 1 should get the value 20 and print, "Locker 1 owned by 20". Again, if I input ATTACH 30, it should print out "Locker 2 owned by 30".

And if there is nothing in the queue, when I try to input ATTACH <value>, it should print out "Nothing exists in the queue".

Thanks...

Explanation / Answer

please find the below code

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

#include <stdlib.h>

#include <errno.h>

#include <fcntl.h>

#include <string.h>

#include "locker.h"

void QueueInit(Queue* p)

{

   p->front = NULL;

   p->rear = NULL;

}

int QIsEmpty(Queue* p)

{

   if(p->front == NULL)

   {

return 1;

}

return 0;

}

void Enqueue(Queue* p, int data)

{

Node* newNode = (Node*)malloc(sizeof(Node));

newNode->next = NULL;

newNode->id = data;

f(QIsEmpty(p))

{

p->front = newNode;

p->rear = newNode;

} else {

p->rear->next = newNode;

p->rear = newNode;

}

}void attachEnqueue(Queue* p, int user_id)

{

   Node* temp = p->front;

   temp->user_id = user_id;

   p->front = temp;

while(1)

   {

   printf("Locker %d Owned By %d ", temp->id, temp->user_id);

temp = temp->next;

   }

}

int Dequeue(Queue* p)

{

Node* temp = p->front;

   uint16_t item;

f(QIsEmpty(p))

{

printf("No element exists!");

exit(0);

} else {

item = temp->id;

       p->front = temp->next;

       free(temp);

     

       if(temp == NULL)

       {

           p->rear = NULL;

       }

       return (item);

   }

}

void printList(Queue* p)

{

   Node* v = p->front;

   while(v != NULL){

       printf("Locker: %d ", v->id);

       v = v->next;

   }

}

int count (Queue p)

{

int c = 0 ;

Node* temp = p.front ;

while ( temp != NULL )

{

temp = temp->next;

c++ ;

}

return c ;

}

void SearchQueue(Queue* p, int val1)

{

   Node* v = p->front;

   while( v != NULL)

   {

       if(v->id == val1)

       {

           printf("Locker ID: %d ", val1);

           printf("Lock Status: locked ");

           printf("unowned ");

       }

       v = v->next;

   }

}

int main(int argc, char* argv[])

{

   Queue queue;

   QueueInit(&queue);

     

   char input[50];

   char command[20];

   int val1;

   uint16_t id = 1;

     

   while(1)

   {

       scanf(" %49[^ ]s", input);

       sscanf(input, "%s %d", &command, &val1);

       if(strcmp(command, "CREATE") == 0)

       {

           printf("New Locker created: %d ", id);

           Enqueue(&queue, id);

           id++;

       } else if(strcmp(command, "DISPLAY") == 0)

       {

           SearchQueue(&queue, val1);

         

       } else if(strcmp(command, "ATTACH") == 0)

       {

           attachEnqueue(&queue, val1);

         

       } else if(strcmp(command, "DISPLAYALL") == 0)

       {

           printList(&queue);

                 

       }else if(strcmp(command, "DELETE") == 0)

       {

           printf("Deleted the locker, %d ",Dequeue(&queue));

         

       }else if(strcmp(command, "QUIT") == 0)

       {

           printf("Good Bye! ");

           exit(0);

       }

       continue;

   }

   return 0;

}