Как перевернуть очередь и отобразить ее

110
11

Я сделал класс очереди, и у меня очередь, и я хочу изменить его, однако, когда я реализую функцию, она ничего не отображает. Здесь

void reverse(Queue <T> &queue) {
if(!queue.empty())
{
int temp=queue.queue_front;
queue.pop(queue.queue_front);
reverse(queue);
queue.push(temp);
}
}

Поп-функция, которую я использую, требует значения, поэтому существует queue.queue_front.I'm пытается сделать это с рекурсией. Вот моя функция печати

void display() {
for(int current = queue_front+1; current < queue_length; current++)
{
cout << "[" << current << "]=" << queue_array [current] << " ";
}
}

Теперь, что я делаю в основной функции

Queue <int>queue1(10);
queue1.push(16);
queue1.push(14);
queue1.push(6);
queue1.push(60);
queue1.reverse(queue1);
queue1.display();

Здесь функция pop

void pop(T& item) {
if (empty()) {
cout << "The Queue is empty!";
exit(1);
}
else {
queue_front = (queue_front + 1) % queue_size;
item = queue_array[queue_front];
queue_length--;
}
}

Он ничего не отображает. Спасибо.

спросил(а) 2021-01-19T14:42:50+03:00 6 месяцев, 2 недели назад
1
Решение
100

Вы тестируете очередь целых чисел, которая скрывает довольно много ошибок.
Вы должны были протестировать с помощью Queue<std::string>.

Во-первых, здесь:

int temp=queue.queue_front;

вы сохраняете индекс, а не элемент.
То, что вы намерены, должно быть

T temp = queue.queue_array[queue.queue_front];

но нет причин вмешиваться в переменные-члены (см. ниже).

Вот,

queue.pop(queue.queue_front);

вы передаете ссылку на член очереди, чтобы pop.
Параметр для pop - это то, где верхний элемент сохраняется после его всплытия.

Другими словами, после этой строки queue.queue_front будет элементом, который находился в передней части очереди, а не индексом нового фронта очереди.

Это, вероятно, будет работать:

void reverse(Queue <T> &queue) {
if(!queue.empty())
{
T temp;
queue.pop(temp);
reverse(queue);
queue.push(temp);
}
}

ответил(а) 2021-01-19T14:42:50+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема