Разнородные списки

Рис. 40. Разреженная матрица, представленная в виде структуры мультисписка

Описание элемента хранения разреженной матрицы.

Const  
Nrow = 10; { количество строк }
Ncol = 20; { количество столбцов }
Type  
PMatrix: ^ Matrix; { тип – указатель на узел мультисписка }
Matrix = record { описание элемента хранения узла мультисписка}
val: word; { значение элемента }
row, col: word; { номер строки, номер столбца }
frow, fcol: PMatrix; { атрибуты связи в списках по строке и по столбцу }
end;  
Prow=array[1..Nrow] of PMatrix; { тип – массив указателей на первые узлы списков строк }
Pcol=array[1..Ncol] of PMatrix; { тип – массив указателей на первые узлы списков столбцов }
Var  
r: Prow; { массив указателей на первые узлы списков строк }
c: Pcol; { массив указателей на первые узлы списков столбцов }
           

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

Procedure Print_Matrix(var fr: Prow); { fr – массив указателей на списки строк }
Var p: PMatrix; i: byte; { p – вспомогательный указатель для прохода по строке }
begin  
for i:=1 to Nrow do begin { просмотр строк }
p:=fr[i]; { установка вспогательного указателя на первый элемент списка строки }
while (p<> nil) do begin { список строки не пуст? }
writeln ('Matrix[', p^.row, ',', p^.col, ']=', p^.val); { вывод значения}
p:=p^.frow; { переход к следующему элементу в строке }
end;  
end;  
end;  
           

Примечание. Массив указателей на списки строк передается по ссылке, чтобы избежать копирования массива в стеке при передаче параметров процедуры.

По составу элементов списки подразделяются на однородные и разнородные. Все виды списков, рассматриваемые до сих пор, являются однородными, т.к. они состоят из элементов одного и того же типа. Если список включает элементы различных типов, то он называется разнородным. Особенности обработки разнородных списков состоят в том, что в каждый элемент списка вводится дополнительный атрибут, позволяющий определить тип элемента списка и соответствующим образом интерпретировать содержимое его информационных полей (5.2.1).

Примером разнородного списка является список, содержащий информацию о геометрических фигурах, составляющих некоторый проект (рис. 41).



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: