Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подбельский Фомин_Программирование на языке СИ_...doc
Скачиваний:
356
Добавлен:
10.08.2019
Размер:
53.81 Mб
Скачать

10.8.1. Списки

Разработать комплекс функций для обслуживания сложных структур данных в виде разнообразных списков: однонаправленных, двунаправленных, с ключами, без ключей, кольцевых, неоднородных и т.п.

В помещенных ниже изображениях используются следующие обозначения: D - данные, next (либо N) - указатель на следующий элемент, Р - указатель на предыдущий элемент; К -ключ; begin - указатель на начало списка.

Вариант 1. Однонаправленный список

Вариант 2. Однонаправленный список из элементов с ключами

Вариант 3. Кольцевой список

Вариант 4. Кольцевой список из элементов с ключами

Вариант 5. Двунаправленный список с элементами без ключей

Вариант 6. Двунаправленный список из элементов с ключами

Вариант 7. Однонаправленный неоднородный (гетерогенный) список с однородными подписками

Вариант 8. Однонаправленный неоднородный (гетерогенный) список с однородными подписками из элементов с ключами

Вариант 9. Кольцевой неоднородный (гетерогенный) список с однородными подписками

Вариант 10. Кольцевой неоднородный (гетерогенный) список с однородными подписками из элементов с ключами

Вариант 11. Двунаправленный неоднородный (гетерогенный) список с однородными подсписками

Вариант 12. Двунаправленный неоднородный (гетерогенный) список с однородными подсписками из элементов с ключами

В программах для приведенных вариантов заданий используйте следующие обозначения:

begin - указатель на начало списка;

D - поле данных (строка произвольной длины либо указатель на строку);

К - поле ключа - дополнительное поле элемента списка, заполняемое уникальным значением. Правило формирования ключа предлагается выбрать самостоятельно. Простейшие варианты ключей:

• номер элемента в списке;

• номер элемента при его создании;

• ...

N, next - указатель на следующий элемент списка;

Р - указатель на предыдущий элемент списка;

NULL - нулевой указатель (используется, если для конкретного элемента списка отсутствуют последующий или предыдущий элементы).

Для каждого из вариантов необходимо разработать следующие функции:

1. Создание (пустого списка).

2. Добавление элемента:

• в начало списка;

• в конец списка;

• после элемента с заданным номером;

• (*) после элемента с заданным ключом.

3. Печать списка (вывод на экран дисплея):

• номер элемента;

• содержимое поля данных;

• (*) содержимое поля ключа;

• значение указателя на следующий элемент;

• (**) значение указателя на предыдущий элемент.

4. Удаление элемента из списка:

• из начала;

• из конца;

• с заданным номером;

• (*) с заданным ключом.

5. Запись списка в файл.

6. Уничтожение списка.

7. Восстановление (чтение) списка из файла.

8. Упорядочение элементов в списке по выбранному признаку:

• используя информацию в поле данных;

• (*) используя информацию в поле ключа.

9. Изображение структуры списка на экране дисплея.

Примечания:

1. Звездочкой (*) обозначены функции списков для элементов с ключами.

2. Двумя звездочками (**) обозначены функции для двунаправленных списков.

3. Для неоднородных списков функции обслуживания должны разрабатываться применительно к определенному однородному подсписку.

Вариант 13. Стек.

Необходимо разработать следующие функции:

1. Создание пустого стека.

2. Добавление элемента в стек.

3. Печать стека (вывод на дисплей).

4. Извлечение (удаление) элемента из стека.

5. Запись стека в файл.

6. Уничтожение стека.

7. Восстановление (чтение) стека из файла.

8. Упорядочивание элементов в стеке по выбранному признаку (использовать содержимое поля данных).

9. Изображение структуры стека на экране.