Студопедия

КАТЕГОРИИ:


Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.