- •Связанные структуры
- •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 main ( )
{
for (int i=1 ; i<=20 ; i++)
dop ( s1 , i );
cout<<cht (s1 );
cout<<ud(s1);
cout<<cth (s1 );
cht1(s1); // cht2(s1); }
Список
Рассмотрим сортированный список, в котором элементы упорядочены по убывания или возрастания ключевого признака –одного из элементов структур.
Список –это соединение элементов в порядке убывания или возрастания ключевого признака –одного из элементов структур.
Рассмотрим следующие функции:
добавление элемента в список;
удаление элемента с заданным значением поискового признака;
поиск и вывод заданного элемента;
чтение и вывод всех элементов;
уничтожение списка путем освобождения ОП
Информация связанного списка – не данные типа int, а некая сложная структура пусть - библиотечная карта книги.
вершина хвост
списка списка
data
next
data
next
data
next
data
next
… 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; // подключение слева
}
//--------------------------------------------------------------
// Функция дополнения с клавиатуры
