Struct t_Item
{
double Inf;
t_Item * Adr;
};
Для того чтобы хранить в списке другие данные (не double), достаточно заменить тип double поля Inf на другой необходимый тип данных.
Тип адресного поля этой структуры определен как указатель на тип данных элемента списка (t_Item * Adr).
Создание списка
Представленная ниже функция CreateList обеспечивает создание динамического однонаправленного списка на Length элементов и возвращает адрес первого элемента созданного списка.
t_Item *CreateList (unsigned Length)
{
t_Item *Curr = 0, // Адрес очередного элемента списка
*Next = 0; // Адрес следующего за очередным элемента списка
// Начинаем создавать список с последнего элемента
for (unsigned i = 1; i <= Length; ++ i)
{
// Создаем очередной элемент списка
Curr = new t_Item;
// В адресную часть записываем адрес следующего
// за очередным элемента списка
Curr->Adr = Next;
// Запоминаем адрес очередного элемента в качестве
// следующего элемента для следующего шага цикла
Next = Curr;
}
// Возвращаем адрес последнего созданного элемента,
// как адрес первого элемента списка
return Curr;
}
Для создания списка используется цикл на Length итераций. На каждом шаге этого цикла в динамической области памяти создается очередной элемент списка с адресом Curr и в его адресную часть Curr->Adr записывается адрес следующего за ним элемента Next. Наиболее простой алгоритм работы этой функции получается в том случае, когда список начинает создаваться не с первого элемента, а с последнего.
Использовать эту функцию для создания списка можно, например, так:
t_Item *List = CreateList (5);
Переменная List будет содержать адрес первого элемента динамического списка, содержащего 5 элементов. Информационные части элементов этого списка в функции CreateList не инициализируются и будут иметь после выхода из функции непредсказуемые значения.
Заполнить информационные части элементов этого списка конкретными данными, например, с клавиатуры можно так:
// Чтобы не потерять адрес начала списка (он нам понадобится для дальнейшей
// работы со списком) вводим дополнительную переменную-указатель Curr – адрес
// очередного элемента списка и делаем его равным адресу первого элемента списка
t_Item * Curr = List;
// Выполняем цикл пока адрес очередного элемента списка не равен 0
{
// Вводим данные в информационную часть очередного элемента с клавиатуры
cin >> Curr->Inf;
// Делаем очередным следующий элемент списка. Для этого переменной
// Curr присваиваем адрес следующего элемента списка. Последний элемент
// списка содержит в адресной части 0, поэтому кода мы обработаем последний
// элемент списка, переменная Curr станет равна 0, и цикл закончится
Curr = Curr->Adr;
}
Вывод значений информационных частей элементов списка на экран делается аналогично:
Curr = List;