LEC-26 (Материалы к лекциям), страница 2
Описание файла
Файл "LEC-26" внутри архива находится в следующих папках: Материалы к лекциям, Lecturessemestr7. Документ из архива "Материалы к лекциям", который расположен в категории "". Всё это находится в предмете "методы решения задач механики сплошных сред" из 7 семестр, которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "методы решения задач механики сплошных сред" в общих файлах.
Онлайн просмотр документа "LEC-26"
Текст 2 страницы из документа "LEC-26"
Двунаправленный связный список, линейный или кольцевой, получится, если ввести еще массив, содержащий для каждой ячейки адрес предыдущей ячейки. Двунаправленный список можно просматривать в обоих направлениях; он имеет то достоинство, что можно вставить или удалить элемент, не зная позиции предыдущего элемента. Линейный двунаправленный список требует двух указателей входа: один указывает начало списка, другой — его конец. Для кольцевого двунаправленного списка достаточно одного указателя входа. Свободные позиции двунаправленного списка можно связать между собой, хотя для этой цели редко бывает нужен новый двунаправленный список.
Стек — это список с упрощенным способом хранения и обработки. В стеке элементы хранятся в последовательных позициях, чем устраняется необходимость в связках. Для указания позиции последнего элемента (так называемого верха стека) используется специальный указатель. Стеки применяют в ситуациях, когда элементы нужно добавлять или удалять только через верх стека. Чтобы включить или опустить новый элемент в стек, увеличивают значение указателя на единицу, проверяют, достаточно ли памяти, а затем записывают элемент в позицию, сообщаемую указателем. Чтобы исключить или поднять последний элемент из верха стека, попросту уменьшают на единицу значение указателя. Пустой стек опознается по нулевому значению указателя. Стеки используются в некоторых алгоритмах для разреженных матриц.
Очередь — это список элементов, хранимых в последовательных позициях, причем включение элементов производится через начало очереди, а исключение — через ее конец. Для указания позиций начала и конца очереди используются два указателя. Пустая очередь опознается благодаря тому, что для нее значение указателя конца на единицу больше значения указателя начала. Для очереди с единственным элементом значения обоих указателей совпадают. Если участок памяти, отведенный для хранения очереди, исчерпан, то новые элементы можно записывать в начало этого участка, закольцевав тем самым очередь; при этом начало очереди не должно пересекаться с ее концом. Все описанные схемы хранения опираются на массив как единственную структуру данных, поддерживаемую Фортраном. Элегантные свойства связных списков можно эффективно реализовать, используя и такую структуру данных, как запись, допускаемую, например, языками Паскаль и Алгол да. В этом случае не требуется косвенной адресации и память может распределяться динамически ценой некоторых системных затрат памяти.
11.2.1 Схемы хранения для матриц общего вида
Пусть дана матрица А5 общего вида с ненулевыми элементами.
a21 , a41 , a52 , a13 , a33 , а24, a45
0 | 0 | a13 | 0 | 0 n=5 размерность матрицы =7 - число ненулевых элементов |
a21 | 0 | 0 | a24 | 0 |
0 | 0 | a33 | 0 | 0 |
a41 | 0 | 0 | 0 | a45 |
0 | a52 | 0 | 0 | 0 |
В последующих трех схемах матрицы хранятся по столбцам.
Схема 1 Каждому ненулевому элементу матрицы соответствует запись, занимающая две ячейки памяти. Первая ячейка содержит номер строки, вторая - значение элемента. Нуль в первой ячейке означает конец данного столбца. Нули в обеих ячейках указываются на конец массива, хранящего матрицу. Таким образом, общее число записей равно n+ +1, из них n - для столбцов, - для ненулевых элементов матрицы А и одна запись - для указания конца матрицы. Так как каждая запись использует две ячейки памяти, то для хранения матрицы А потребуется 2(n++1), ячеек. Матрица А5, для которой =7 и n=5 будет храниться в виде массива.
0, 1, 2, a21 , 4, a41 , 0, 2, 5, a52, 0, 3, 1, a13 , 3, a33 ,0, 4, 2, a24, 0, 5, 4, a45, 0, 0
Схема 2. Информация о данной матрице хранится в трех массивах:
VE- значений ненулевых элементов,
RI - индексов строк
и CIP -указателей индексов столбцов.
Элемент RI() (- элемент массива RI) - cодержит индекс строки -го элемента VE - VE( ). Если первый ненулевой элемент - го столбца данной матрицы размещается в VE (t), то t хранится в -м элементе CIP, т.е.
CIP( )= t. Очевидно, VE и RI состоят из элементов, а CIP из n элементов. Следовательно, эта схема требует общее число в 2+n ячеек.
Матрица А5 будет храниться следующим образом:
VE=( a21 , a41 , a52, a13 , a33, a24, a45 )
RI=(2, 4, 5, 1, 3, 2, 4)
CIP=(1, 3, 4, 6,7) (Указатель индекса столбцов)
Вышеизложенной схемой легко пользоваться. Например, a33 может быть найдено следующим образом. Так как CIP(3)=4, RI(4)) даст индекс строки первого ненулевого элемента третьего столбца.
Если a330, RI(4) или один из следующих за ним элементов RI, предшествующих первому ненулевому элементу четвертого столбца, должен быть равен 3. В нашем случае RI(5) =3, так как VE(5) cодержит a33.
Схема 3. Каждому ненулевому элементу данной матрицы однозначно ставится в соответствие целое число (i,j) вида:
(i,j)=i+(j-1)n aij0
Хранение ненулевых элементов обеспечивается двумя массивами:
VE- значений ненулевых элементов и LD , в каждом из которых содержится элементов. (Память, понятно, потребуется 2 ячеек)
В LD() находится (i,j), соответствующее aij из VE(), где =1, 2, ..., .
Матрица А5 хранится в виде:
VE=( a21 , a41, a52 , a13, a33, a24, a45)
LD=(2, 4, 10, 11, 13, 17, 24)
Исходная матрица может быть восстановлена по этой схеме хранения следующим образом. В соответствии с данным выше определением (i,j) является очевидным, что j есть наименьшее целое число, большее ли равное и i= (i,j)-(j-1)n.
Например, если (i,j)=LD.(5)=13, тогда и наименьшее целое число, большее или равное будет 3.
Следовательно: j=3 и i=2(i,j)-(j-1)n=13-10=3.