Folgendes ist meine Warteschlangenimplementierung. Meine Warteschlange ist einfach eine Anordnung von zwei qnodes: Kopf und Rückseite. Enqueue und Dequeue sollen die interne Queue-Implementierung übernehmen.Was ist in dieser Warteschlangenimplementierung falsch?
Die Ausgabe an Q[0].next == Q[1].next
kommt 1, nachdem ich Enqueue mit verschiedenen Ganzzahlen aufrufen. Ich kann den Fehler nicht erkennen.
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;
}
Dank
'malloc (2 * sizeof (qnode));'? – Groo
als Q selbst wird ein Array von 2 qnodes sein –
Erstens wird es nicht ein * Array * von 2 Knoten, es wird eine * verknüpfte Liste * sein, und Sie brauchen nur den Kopf Knoten auf den ersten Knoten oder zeigen "NULL". Ihre 'Enqueue'-Funktion sollte die Knoten nach Bedarf zuordnen. [Beispiel] (https://gist.github.com/mycodeschool/7510222). – Groo