Структуры и алгоритмы обработки данных


Применение сильноветвящихся деревьев - часть 2


               up,down: pointer; {Указатели на предка и список потомков}

l              last,next: pointer; {Указатели на соседние узлы}

       end;

var

      n,i,l:integer;

      root, current_root: pointer;

      pnt, current:^node;

       s : searchrec;

      str: string;

procedure create_tree(local_root:pointer);

{Отображение физического оглавления диска в логическую структуру}

var

        local_node, local_r_node, local_last : ^node;

procedure new_node;

{Создание нового узла в дереве каталогов и файлов}

begin

new(local_node);

local_node^.last:=local_last;

if not(local_last=nil) then local_last^.next:=local_node;

local_node^.next:=nil;

local_node^.down:=nil;

local_node^.up:=local_r_node;

if local_r_node^.down =nil then local_r_node^.down:=local_node;

local_node^.name:=local_r_node^.name+'\'+s.name;

if s.attr and Directory = 0 then local_node^.node_type:='f'

else local_node^.node_type:='c';

local_node^.size:=s.size;

local_last:=local_node;

end;

begin {Собственно процедура}

local_r_node:=local_root;

local_last:=nil;

findfirst(local_r_node^.name+'\*.*',anyfile,s);

if doserror = 0 then

       begin

       if (s.name<>'.') and (s.name<>'..') and (s.attr and VolumeID = 0)

       then new_node;

       while doserror=0 do begin

               findnext(s);

               if (doserror = 0) and (s.name<>'.') and (s.name<>'..') and (s.attr and VolumeID = 0)




Начало  Назад  Вперед



Книжный магазин