Практикум по курсу "Алгоритмизация и программирование". Часть 2. Андрианова А.А - 80 стр.

UptoLike

А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова .
Раздел 5. Двусвязные списки
Двусвязные списки в отличие от односвязных характеризуются тем, что
дают возможность просмотра элементов списка в обоих направлениях. Это
достигается посредством хранения в каждом узле двух адресов: следующего и
предыдущего элементов. Первый элемент имеет ссылку на предыдущий, рав-
ную NULL, а последний элемент имеет ссылку на следующий, равную NULL
(рис. 5.1).
Рис. 5.1. Пример двусвязного списка
// элемент списка
struct Element
{
int info; // информационное поле
Element* prev; // указатель на предыдущий элемент
Element* next; // указатель на следующий элемент
};
// структура для двусвязного списка
struct TwoWayList
{
Element* head; // адрес первого элемента списка
Element* tail; // адрес последнего элемента списка
};
Далее приводится описание процесса решения некоторых задач с при-
менением пользовательских функций.
Задача 1. Дан текстовый файл, содержащий целые числа. Написать функ-
цию построения двусвязного списка из этих чисел.
Параметрами функции являются имя файла (file_name) и структура
для хранения начала и конца списка (переменная L). Код возврата функции
будет равен 1, если список создан успешно, 0 – если создан пустой список,
-1 – если файл не был открыт.
Отдельно обрабатывается создание первого узла выделение памяти и
заполнение данными элемента L.head. Если файл пуст, то L.head и L.-
80
А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова                        .
                                                 Раздел 5. Двусвязные списки

    Двусвязные списки в отличие от односвязных характеризуются тем, что
дают возможность просмотра элементов списка в обоих направлениях. Это
достигается посредством хранения в каждом узле двух адресов: следующего и
предыдущего элементов. Первый элемент имеет ссылку на предыдущий, рав-
ную NULL, а последний элемент имеет ссылку на следующий, равную NULL
(рис. 5.1).




                            Рис. 5.1. Пример двусвязного списка

    // элемент списка
    struct Element
    {
          int info;                   // информационное поле
          Element* prev;              // указатель на предыдущий элемент
          Element* next;              // указатель на следующий элемент
    };

    // структура для двусвязного списка
    struct TwoWayList
    {
          Element* head;    // адрес первого элемента списка
          Element* tail;    // адрес последнего элемента списка
    };

    Далее приводится описание процесса решения некоторых задач с при-
менением пользовательских функций.
    Задача 1. Дан текстовый файл, содержащий целые числа. Написать функ-
цию построения двусвязного списка из этих чисел.
    Параметрами функции являются имя файла (file_name) и структура
для хранения начала и конца списка (переменная L). Код возврата функции
будет равен 1, если список создан успешно, 0 – если создан пустой список,
    -1 – если файл не был открыт.
    Отдельно обрабатывается создание первого узла – выделение памяти и
заполнение данными элемента L.head. Если файл пуст, то L.head и L.-


                                            80