double arrow

While ( Curr )

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;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: