#include <iostream>
#include <windows.h>
using namespace std;
struct node //описание узла
{
int info; //информационное поле
node* next; //поле для связи с другим узлом
};
node* first(int d) //начальное формирование очереди
{
node* p = new node; //выделение памяти под новый узел
p->info = d;
p->next = NULL; //следующий элемент за первым - пустой
return p;
}
void add(node **pend, int d) //добавление элемента в очередь
{
node* p = new node; //выделение памяти под новый узел
p->info = d;
p->next = NULL; //следующего нет - указатель ставим на NULL
(*pend)->next = p;
*pend = p;
}
void print(const node* pbeg) //распечатка элементов очереди
{
cout << endl;
while (pbeg != NULL) //пока не конец
{
cout << pbeg->info << " "; //печать значения текущего узла
pbeg = pbeg->next; //перемещаемся к следующему узлу
}
cout << endl;
}
void del(node** pbeg) //удаление простых чисел из очереди
{
node* temp, * prev;
temp = *pbeg; //устанавливаем указатель temp на начало очереди
prev = *pbeg; //указатель предыдущего узла для текущего
while (temp != NULL)
{
if ((temp->info) > 0) //если нашли узел с заданным значением
{
for (int i = 2; i < sqrt((temp->info)); i++) //счетчик для определения простоты числа
{
if ((temp->info) % i != 0)
{
if (temp == (*pbeg)) //если это начало очереди
{
(*pbeg) = temp->next;
delete temp;
temp = *pbeg;
}
else //если найденный узел не является началом
{
prev->next = temp->next;
delete temp;
temp = *pbeg;
}
}
}
}
else //если узел не содержал заданного значения
{
prev = temp;
temp = temp->next;
}
}
}
void clear(node** pbeg) //очистка очереди (удаление всех узлов)
{
node* temp;
while ((*pbeg)!= NULL)
{
temp = (*pbeg)->next; //устанавливаем temp на следующий узел
delete* pbeg; //удаляем текущий узел
*pbeg = temp; //устанавливаем указатель начала на temp
}
}
int main()
{
setlocale(LC_ALL, "Russian");
node* pbeg, * pend; //указатели на начало и на конец очереди
int w;
char ch;
cout << "Введите число: " << endl;
cin >> w;
pbeg = first(w); //создание первого узла очереди
pend = pbeg;
cout << "Ввести еще одно число? (y/n)" << endl;
cin >> ch;
while (ch != 'n')
{
cout << "Введите число: " << endl;
cin >> w;
add(&pend, w); //добавление нового узла в очередь
cout << "Ввести еще одно число? (y/n) " << endl;
cin >> ch;
}
print(pbeg);
del(&pbeg); //удаление простых чисел из очереди
cout << "После удаления простых чисел получаем: ";
print(pbeg); //распечатка очереди после удаления
clear(&pbeg);
}