следующая моя реализация очереди. Моя очередь - это просто массив из двух qnodes: head и rear. enqueue и dequeue должны обрабатывать внутреннюю реализацию очереди.Что случилось в этой реализации очереди?
Выход на Q[0].next == Q[1].next
наступает 1 после того, как я вызываю enqueue с разными целыми числами. Я не могу понять ошибку.
struct Qnode{
int index;
struct Qnode *next;
};
typedef struct Qnode qnode;
qnode* makeQueue(){
qnode *Q;
Q = (qnode *) malloc(2*sizeof(qnode));
qnode head,tail;
head.next = NULL;
tail.next = NULL;
head.index = 0;
tail.index = -1;
Q[0] = head;
Q[1] = tail;
return Q;
}
void enQueue(qnode *Q, int index){
qnode node,head = Q[0], rear = Q[1];
node.index = index;
node.next = NULL;
if(head.next == NULL && rear.next == NULL){
head.next = &node;
rear.next = &node;
}
else{
(rear.next)->next = &node;
rear.next = &node;
}
Q[0].index = head.index + 1;
}
Благодаря
'malloc (2 * sizeof (qnode));'? – Groo
как Q сам будет массивом из 2 qnodes –
Во-первых, это не будет * массив * из 2 узлов, это будет * связанный список *, и вам нужен только главный узел, чтобы указать на первый узел или 'NULL'. Функция 'enqueue' должна выделять узлы по мере необходимости. [Пример] (https://gist.github.com/mycodeschool/7510222). – Groo