Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Связанные структуры.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
151 Кб
Скачать

Void poisk1 (spisoc*s, int year)

{

cout<<"\n\nРезультат поиска:";

int k=0; // счетчик структур в списке, у которых совпадает поле

spisoc*list=s; // устанавливаем текущий указатель на вершину

if(list= =0) cout<<"\nСписок пуст"; //если он ни на что не

// указывает

else

{ // в противном случае

while (list) // организуем цикл до конца списка

{ //если есть совпадение, выводим структуру

if(list->year==year) {cout<<"\n"<<++k<<". "; print1 (*list);}

list=list->next; // переходим к следующей структуре

}

// просмотрели все структуры и, если k осталось равным 0

if(k==0) cout<<"Элемент не найден ";

}

}

//----------------------------------------------------------------------------------

//Функция удаления одной первой попавшейся структуры, у

//которой значение поля – год издания совпало со значением //параметра функции

Void ud (spisoc*&s, int year)

{ spisoc*list=s, // устанавливаем текущий указатель на вершину

//списка

*pr=0; // вспомогательный указатель равен нулю

// организуем цикл продвижения по списку

while(list&&list->year!=year) //пока не достигнем ноль или не

// найдем структуру, у которой совпадает поле с

//параметром

{ pr=list; // pr присваиваем значение текущего указатель

list=list->next; //текущий указатель прикрепляем к следующей

//структуре

}

//вышли из цикла

if(list= =0) cout<<"Элемент не найден"; // если цикл прервался по

//достижению конца списка

else

{ // альтернативная ветвь

cout<<"\n\n“Удаление  :";print1(*list); // в противном случае

//выводится удаляемая

// структура , удаляем структуру из списка

if(pr= =0) // если найденная структура – первая в списке

s=list->next; // вершину устанавливаем на следующую за ней

//структуру

//в противном случае – если не первая, предыдущая структура

// напрямую связывается со следующей от list

else pr->next=list->next;

delete(list); // память , отведенная для list освобождается

} // конец альтернативной ветви

}

//-------------------------------------------------------------------------------

//Функция удаляет все структуры, у которых значение поля

//совпало со значением параметра

Void ud1 (spisoc*&s,int year)

{

static int k=0; // счетчик нужных структур

spisoc*list=s, //текущий указатель устанавливается на вершину

//списка

*pr=0; // вспомогательный на null

// организуем цикл продвижения по списку

while(list&&list->year!=year) //пока не достигнем ноль или не

// найдем структуру, у которой совпадает поле с параметром

{pr=list; list=list->next;} // продвигаемся по списку

//вышли из цикла

//если мы достигли конца списка( list = =0), не найдя ни одной //структуры (k= = 0)

if((list==0)&&(k==0)) cout<<"\nЭлемент не найден";

else

// в противном случае – альтернативная ветвь

if(list!=0) // если цикл завершился потому, что нашлась

// структура для удаления

{

cout<<"\n"<<++k<<". ";print1(*list); // выводим номер и структуру

//удаляем структуру также как в предыдущей функции

if(pr==0)

s=list->next;

else pr->next=list->next;

delete(list);

//рекурсия

// опять вызываем функцию, в которую передаем вершину уже //измененного списка для поиска и удаления других нужных структур

ud1(s,year);

} // конец альтернативной ветви

}

//--------------------------------------------------------------------------

//Функция уничтожения списка