Вставить элемент ‘0’ в середину очереди, если количество элементов четное, и если оно нечетное, то после среднего элемента

#c

#c

Вопрос:

 #include <iostream>
#include <queue>  // подключили библиотеку queue
 
using namespace std;
 
int main() {
  setlocale(LC_ALL,"rus");
  queue <int> q;  // создали очередь q
  
  cout << "Пользователь, пожалуйста введите 7 чисел: " << endl;
 
  for (int h = 0; h < 7; h  ) { 
    int a; 
    
    cin >> a;
      
    q.push(a);  // добавляем в очередь элементы
  }
  
  cout << endl;
  cout << "Самый первый элемент в очереди: " << q.front() << endl;  // выводим первый
                                                                   // элемент очереди
  q.pop();  // удаляем элемент из очереди
    
  cout << "Новый первый элемент (после удаления): " << q.front() << endl;
    
  if (!q.empty()) cout << "Очередь не пуста!";  // проверяем пуста ли очередь (нет)
    
  system("pause");
  return 0;
}
  

Я хочу вставить ‘0’ в середину очереди, если количество элементов четное, а если нечетное, то после среднего элемента.

Комментарии:

1. Почему вы хотите вставить что-то в середину очереди? Почему вы вообще используете очередь?

Ответ №1:

Переключение очереди не допускается. В очереди нет операции для вставки в середину. Таким образом, queue, вероятно, не является хорошим выбором структуры данных для вашего варианта использования.

Для достижения соответствующего результата можно использовать следующий алгоритм:

 repeat initial size / 2 times:
    push front element of the old queue into a new one
    pop element from the front of the old queue
push the new element
repeat until queue is empty
    push front element of the old queue into a new one
    pop element from the front of the old queue
  

Обратите внимание, что это имеет линейную сложность.

Комментарии:

1. можете ли вы объяснить это с помощью примера кодирования на c или java, который мне очень понравился

Ответ №2:

С помощью a queue вы не можете этого сделать, так как это недопустимая операция. Но если вам действительно нужно это сделать, вы можете создать две очереди, а во второй нажимать элементы первой очереди до тех пор, пока не будет достигнута средняя или одна после средней позиции, а затем нажать ‘0’, а затем нажать остальные элементы.

Или вам следует рассмотреть структуру данных, которая позволяет вставлять в середину, если очередь не является принудительной!