`
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct {
char username[11];
int level;
char faction[6];
} User;
typedef struct node {
User data;
struct node* next;
} Node;
typedef struct {
Node* head;
Node* tail;
} Queue;
void initQueue(Queue* q) {
q->head = NULL;
q->tail = NULL;
}
int isQueueEmpty(Queue* q) {
return (q->head == NULL);
}
void enqueue(Queue* q, User data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (q->tail == NULL) {
q->head = newNode;
}
else {
q->tail->next = newNode;
}
q->tail = newNode;
}
void dequeue(Queue* q, User* data) {
Node* temp;
*data = q->head->data;
temp = q->head;
q->head = q->head->next;
free(temp);
if (q->head == NULL) {
q->tail = NULL;
}
}
void generateUser(User* user) {
int i;
char charset[] = { "abc1234561", "def2222222", "ghi3333333", "opq4444444", "rst5555555", "uvw6666666", "xyz7777777", "ABC1111111", "DEF1234567", "GHI0987654" };
for (i = 0; i < 11; i++) {
user->username[i] = charset[rand() % (sizeof(charset) - 1)];
}
user->username[10] = '\0';
user->level = rand() % 60 + 1;
switch (rand() % 3) {
case 0:
strcpy(user->faction, "red");
break;
case 1:
strcpy(user->faction, "blue");
break;
case 2:
strcpy(user->faction, "green");
break;
default:
break;
}
}
int enqueueUsers(Queue* q, int numUsers) {
int i;
User user;
for (i = 0; i < numUsers; i++) {
generateUser(&user);
enqueue(q, user);
}
return 0;
}
// test main
int main(int argc, char* argv[]) {
int numUsers;
User user;
Queue q;
srand(time(NULL));
if (argc != 2) {
printf("Usage: %s numUsers\n", argv[0]);
return 1;
}
numUsers = atoi(argv[1]);
if (numUsers <= 0) {
printf("Invalid number of users.\n");
return 1;
}
initQueue(&q);
if (enqueueUsers(&q, numUsers) != 0) {
printf("Error: Could not enqueue users.\n");
return 1;
}
while (!isQueueEmpty(&q)) {
dequeue(&q, &user);
printf("Username: %s, Level: %d, Faction: %s\n", user.username, user.level, user.faction);
}
return 0;
}
```