Cтраница 3
Если при этом остаются лишние элементы, то они попросту отбрасываются, если же, наоборот, элементов не хватает, то недостающие начинают браться циклически из начала линейного массива. [31]
![]() |
Структуры данных машьны Тьюринга. [32] |
Очень простой универсальный язык может быть построен на базе классической машины Тьюринга, простой абстрактной вычислительной машины, определенной А. М. Тьюрингом в 1936 г. Машина Тьюринга имеет только одну структуру данных - линейный массив Т переменной длины, называемый лентой. Каждый элемент ленты содержит одну литеру. [33]
Логически множество может рассматриваться так же, как в математике: неупорядоченный набор различающихся элементов. В отличие от этого линейный массив - это упорядоченный набор, возможно, неразличающихся элементов. [34]
Наряду с обработкой данных в базе данных система может работать с внешними локальными массивами с последовательной организацией. Это делает ее удобным инструментом обработки линейных массивов, наличие которых в АСУ наряду с базами данных, довольно значительно. [35]
Довольно легко перейти от линейных массивов переменного размера к многомерным структурам, если допустить, что элемент массива может служить указателем на другой массив. А это обычно допускается, когда для линейных массивов используется связанное представление. [36]
![]() |
Пример распределения памяти при загрузке по фиксированным. [37] |
На рис. 1.3 представлен пример распределения памяти при этой негибкой схеме загрузки. На этом рисунке память изображена в виде линейного массива ячеек, а занимаемые программой области заштрихованы. [38]
Многомерные неоднородные массивы могут быть получены путем непосредственного применения техники однородных массивов, рассмотренной в разд. В других случаях можно допустить, что элемент линейного массива указателей указывает на другой линейный массив указателей, а не на простой элемент данных. Такое представление применяется широко, но в основном для массивов переменного размера, рассматриваемых в следующем разделе. Там, где длина массива фиксирована, первый метод обеспечивает эффективный доступ к элементам с помощью той же самой формулы доступа, что и для однородных массивов. [39]
Физически последовательная структура может быть представлена либо строго последовательно, когда логически следующий элемент является также и физически следующим, либо в виде связанного списка ( см. разд. Простой реализацией строго последовательной структуры является вектор, или линейный массив. Размерности таких массивов ограничиваются только доступными средствами программного обеспечения, используемыми при обработке массивов, а элементы массивов идентифицируются посредством индексов. Эта же операция позволяет установить физическое местоположение ( адрес) следующего элемента. Если при этом оказывается, что полученное значение одного индекса больше максимального значения, то на 1 увеличивается индекс следующей размерности, а индексам всех низших ( предыдущих) размерностей присваиваются их начальные значения. [40]
Какое представление в памяти подходит для линейного массива, элементы которого могут динамически менять свою длину во время выполнения программы. Ясно, что простое последовательное представление, применявшееся для линейных массивов до сих пор, не годится, поскольку каждое новое присваивание может потребовать, чтобы более длинная цепочка битов заняла место более короткой, что привело бы к перестановке других элементов массива. Отметим, что число элементов в массиве постоянно в течение всего времени выполнения программы; может изменяться только длина индивидуальных элементов. В этих условиях удобно следующее представление: представим массив вектором указателей на значе ния и будем хранить цепочки битов, представляющие значения, в каком-то другом месте памяти. Вектор указателей может тогда храниться ноеледовательно, поскольку размер каждого указателя является постоянной величиной и не зависит от типа значения, на которое он указывает. [41]
Снобол 4 имеет простые, но гибкие средства, позволяющие программисту определять и использовать структуры данных новых типов. В общих словах, определение типа данных описывает класс неоднородных линейных массивов фиксированного размера, обращение к элементам которых осуществляется с помощью цепочек литер в качестве индексов. В определении самого типа данных указывается лишь имя типа, длина массивов этого типа и индексы элементов в каждом массиве. [42]
Переход от неоднородных линейных массивов к многомерным очевиден. Как обычно, мы просто допускаем, что каждый элемент линейного массива может быть другим неоднородным линейным массивом. Поскольку каждый из этих подмассивов может иметь разные дескрипторы, а значит и разное число элементов разного типа, результирующая структура будет иметь форму дерева. [43]
Расширение понятия линейного массива на более сложные многомерные структуры приводит нас к матрицам и массивам более высокой размерности, деревьям, записям и списковым структурам в зависимости от характера расширения. Однако во всех этих расширениях используется одна основная идея: элемент линейного массива сам может быть линейным массивом. Мы рассмотрим основные свойства линейных массивов и их многомерных расширений в порядке увеличения сложности, начиная с обычных однородных массивов фиксированного размера, существующих в Фортране, Алголе и многих других языках. [44]
Обратите внимание ка тз, что, когда звездочки служат индексами. Например, А 1, ) В (, J) даст линейный массив, состоящий из произведения соответствующих элементов строки I массива А на столбец J массива В. В строке I массива А и столбце J массива В должно быть одинаковое число элементов. [45]