- •Связанные структуры
- •Void dop1 ( stack*&s )
- •Int cht ( stack *s )
- •Int cht1 ( stack *s )
- •Void main ( )
- •Очередь
- •Void main ( )
- •Функции списка
- •Void print(spisoc st)
- •Void print1(spisoc st)
- •Void dop (spisoc*&s, spisoc*st)
- •Void dop1 (spisoc*&s)
- •Void cht(spisoc*s)
- •Void cht1(spisoc*s)
- •Void poisk (spisoc*s, int year)
- •Void poisk1 (spisoc*s, int year)
- •Void ud (spisoc*&s, int year)
- •Void ud1 (spisoc*&s,int year)
- •Void osv (spisoc*&s)
- •Void main()
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);
} // конец альтернативной ветви
}
//--------------------------------------------------------------------------
//Функция уничтожения списка
