Написать программу, строящую списочную структуру, состоящую из трехнаправленного и двух однонаправленных списков, связанных между собой. Каждый элемент трехнаправленного списка состоит из трех полей: первое и второе поля — для связи с элементами однонаправленных списков, третье — для связи элементов списка. Первое поле элемента однонаправленного списка — информационное (заполняется вводимой последовательностью целых чисел, а 1, а2 ,…, а n, 0,.
в которой 0 отмечает конец ввода число N не вводится, а подсчитывается при вводе последовательности), а второе используется для связи элементов списка. Если N нечетно, то один из однонаправленных списков должен оказаться короче другого. Ссылочным полям, которые никуда не ведут, должно быть присвоено значение NIL. Ссылочная переменная S используется для доступа к списочной структуре.
Разработка алгоритма
Блок-схема алгоритма формирование двух списков:
Программная реализация
Создана структура для элемента однонаправленного списка List1, которая содержит следующие поля:
- · Информационное поле
- · Указатель на правый элемент
Создана структура для элемента трехнаправленного списка List3, которая содержит следующие поля:
- · Указатель на верхний элемент
- · Указатель на нижний элемент
- · Указатель на правый элемент
Работа программы происходит по следующим этапам:
- · Объявляем указатель s на начало списка. Сначала его обнуляем.
- · Вызываем функцию InputList, которая создает списки и возвращает количество введенных элементов. Эта функция размещает элементы списка в динамической памяти, вводит числа (информационные поля элементов списка) с клавиатуры и настраивает связи между элементами списков.
- · Вызываем функцию ViewList, которая позволяет просматривать списки. Эта функция при нажатии клавиши `2' позволяет из трехнаправленного списка перемещаться в нижний список, при нажатии клавиши `8' позволяет из трехнаправленного списка перемещаться в верхний список, а при нажатии клавиши `6' позволяет перемещаться вправо по трехнаправленному списку.
При всех перемещениях на экран выводится информация о текущем элементе списка.
Нажатие клавиши `0' - окончание просмотра.