Нелинейные связанные структуры
Двусвязный список может быть нелинейной структурой данных, если вторые указатели задают произвольный порядок следования элементов (рис.3.13).
LST1 - указатель на начало 1 - ого списка (ориентированного указателем P1). Он линейный и состоит из 5-и элементов.
2-ой список образован из этих же самых элементов, но в произвольной последовательности. Началом 2-ого списка является 3-ий элемент, а концом 2-ой элемент.
В общем случае элемент списочной структуры может содержать сколь угодно много указателей, то есть может указывать на любое количество элементов.
Можно выделить 3 признака отличия нелинейной структуры:
1) Любой элемент структуры может ссылаться на любое число других элементов структуры, то есть может иметь любое число полей-указателей.
2) На данный элемент структуры может ссылаться любое число других элементов этой структуры.
3) Ссылки могут иметь вес, то есть подразумевается иерархия ссылок.
Представим, что имеется дискретная система, в графе состояния которой узлы - это состояния, а ребра - переходы из состояния в состояние (рис. 3.14).
Входной сигнал в систему это X. Реакцией на входной сигнал является выработка выходного сигнала Y и переход в соответствующее состояние.
Граф состояния дискретной системы можно представит в виде двусвязного нелинейного списка. При этом в информационных полях должна записываться информация о состояниях системы и ребрах. Указатели элементов должны формировать логические ребра системы (рис. 3.15).
Для реализации вышесказанного:
1) должен быть создан список, отображающий состояния системы (1, 2, 3);
2) должны быть созданы списки, отображающие переходы по ребрам из соответствующих состояний .
В общем случае при реализации многосвязной структуры получается сеть.
Контрольные вопросы
1. Какие динамические структуры Вам известны?
2. В чем отличительная особенность динамических объектов?
3. Какой тип представлен для работы с динамическими объектами?
4. Как связаны элементы в динамической структуре ?
5. Назовите основные особенности односвязного списка..
6. В чем отличие линейных списков от кольцевых ?
7. Зачем были введены двусвязные списки ?
8. В чем разница в операциях, производимых над односвязными и двусвязными списками ?
9. Какой список является более удобным в обращении, односвязный или двусвязный ?
10. Что такое указатель?
11. Какие стековые операции можно производить над списками ?
12. Какие операции, производимые над очередью, можно производить над списками ?
13. Почему можно производить все эти операции над списками ?
14. Для чего предназначены операции Getnode и Freenode?
15. Какие методы утилизации вы знаете ?
16. Перечислите элементы заголовков в списках.
17. Зависит ли время, затраченное на вставку элемента в односвязный список, от количества элементов в списке ?
18. Где процесс вставки и удаления эффективнее, в списке или в массиве ?
19. Как можно производить просмотр односвязного списка?
20. Что означает AVAIL?
21. Какой недостаток односвязных списков по сравнению с
22. массивом?
23. Какие структуры являются нелинейными ?
24. Каковы признаки отличия нелинейных структур?
25. Как можно создать нелинейную связную структуру?
26. Что такое граф состояния ?