КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Создание и редактирование сильноветвящихся деревьев
Begin En d else Begin Begin Begin Begin Begin Repeat Begin Begin Begin Begin End else Begin Begin Var Type PNode = ^TNode; TNode = record Name: string; Left, Right: Pointer; end;
n: Integer; s: string; pnt, Current: PNode; pnt_s, Current_s, Root: Pointer;
{ Сменить текущий узел } procedure NodeSearch(pnt_s: Pointer; var Current_s: Pointer); var pnt_n: PNode; pnt_n:=pnt_s; if pnt_n^.Name <> s then if pnt_n^.Left <> nil then NodeSearch(pnt_n^.Left,Current_s); if pnt_n^.Right <> nil then NodeSearch(pnt_n^.Right,Current_s); Current_s:=pnt_n; end;
{ Вывод списка всех узлов дерева } procedure NodeList(pnt_s: Pointer); var pnt_n: PNode; pnt_n:=pnt_s; WriteLn(pnt_n^.Name); if pnt_n^.Left <> nil then NodeList (pnt_n^.Left); if pnt_n^.Right <> nil then NodeList(pnt_n^.Right); end;
{ Удаление узла и всех его потомков в дереве } procedure NodeDispose(pnt_s: Pointer); var pnt_n: PNode; if pnt_s <> nil then pnt_n:=pnt_s; WriteLn(pnt_n^.Name); if pnt_n^.Left <> nil then NodeDispose(pnt_n^.Left); if pnt_n^.Right <> nil then NodeDispose(pnt_n^.Right); Dispose(pnt_n); end; end;
New(Current); Root:=Current; Current^.Name:='Root'; Current^.Left:= nil; Current^.Right:= nil; WriteLn('Current node - ',Current^.Name); WriteLn('1 - Set name for left descendant'); WriteLn('2 - Set name for right descendant'); WriteLn('3 - Change current node'); WriteLn('4 - Show node list'); WriteLn('5 - Delete descendantes of current node'); WriteLn('0 - Exit'); Read(n); { Создание левого потомка } if n = 1 then if Current^.Left = nil then New(pnt) else pnt:=Current^.Left; WriteLn('Left name?'); ReadLn; Read(s); pnt^.Name:=s; pnt^.Left:= nil; pnt^.Right:= nil; Current^.Left:=pnt; end; { Создание правого потомка } if n = 2 then if Current^.Right = nil then New(pnt) else pnt:=Current^.Right; WriteLn('Right name?'); ReadLn; Read(s); pnt^.Name:=s; pnt^.Left:= nil; pnt^.Right:= nil; Current^.Right:=pnt; end; { Сменить текущий узел } if n = 3 then WriteLn('New current node?'); ReadLn; Read(s); Current_s:= nil; NodeSearch(Root, Current_s); if Current_s <> nil then Current:=Current_s else WriteLn('Node '''+s+''' not found'); end; { Вывод списка узлов } if n = 4 then NodeList(Root); { Удаление поддерева } if n = 5 then WriteLn('l,r?'); ReadLn; Read(s); if (s = 'l') then { Удаление левого поддерева } pnt_s:=Current^.Left; Current^.Left:= nil; NodeDispose(pnt_s); { Удаление правого поддерева } pnt_s:=Current^.Right; Current^.Right:= nil; NodeDispose(pnt_s); end; end; until n = 0 end. Пример сильноветвящихся деревьев для чтения структуры заданного каталога или диска, навигации и подсчета места, занимаемого каталогом. Операции по просмотру содержимого каталогов и подсчету занимаемого объема производятся не с физическими каталогами и файлами, а с созданным динамическим списковым представлением их логической структуры в виде сильноветвящегося дерева. В примере для каждого файла или каталога хранится его полное имя. Для чтения оглавления диска используются стандартные функции FindFirst() и FindNext(), которые возвращают сведения о первом и последующих элементах в оглавлении текущего каталога. В процессе чтения корневого каталога строится первый уровень потомков в списковой структуре дерева. Процедура построения поддерева вызывается для каждого узла в корневом каталоге. Процесс повторяется для всех непустых каталогов до тех пор, пока не будет построена полная структура оглавления.
program dirtree; {$APPTYPE CONSOLE}
uses SysUtils;
Дата добавления: 2014-01-07; Просмотров: 360; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |