Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.02.2016, 00:22
Graf16 Graf16 вне форума
Прохожий
 
Регистрация: 17.01.2016
Сообщения: 16
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Массив списков

Из матрицы инциденций создать список инциденций в виде массива односвязных линейных списков.

Саму суть преобразования понимаю,но с массивами списков никогда не работал. Может кто-нибудь помочь или хотя бы дать посмотреть какую-нибудь программу с массивом списков?
Ответить с цитированием
  #2  
Старый 12.02.2016, 05:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Сам св. список реализуется с помощью след. структуры:
Код:
type
  PNode = ^TNode;
  TNode = record
    Data : Integer; // Например, храним целое число. Или любой другой тип
    Next : PNode;
  end;

Соответственно, массив определяется так:
Код:
var
  A : Array Of PNode;
Ответить с цитированием
  #3  
Старый 12.02.2016, 14:41
Graf16 Graf16 вне форума
Прохожий
 
Регистрация: 17.01.2016
Сообщения: 16
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Как объявлять массив я понимаю. Не знаю как дальше работать с ним. Списки в массиве будут разной длины.
Входные данные
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  
Старый 13.02.2016, 05:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так у тебя в массиве уже есть заготовки для соотв. списков. Просто добавляй туда элементы.
Код:
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025