![]() |
|
|
|
|
#1
|
|||
|
|||
|
Из матрицы инциденций создать список инциденций в виде массива односвязных линейных списков.
Саму суть преобразования понимаю,но с массивами списков никогда не работал. Может кто-нибудь помочь или хотя бы дать посмотреть какую-нибудь программу с массивом списков? |
|
#2
|
|||
|
|||
|
Сам св. список реализуется с помощью след. структуры:
Код:
type
PNode = ^TNode;
TNode = record
Data : Integer; // Например, храним целое число. Или любой другой тип
Next : PNode;
end;Соответственно, массив определяется так: Код:
var A : Array Of PNode; |
|
#3
|
|||
|
|||
|
Как объявлять массив я понимаю. Не знаю как дальше работать с ним. Списки в массиве будут разной длины.
Входные данные 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 1 1 Выходные PNode1 - 2 - 5 PNode2 - 1 - 3 - 5 PNode3 - 2 - 3 PNode4 - 5 PNode5 - 1 - 2 - 3 - 4 (это списки, которые будут создаваться по матрице и их каким-то образом нужно поместить в массив) |
|
#4
|
|||
|
|||
|
Ну так у тебя в массиве уже есть заготовки для соотв. списков. Просто добавляй туда элементы.
Код:
procedure AddItemToList(var AList : PNode; AItem : Integer);
var
NewNode : PNode;
Head : PNode;
begin
New(NewNode);
NewNode.Data := AItem;
NewNode.Next := Nil;
If AList = Nil Then AList := NewNode
Else
Begin
Head := AList;
While Head.Next <> Nil Do Head := Head.Next;
Head.Next := NewNode;
End;
end;
...
var
I : Integer;
A :Array [1..5] Of PNode;
begin
// На всякий случай обнуляем массив
For I := Low(A) To High(A) Do A[i] := Nil;
AddItemToList(A[1],2);
AddItemToList(A[1],5);
AddItemToList(A[2],1);
AddItemToList(A[2],3);
AddItemToList(A[2],5);
AddItemToList(A[3],2);
AddItemToList(A[3],3);
AddItemToList(A[4],5);
AddItemToList(A[5],1);
AddItemToList(A[5],2);
AddItemToList(A[5],3);
AddItemToList(A[5],4);
...Последний раз редактировалось lmikle, 13.02.2016 в 05:44. |