> It's kinda of irritating having to test it ass one, go change the separate files, create another zip and then have to submit it.
You're doing something wrong.

You can test locally by doing
gcc main.c queue.c
and the compiler will do the right thing.

You then zip up the files and submit them.

There is no need to mess about with editing (and the mistakes that introduces).

> But just a last question: Is it ok to define the start and rear pointers as global variables?
Not really - I mean you can get away with it in small programs, but it's a bad habit.

You should have something like
Code:
typedef struct {
  Queue *front;
  Queue *rear;
} List;

// Then pick an API to suit
void push(List *lists[], int q, int x);   // push works out which list to use
void push(List *list, int x);  // caller tells push which list to use
main.c has a local variable
Code:
List lists[3] = { 0 };
and passes that to functions.