2016-12-08 1 views
0

Ich setze Spielbrett bewegt sich in diese Warteschlange, für die "geparkten Auto" -Spiel, und es sollte mit 75 Zügen kommen, um das Rätsel zu lösen. Die Warteschlange wird jedoch weiterhin überfüllt, was dazu führt, dass eine Verschiebung nicht in die Warteschlange eingereiht wird, wodurch die Lösung mehr als 75 Züge enthält. Hinweis: Die Größe der Warteschlange kann nicht geändert werden, sie ist konstant. Irgendwelche Ideen?Backtracing Queue

int enqueue(position* p){ 
Q[qrear] = p; 
qrear = qrear + 1; 
if (qrear == QueueArraySize) { 
    qrear = 0; 
} 
qsize = qsize + 1; 
return 0; 
} /*End of insert()*/ 

position* dequeue(){ 
if (qsize == 0) { 
    printf("Queue Underflow \n"); 
    return NULL; 
} 
else { 
    position* temp = Q[qfront]; 
    qfront = qfront + 1; 
    if (qfront == QueueArraySize) { 
     qfront = 0; 
    } 
    qsize = qsize - 1; 
    return temp; 
}   

}

+0

Wie initialisierst du Q? – koper89

+0

Und ich würde vorschlagen, die Struktur zu Q in diesen Funktionen zu übergeben, mit globalen Variablen ist nicht zu gut Idee. Struktur, die Größe, Rückseite, Front und Größe enthält. Und du solltest NULL in Q [qfront] setzen, nachdem du es zu temp genommen hast. – koper89

+0

@ koper89 Position * Q [QueueArraySize]; –

Antwort

0

Ich vermute, Ihr Problem ist, dass WGröße größer als QueueArraySize bekommen können, aber die Anzahl der Elemente in der Warteschlange zu QueueArraySize beschränkt ist.

Enqueue kann nicht "fehlschlagen", es stellt immer eine Position in der Warteschlange ein und erhöht immer die Warteschlangengröße, selbst wenn es zurück zum Anfang von Q kreist (es kann Positionen am Anfang der Warteschlange überschreiben) .

Eine andere Sache zu berücksichtigen ist, dass Sie nicht auf die Beziehung zwischen qrear und qfront achten. Stellen Sie sich vor, dass QueueArraySize 10 ist und Sie 12 Positionen in die Warteschlange stellen, qfront zeigt weiterhin auf Q [0] (da Sie noch nichts aus der Warteschlange genommen haben), aber das ist nicht die richtige "Vorderseite" der Warteschlange seit Q [0] und Q [1] wurde von der 11. und 12. Position, die Sie eingereiht haben, überschrieben. In diesem Fall sollte qfront Q [2] sein. Du solltest qfront verschieben, wenn du dich in gfront einreihst, und du solltest qrear bewegen, wenn du von qrear austrittst.