Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void
- myQueue::setNegativeAfterPositive()
- {
- cell* start = _first; // Временный указатель на элемент, с которого каждый раз будет начинаться поиск первого положительного
- while(true) // Бесконечный цикл из которого возможно выйти только break'om
- {
- cell* it = start; // После каждого прохода по очереди, наш it будет меняться, поэтому его нужно опять ставить на начальную позицию
- cell* firstNextPositive = nullptr; // Указатель на элемент, идущий перед первым положительным ( чтобы удалять положительный)
- bool isFound = false; // Флаг, позволяющий понять, нашёлся ли в очереди положительный элемент
- while(it->next != nullptr) // Смотрим в следующий элемент (Если он существует, то ...)
- {
- if(it->next->value > 0) // Смотрим в значение следующего (Если оно положительное,то ...)
- {
- isFound = true; // Отмечаем, что встретили положительный
- break; // Заканчиваем пробежку по очереди ( выходим из текущего WHILE)
- }
- it= it->next; // Переходим к следующему элементу
- }
- if(isFound) // После пробежки по очереди, если нашлось положительно, то ...
- {
- int value = it->next->value; // Сохраняем число следующего(положительного)
- cell* toDelete = it->next; // И указатель на сам положительный
- it->next = it->next->next; // Переставляем указатель на следующий следующего ( Есть 3 4 6, нам нужно удалить 4, делаем так, чтобы 3 указывал на 6)
- delete toDelete; // Удаляем положительный
- cell* newCell = new cell; // Создаём новую ячейку
- newCell->value = value; // Даём ей значение положительного
- if(start->value <= 0) // Если у нас в начале очереди НЕ стоит положительный, то ...
- {
- newCell->next = _first; // Вставляем перед первым
- start = newCell; // Указаваем, что теперь начинаем с него
- _first = newCell; // Не забываем про указатель _first
- }
- else // Иначе (Если в начле всё-таки положительный)
- {
- newCell->next = start->next;// Нужно вставить между первым и вторым, поэтому наша ячейка указывает на "второй"
- start->next = newCell; // Следующий после первого теперь наша ячейка
- start = newCell; // Следующую пробежку начнём с этой ячейки(т.к. смысла проверять положительные нет)
- }
- }
- else // Если не нашёлся положительный ( нет положительных в очереди)
- {
- break; // Выходим из бесконечного цикла
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement