Я пытаюсь создать функцию для создания очереди с приоритетами. Мои структуры таковы:
struct node {
char *item;
struct node *next;
};
struct queue {
struct node *start;
struct node *end;
};
struct priority_queue {
struct queue **aoq;
int x;
};
Моя функция, которую я хочу реализовать:
struct priority_queue *priority_queue_create(int x);
Здесь, как видно из структуры priority_queue, структура queue ** aoq по сути является массивом очередей, которые я хочу. int x, как и в заголовке функции, это количество очередей в массиве.
Мое предположение заключается в следующем:
struct priority_queue *priority_queue_create(int x) {
struct priority_queue *pq = malloc(sizeof(struct priority_queue));
pq->x = x;
pq->aoq = malloc(x* sizeof(struct queue));
return pq;
}
Там, где я положил 3 строки комментария в приведенном выше коде, я подозреваю, что это моя ошибка. Я хочу иметь возможность сделать что-то вроде: если x = 3, должен быть массив с 3 очередями, и я предполагаю, что я смогу получить к нему доступ, выполнив что-то вроде
pq->aoq[0] /// to access the first queue in the array, or
pq->aoq[2] /// to access the third queue in the array
Может кто-нибудь помочь мне исправить мою реализацию? Заранее спасибо.
Редактировать: Другие реализации, которые я пробовал:
struct priority_queue *priority_queue_create(int x) {
struct priority_queue *pq = malloc(sizeof(struct priority_queue *));
pq->x = x;
pq->aoq = malloc(x * sizeof(struct queue *));
for (int i = 0; i < x; ++i) {
pq->aoq[i] = malloc(sizeof(struct queue));
}
return pq;
}