Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование С++, решение задачи

Ева Ворую_котиков Ученик (56), на голосовании 4 месяца назад
Прошу помочь с задачкой :3
Создать двусвязный список, содержащий целые числа. После всех чисел, равных минимальному числу, вставить последний четный элемент. Например, было 2 8 2 1 6 8 8 1 2 2 8 2 1. Стало 2 8 2 1 2 6 8 8 1 2 2 2 8 2 1 2
Голосование за лучший ответ
Татьяна Просветленный (36384) 5 месяцев назад
### Шаги решения:
1. Определим структуру узла для двусвязного списка.
2. Напишем функции для добавления элементов в список и вывода списка.
3. Найдем минимальный и последний четный элементы списка.
4. Вставим последний четный элемент после всех минимальных чисел.
#### Определение структуры узла:
 #include  
#include

struct Node {
int data;
Node* next;
Node* prev;
Node(int val) : data(val), next(nullptr), prev(nullptr) {}
};

void insert(Node*& head, int val) {
Node* newNode = new Node(val);
if (!head) {
head = newNode;
} else {
Node* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
}

void printList(Node* head) {
while (head) {
std::cout << head->data << " ";
head = head->next;
}
std::cout << std::endl;
}
#### Функции для добавления элементов и вывода списка:
 void findMinAndLastEven(Node* head, int& min, int& lastEven) { 
min = INT_MAX;
lastEven = INT_MIN;
Node* temp = head;
while (temp) {
if (temp->data < min) {
min = temp->data;
}
if (temp->data % 2 == 0) {
lastEven = temp->data;
}
temp = temp->next;
}
}

void insertAfterMin(Node*& head, int min, int lastEven) {
if (lastEven == INT_MIN) return;
Node* temp = head;
while (temp) {
if (temp->data == min) {
Node* newNode = new Node(lastEven);
newNode->next = temp->next;
if (temp->next) {
temp->next->prev = newNode;
}
temp->next = newNode;
newNode->prev = temp;
temp = newNode->next;
} else {
temp = temp->next;
}
}
}
#### Основная функция:
 int main() { 
Node* head = nullptr;
int elements[] = {2, 8, 2, 1, 6, 8, 8, 1, 2, 2, 8, 2, 1};
int size = sizeof(elements) / sizeof(elements[0]);
for (int i = 0; i < size; ++i) {
insert(head, elements[i]);
}

std::cout << "Original list: ";
printList(head);

int min, lastEven;
findMinAndLastEven(head, min, lastEven);
insertAfterMin(head, min, lastEven);

std::cout << "Modified list: ";
printList(head);

return 0;
}
### Объяснение:
1. Определение структуры узла: Каждый узел двусвязного списка содержит data, указатели на next и prev.

2. Функции для добавления и вывода: insert добавляет элемент в конец списка, printList выводит список.

3. Нахождение минимального и последнего четного элементов: Функция findMinAndLastEven находит минимальное число и последний четный элемент в списке.

4. Вставка после минимальных чисел: Функция insertAfterMin вставляет последний четный элемент после всех встреченных минимальных чисел.

### Запуск программы:
Этот код создает, модифицирует и выводит двусвязный список, как требуется согласно задаче. В конце выполнения вы увидите сначала исходный список, затем список с внесенными изменениями.
Похожие вопросы