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

Void dop1 (spisoc*&s)

{ spisoc*list,*pr ;

char c;

do

{ // тело цикла

cout<<"Для ввода данных нажмите любую клавишу  и Esc –“

если ввод производить не надо \n ";

get(c);

// если символ отличен от символа Esc

if(c!=27){

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

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

spisoc*stnew=new(spisoc); // выделяем память на новую структуру

cout<<"Введите данные структуры\n"

<<"Название:" ;stnew->name=new char [90]; //выделяем память

cin.getline(stnew->name,90); // вводим строку -название

cout<<"\nАвтор:" ;stnew->author=new char[50];

cin.getline(stnew->author,50);

cout<<"Год издания:";cin>>stnew->year; // вводим число - год

cin.ignore(80,'\n'); // игнорируем пробелы и извлекаем Enter

// структура введена долее аналогично предыдущей функции

while(list && (strcmp(list->name,stnew->name)<=0))

{ pr=list; list=list->next;};

stnew->next=list;

if(pr= =0) s=stnew;

else pr->next=stnew;

}

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

} // завершение тела цикла

while(c!=27); // пока символ отличен от Esc повторяем тело цикла

}

//Функция чтения списка, использующая цикл для продвижения

//по списку

Void cht(spisoc*s)

{ cout<<"\n\nСтруктуры списка :";

count=0; // устанавливаем нумерацию структур на 0

spisoc*list=s; // установка текущего указателя на вершину

if(list= =0) cout<<"\nСписок пуст";

else

while(list) // пока list отличен от нуля

{

print( *list); // выводим структуру

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

} // тело цикла while

count=0; // опять нумерация структур- внешняя переменная

//устанавливается на ноль

}

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

// Функция чтения списка, использующая рекурсию

Void cht1(spisoc*s)

{

if(s!=0)

{ print( *s); // выводим структуру вершины

if ( s->next !=0) // если указатель на следующую структуру //ненулевой

cht1( s->next); // вызываем функцию, в которую в качестве вершины

// передаем следующую структуру

}

else cout<< “Список пуст” ;

}

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

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

Void poisk (spisoc*s, int year)

{ spisoc*list=s; // установка текущего указателя на вершину

if(list==0) cout<<"\nСписок пуст";

else {

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

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

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

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

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

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

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

else {cout<<"\n\n Результат поиска :";print1 (*list);}

}

}

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

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