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

Void main ( )

{

for (int i=1 ; i<=20 ; i++)

dop ( s1 , i );

cout<<cht (s1 );

cout<<ud(s1);

cout<<cth (s1 );

cht1(s1); // cht2(s1); }

Список

Рассмотрим сортированный список, в котором элементы упорядочены по убывания или возрастания ключевого признака –одного из элементов структур.

Список –это соединение элементов в порядке убывания или возрастания ключевого признака –одного из элементов структур.

Рассмотрим следующие функции:

  1. добавление элемента в список;

  2. удаление элемента с заданным значением поискового признака;

  3. поиск и вывод заданного элемента;

  4. чтение и вывод всех элементов;

  5. уничтожение списка путем освобождения ОП

Информация связанного списка – не данные типа int, а некая сложная структура пусть - библиотечная карта книги.

вершина хвост

списка списка

data next

data next

data next

data next

s

… 0

data next

data next

data next

новый новый новый

элемент

Функции списка

#include<сstring>

#include<iostrea>

using namespace std;

int count ; // внешняя переменная для нумерации структур в списке

// опрееление структурного типа узла списка:

struct spisoc{

char*name; // название книги

char*author; // имя автора

int year; // год издания

spisoc* next; // указатель на следующую структуру в списке

};

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

spisoc stm[ ]=

{ { "C++" , "Подбельский В.В.", 2020 },

{ "TurboC++" , "Винер Р.С.", 1998 },

{ "C-C++", "Березин Б.И. " , 2006 } };

spisoc *s; // определение внешнего указателя на вершину списка, он

// по умолчанию инициирован нулем (null)

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

// Функция вывода на экран данных структуры - параметра

Void print(spisoc st)

{

//static int count =0;

cout<<"\n"<<++count<<". "<<st.name<<", " <<st.author<<", " <<st.year;

}

// Функция вывода без нумерации

Void print1(spisoc st)

{ cout<<st.name<<", " <<st.author<<", " <<st.year;

}

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

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

Void dop (spisoc*&s, spisoc*st)

{

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

//вершину

*pr=0, // вспомогательный указатель инициируется 0

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

// типа spisoc

*stnew=*st; // копируются данные в новую структуру

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

while(list && (cstrcmp(list->name,st->name)<=0))

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

// текущую структуры, а

list=list->next; //текущему указателю list присваиваем значение

//указателя на следующую структуру list->next

}

stnew->next=list; //производим подключение справа: новую

// запись помещаем перед list

// организуем подключение слева

if(pr= =0) s=stnew; // если не только list но и pr равен нулю, это

// значит, что список пуст или вершинный

// элемент не удовлетворяет второму условию в

//заголовке цикла и поэтому вершину

//надо установить на новый элемент

else pr->next=stnew; // подключение слева

}

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

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