Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
програм.docx
Скачиваний:
2
Добавлен:
16.04.2019
Размер:
78.79 Кб
Скачать

7. Массивы

Массив это линейная структура данных фиксированного размера, реализуемая с использованием последовательного представления дан­ных. Понятие массива как структуры данных не тождественно понятию информационного массива, определяющему совокупность данных, обра­батываемых АИС.

Каждый элемент массива идентифицируется одним или несколькими индексами. Индексэто целое число, значение которого определяет позицию соответствующего элемента в массиве и используется для осу­ществления доступа к этому элементу. Отдельные элементы массива могут изменяться (т.е. записи могут модифицироваться), но общее число элементов массива всегда остается неизменным; следовательно, для массивов нет операций добавления и удаления.

В зависимости от числа индексов, идентифицирующих каждый эле­мент массива, различают одномерные и многомерные массивы.

Одномерный массив называется вектором. Вектор А = {А (1)А (2)... A(I)..A(N) } — это последовательность элементов (записей), размещен­ных в смежных ячейках памяти. Единственный индекс вектора указы­вает позицию каждого элемента в последовательности.

Адрес первого байта, выделенного для первого элемента вектора, называется адресом базы вектора. Вектор в целом определяется адресом базы, размером элементов и их числом или размером элементов и диапа­зоном изменения индекса (рис. 8.1). Если L0адрес первого байта в блоке памяти, выделенном для хранения вектора, с — число байтов, выделенное для хранения каждого элемента, то адрес любого i-го элемен­та будет

1ос(Аi.) =L0 +с(i-1)

Двумерный массив называется матрицей. Каждый элемент матрицы определен двумя индексами. В общем случае массив может иметь любую размерность, т.е. являться многомерным. Многомерный массив может быть представлен эквивалентным одномерным массивом. Например, матрицу можно рассматривать как вектор, элементы которого, в свою очередь, являются векторами. При этом матрица может рассматриваться и храниться в памяти ЭВМ как "строка строк" и как "строка столбцов". Хранение элементов матрицы в такой последовательности называют раз­мещением по строкам

При размещении по строкам адрес матричного элемента А (i, j) опре­деляется выражением

loc(Aij) =L0+ cm(i - 1) + с (j - 1) где m — число столбцов.

В общем случае массив может иметь любую размерность. Для n-мер­ного массива указывается число размерностей, а также верхняя и ниж­няя границы диапазона изменения индексов.

В ряде случаев бывает необходимо в одном массиве хранить данные различных типов. Такой массив называется неоднородным. Например, при хранении личной карточки студента элементами массива являются фамилия, возраст, адрес, средний балл и т.д. Доступ к элементам такого массива может быть осуществлен по индексу, представленному в символьной форме.

Из одномерных неоднородных массивов могут быть организованы многомерные неоднородные массивы, например массив, описывающий всех студентов группы.

8. Стеки

Стекэто линейная структура переменного размера, в отличие от структуры массива позволяющая включать или исключать элементы, т.е. объем данных в стеке может динамически расти и сокращаться во время выполнения программы.

Особенность стековой структуры в том, что доступ к элементам, включение и исключение элементов возможны только с одного конца структуры — с вершины стека. Поэтому первым будет прочитан или выбран тот элемент, который включался в стек последним. Информация в такой структуре обрабатывается по принципу "последним пришел, первым ушел". Структуру стека иногда называют структурой типа LIFO.

Структура стека явля­ется структурой данных с ограниченным доступом, так как доступ разрешается только к элементу, находя­щемуся в вершине стека. Этот элемент называется те­кущим. Информацию о пози­ции текущего элемента стека хранит указатель вершины стека (УВС), размещаемый обычно в головной ячейке стека.

При использовании последовательного представления необходимо знать предельный размер стека. Под этот предполагаемый предельный размер резервируется блок памяти, внутри которого стек растет и сокра­щается. Первая ячейка блока содержит указатель вершины стека. Когда стек пуст, указатель указывает на самого себя. При включении каждого нового элемента указатель вершины увеличивается на единицу.

Доступ к стеку может быть организован так, чтобы значение ука­зателя вершины оставалось неизменным в течение всего времени сущест­вования стека. В этом случае доступ осуществляется всегда к одной и той же ячейке блока памяти, зарезервированного под стек. На эту ячейку

устанавливается указа­тель вершины, в ней хра­нится текущий (верхний) элемент стека. При вклю­чении или исключении элемента все остальные элементы стека переме­щаются вниз или вверх соответственно внутри блока памяти (рис. 8.3). В этом случае операцию включения иногда называют проталкиванием , а операцию исключе­ния "выталкиванием".

Недостаток последовательного представления стека состоит в том, что всегда остается опасность переполнения стека; в противном случае часть зарезервированной памяти остается неиспользованной.

При использовании связанного представления данных нет необходи­мости заранее резервировать память под стек. Все элементы стека раз­бросаны по памяти и связаны между собой указателями. УВС ука­зывает на ячейку с верхним элементом стека. При включении и исклю­чении элементов значение указателя вершины изменяется. Вновь включа­емый элемент размещается в любой свободной ячейке памяти, которая включается в стек путем соответствующего изменения указателей свя­занного списка. Стек при связанном представлении данных может расти неограниченно.

Структура стека удобна в тех случаях, когда требуется быстрое выполнение операций включения и исключения без оценки содержательного смыс­ла данных. Алгоритм, управляющий включением осво­бодившихся ячеек в стек свободной памяти, часто называют "сборщи­ком мусора". Стековые структуры широко применяются в трансляторах при реализации вложенных подпрограмм и многоуровневых прерываний, а также при решении задач, алгоритмы которых лучше всего описываются рекурсивным методом.