Кажется, что функция должна выглядеть следующим образом
void displayQueue( queue *Q )
{
if ( !isEmpty( Q ) )
{
int temp = dequeue( Q );
printf( "%d -> ", temp );
displayQueue( Q );
reverse( Q );
enqueue( Q, temp );
reverse( Q );
}
}
Если вы хотите избежать слишком частого переворота очереди, вы можете написать функцию с переменной stati c, например, такой как
void displayQueue( queue *Q )
{
static int state = 0;
if ( !isEmpty( Q ) )
{
int to_reverse = state ^ 1;
if ( to_reverse ) state = to_reverse;
int temp = dequeue( Q );
printf( "%d -> ", temp );
displayQueue( Q );
enqueue( Q, temp );
if ( to_reverse )
{
reverse( Q );
state = 0;
}
}
}
Без переменной stati c вы можете написать функцию, разбив ее на две функции. Первый вызывает рекурсивную функцию и полностью изменяет результат. Вторая - это рекурсивная функция, которая отображает очередь.
Например,
void recursiveDisplayQueue( queue *Q )
{
if ( !isEmpty( Q ) )
{
int temp = dequeue( Q );
printf( "%d -> ", temp );
recursiveDisplayQueue( Q );
enqueue( Q, temp );
}
}
void displayQueue( queue *Q )
{
if ( !isEmpty( Q ) )
{
recursiveDisplayQueue( Q );
reverse( Q );
}
}