Библиотека программи�та
Пользователь

Добро пожаловать,

Реги�траци� или входРеги�траци� или вход
Потер�ли пароль?Потер�ли пароль?

�ик:
Пароль:

Меню �айта




Ваше мнение
Легко ли найти нужную информацию на �айте?

Очень про�то
�ахожу почти �разу
Приходит�� тщательно покопать��
Почти невозможно
�е нашел (лень разбирать��)


Результаты
Другие опро�ы

В�его голо�ов: 594
Комментарии: 0


�аши партнеры



Стати�тика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Книги-online



Ëàáîðàòîðíàÿ ðàáîòà ¹8

Ëàáîðàòîðíàÿ ðàáîòà ¹8


Äâîè÷íûå äåðåâüÿ

Öåëü ðàáîòû:
Èçó÷èòü ñïîñîáû ýôôåêòèâíîãî õðàíåíèÿ è îáðàáîòêè èíôîðìàöèè íà ïðèìåðå áèíàðíûõ äåðåâüåâ.

Îáùèå ñâåäåíèÿ

Áèíàðíîå äåðåâî - ýòî èåðàðõè÷åñêàÿ äèíàìè÷åñêàÿ ñòðóêòóðà äàííûõ, ñîñòîÿùàÿ èç óçëîâ è ñîåäèíÿþùèõ èõ äóã.  êàæäûé óçåë, êðîìå îäíîãî, âåäåò ðîâíî îäíà äóãà. Ýòîò åäèíñòâåííûé óçåë íàçûâàåòñÿ êîðíåì äåðåâà.
Ñ êàæäîé âåðøèíîé äåðåâà ñâÿçûâàåòñÿ êîíå÷íîå ÷èñëî îòäåëüíûõ äåðåâüåâ, íàçûâàåìûõ ïîääåðåâüÿìè. Íà ðèñóíêå èçîáðàæåíî äåðåâî, â óçëàõ êîòîðîãî ðàñïîëàãàþòñÿ ñèìâîëû:
Âåðøèíà Y, íàõîäÿùàÿñÿ íåïîñðåäñòâåííî íèæå âåðøèíû X, íàçûâàåòñÿ íåïîñðåäñòâåííûì ïîòîìêîì X, à âåðøèíà X íàçûâàåòñÿ ïðåäêîì Y. Åñëè âåðøèíà íå èìååò ïîòîìêîâ, òî îíà íàçûâàåòñÿ ëèñòîì, åñëè èìååò, òî íàçûâàåòñÿ âíóòðåííåé âåðøèíîé. Íàïðèìåð, âåðøèíû D, E ÿâëÿþòñÿ íåïîñðåäñòâåííûìè ïîòîìêàìè âåðøèíû B; âåðøèíû H, I, J ÿâëÿþòñÿ ëèñòüÿìè. Î÷åâèäíî, ÷òî äëÿ îïèñàíèÿ äåðåâà òðåáóþòñÿ ññûëêè. Îïèøåì áèíàðíîå äåðåâî êàê ñòðóêòóðó òèïà Record, ñîäåðæàùóþ êàê ìèíèìóì äâà ïîëÿ – óêàçàòåëè íà ëåâîå è ïðàâîå ïîääåðåâüÿ, è ïîëå äàííûõ, íàïðèìåð òèïà Integer:
Type
  PTree = ^TTree;
  TTree = Record
     Data : Integer;
     Left, Right : PTree;
  end;
Êîðåíü äåðåâà îïèñûâàåòñÿ ññûëî÷íîé ïåðåìåííîé:
Var
  Tree : PTree;
Îñíîâíûå îïåðàöèè íàä äåðåâîì
Ê îñíîâíûì îïåðàöèÿì íàä äåðåâüÿìè îòíîñÿòñÿ:
• çàíåñåíèå ýëåìåíòà â äåðåâî;
• îáõîä äåðåâà;
• óäàëåíèå ýëåìåíòà èç äåðåâà.

Ïðèìåðû

Âñòàâêà ýëåìåíòà â äåðåâî.
Ñîçäàòü è âûâåñòè íà ýêðàí äåðåâî, ýëåìåíòû êîòîðîãî ââîäÿòñÿ ñ êëàâèàòóðû è èìåþò öåëûé òèï. Ïðè÷åì äëÿ êàæäîé âåðøèíû äåðåâà âî âñåõ ëåâûõ âåðøèíàõ äîëæíû íàõîäèòüñÿ ÷èñëà ìåíüøèå, à â ïðàâîé áîëüøèå, ÷åì ÷èñëà, õðàíÿùèåñÿ â ýòîé âåðøèíå. Òàêîå äåðåâî íàçûâàåòñÿ äåðåâîì ïîèñêà.
Îïèøåì ïðîöåäóðó âñòàâêè â äåðåâî íîâîé âåðøèíû. Ïðè âñòàâêå â äåðåâî âåðøèíà âñòàâëÿåòñÿ ëèáî êàê ïîääåðåâî óæå ñóùåñòâóþùåé âåðøèíû èëè êàê åäèíñòâåííàÿ âåðøèíà äåðåâà. Ïîýòîìó è ëåâàÿ, è ïðàâàÿ ñâÿçè íîâîé âåðøèíû äîëæíû áûòü ðàâíû nil. Êîãäà äåðåâî ïóñòî, çíà÷åíèå ïåðåäàâàåìîé â âèäå ïàðàìåòðà ññûëêè ðàâíî nil.  ýòîì ñëó÷àå íóæíî èçìåíèòü åå òàê, ÷òîáû îíà óêàçûâàëà íà íîâóþ âåðøèíó, êîòîðàÿ áûëà âñòàâëåíà êàê êîðíåâàÿ. Ïðè âñòàâêå âòîðîãî ýëåìåíòà ïåðåäàííûé èç îñíîâíîé ïðîãðàììû ïàðàìåòð ANode óæå íå áóäåò ðàâåí nil, è íàäî ïðèíèìàòü ðåøåíèå î òîì, â êàêîå ïîääåðåâî íåîáõîäèìî âñòàâèòü íîâóþ âåðøèíó.
Procedure InsTree(var ANode : PTree; n : lnteger);
Begin
  if ANode = nil then
     Begin
       new(ANode);
       With ANode^ do
          Begin
            Left := nil;
            Right := nil;
            Data := n;
          end;
     end
  else if n< ANode^.Data then InsTree(ANode^.Left, n) else InsTree(ANode^.Right, n);
End;
Âûâîä ýëåìåíòîâ äåðåâà.
Îïèøåì ïðîöåäóðó âûâîäà çíà÷åíèé ýëåìåíòîâ äâîè÷íîãî äåðåâà íà ýêðàí. Äëÿ ýòîãî íåîáõîäèìî âûïîëíèòü ïîëíûé îáõîä äåðåâà. Ïðè îáõîäå äåðåâà åãî îòäåëüíûå âåðøèíû ïîñåùàþòñÿ â îïðåäåëåííîì ïîðÿäêå. Âûâîä äâîè÷íîãî äåðåâà ìîæíî ïðîèçâîäèòü ðåêóðñèâíî, âûïîëíÿÿ äëÿ êàæäîé âåðøèíû òðè äåéñòâèÿ:
• âûâîä ÷èñëà, õðàíÿùåãîñÿ â óçëå;
• îáõîä ëåâîãî ïîääåðåâà;
• îáõîä ïðàâîãî ïîääåðåâà.
Ïîðÿäîê âûïîëíåíèÿ ýòèõ äåéñòâèé îïðåäåëÿåò ñïîñîá îáõîäà äåðåâà. Ñïîñîáû îáõîäà:
• ïðÿìîé îáõîä (ñâåðõó âíèç);
• ñèììåòðè÷íûé îáõîä (ñëåâà íàïðàâî);
• îáðàòíûé îáõîä (ñíèçó ââåðõ).
Ïðîöåäóðà ñèììåòðè÷íîãî âûâîäà äåðåâà èìååò ñëåäóþùèé âèä:
Procedure PrintTree(ANode : PTree);
Begin
  if ANode <> nil then
     Begin
       PrintTree(ANode^.Left);
       WriteLn(ANode^.Data);
       PrintTree(ANode^.Right)
     End;
End;
Îñíîâíàÿ ïðîãðàììà îñóùåñòâëÿåò ââîä ÷èñåë ñ êëàâèàòóðû. Èñïîëüçóþòñÿ: ïåðåìåííàÿ Tree òèïà PTree – çíà÷åíèå óêàçàòåëÿ íà êîðåíü äåðåâà; ïåðåìåííàÿ Digit òèïà Integer äëÿ õðàíåíèÿ î÷åðåäíîãî ââåäåííîãî ÷èñëà.
Var Tree : PTree; Digit : Integer; BEGIN {îñíîâíàÿ ïðîãðàììà} Writeln(‘Îêîí÷àíèå ââîäà – 0’); Tree := nil; Read(Digit); While Digit<>0 Do Begin InsTree(Tree,Digit); Write(‘Ââåäèòå î÷åðåäíîå ÷èñëî: ‘); ReadLn(Digit); End; PrintTree(Tree); END.
Óäàëåíèå èç äåðåâà.
Íåïîñðåäñòâåííîå óäàëåíèå ýëåìåíòà èç óïîðÿäî÷åííîãî äåðåâà ðåàëèçóåòñÿ äîñòàòî÷íî ïðîñòî, åñëè ýòà âåðøèíà ÿâëÿåòñÿ êîíå÷íîé:
èëè èç íåå âûõîäèò òîëüêî îäíî ðåáðî:
Äëÿ ýòîãî íóæíî èçìåíèòü ñîîòâåòñòâóþùóþ ññûëêó ó ïðåäøåñòâóþùåé âåðøèíû. Åñëè æå èç óäàëÿåìîé âåðøèíû âûõîäèò äâå âåòâè, òî íóæíî íàéòè ïîäõîäÿùóþ âåðøèíó äåðåâà, êîòîðóþ ìîæíî áûëî áû âñòàâèòü íà ìåñòî óäàëÿåìîé âåðøèíû.  ýòîì ñëó÷àå óäàëÿåìûé ýëåìåíò íóæíî çàìåíèòü ëèáî íà ñàìûé ïðàâûé ýëåìåíò åãî ëåâîãî ïîääåðåâà, ëèáî íà ñàìûé ëåâûé ýëåìåíò åãî ïðàâîãî ïîääåðåâà. Òàêèå ýëåìåíòû íå ìîãóò èìåòü áîëåå îäíîãî ïîòîìêà.
Ïóñòü çàäàíà ñëåäóþùàÿ ñòðóêòóðà:
Type
  PTree = ^TTree;
  TTree = Record
     Data : Integer;
     Left, Right : PTree;
  end;
Var
  Tree : PTree;
Íåîáõîäèìî óäàëèòü èç äåðåâà Tree óçåë ñî çíà÷åíèåì ïîëÿ Data=x.
 ïðîöåäóðå DeleteNode ðàçëè÷àþòñÿ òðè ñëó÷àÿ:
1. Óçëà ñî çíà÷åíèå, ðàâíûì õ, íåò.
2. Óçåë ñî çíà÷åíèåì õ èìååò íå áîëåå îäíîãî ïîòîìêà.
3. Óçåë ñî çíà÷åíèåì õ èìååò äâóõ ïîòîìêîâ. Procedure DeleteNode(x : Integer; var ANode : PTree); Var q : PTree; Procedure Del(var R : PTree); Begin if R^.Right <> nil then Del(R.^Right) else begin q^.Data := R^.Data; q := R; R := R^.Left; Dispose(q); end; End; { Del } Âegin { DeleteTree } if ANode = nil then Writeln(‘Ýëåìåíòà ñ êëþ÷îì ’,x,’ â äåðåâå íåò’) else if x < ANode^.Data then DeleteNode(x,ANode^.Left) else if x > ANode^.Data then DeleteNode(x,ANode^.Right) else begin q := ANode; if q^.Right = nil then Begin ANode := q^.Left; Dispose(q); end else if q^.Left = nil then begin ANode := q^.Right; Dispose(q); end else Del(q^.Left); end; End;
Âñïîìîãàòåëüíàÿ ïðîöåäóðà Del âûçûâàåòñÿ òîëüêî â òðåòüåì ñëó÷àå. Îíà «ñïóñêàåòñÿ» âäîëü ñàìîé ïðàâîé âåòâè ëåâîãî ïîääåðåâà óäàëÿåìîãî óçëà q^ è çàòåì çàìåíÿåò äàííûå (ïîëå Data) â q^ ñîîòâåòñòâóþùèìè çíà÷åíèÿìè ñàìîãî ïðàâîãî óçëà R^ ýòîãî ëåâîãî ïîääåðåâà, ïîñëå ÷åãî îò R^ ìîæíî îñâîáîäèòüñÿ. Íà ðèñóíêå çàäàíî íà÷àëüíîå äåðåâî (à), èç êîòîðîãî ïîñëåäîâàòåëüíî óäàëÿþòñÿ óçëû ñî çíà÷åíèÿìè 13, 15, 5, 10. Ïîëó÷åííûå äåðåâüÿ ïîêàçàíû íà ðèñ. b – e.

Êîíòðîëüíûå âîïðîñû

1. ×òî òàêîå ðåêóðñèâíûé àëãîðèòì?
2. Èç êàêèõ ÷àñòåé ñòðîèòñÿ îïðåäåëåíèå ðåêóðñèâíîãî àëãîðèòìà?
3. ×òî ÿâëÿåòñÿ îáÿçàòåëüíûì â ëþáîì ðåêóðñèâíîì àëãîðèòìå?
4. Ìîæíî ëè ðåêóðñèþ çàìåíèòü èòåðàöèåé? Ìîæíî ëè èòåðàöèþ çàìåíèòü ðåêóðñèåé?
5. Êàêîâ ïðèíöèï ïîñòðîåíèÿ äèíàìè÷åñêîé ñòðóêòóðû «äåðåâî»?
6. Ïåðå÷èñëèòå ñõîäñòâà è îòëè÷èÿ äèíàìè÷åñêèõ ñòðóêòóð òèïà «ëèíåéíûé ñïèñîê», «ñòåê», «äåðåâî».
7. Ïåðå÷èñëèòå ñòðóêòóðû, êîòîðûå ìîæíî ïðåäñòàâèòü â âèäå äåðåâà, êîòîðûå âñòðå÷àþòñÿ â ïîâñåäíåâíîé æèçíè.
8. Çàêîí÷èòå ôðàçó: «Ñïèñîê – ýòî äåðåâî, â êîòîðîì …».

Çàäà÷è

Âî âñåõ çàäà÷àõ ïîäðàçóìåâàþòñÿ äåðåâüÿ äâîè÷íîãî ïîèñêà.
1. Íàïèñàòü ðåêóðñèâíóþ ÷èñëîâóþ ôóíêöèþ, ïîäñ÷èòûâàþùóþ ñóììó ýëåìåíòîâ äåðåâà.
2. Íàïèñàòü ôóíêöèþ, êîòîðàÿ íàõîäèò íàèáîëüøèé ýëåìåíò äåðåâà.
3. Íàïèñàòü ôóíêöèþ, êîòîðàÿ íàõîäèò íàèìåíüøèé ýëåìåíò äåðåâà.
4. Íàïèøèòå ïðîöåäóðó, êîòîðàÿ óäàëÿåò èç äåðåâà âñå ÷åòíûå ýëåìåíòû.
5. Íàïèñàòü ðåêóðñèâíóþ ïðîöåäóðó, êîòîðàÿ îïðåäåëÿåò ÷èñëî âõîæäåíèé çàäàííîãî ýëåìåíòà â äåðåâî.
6. Íàïèñàòü ðåêóðñèâíóþ ïðîöåäóðó, êîòîðàÿ ïå÷àòàåò ýëåìåíòû èç âñåõ ëèñòüåâ äåðåâà.
7. Íàïèñàòü ïðîöåäóðó, êîòîðàÿ âûâîäèò íà ýêðàí äåðåâî, ïîêàçûâàÿ ãëóáèíó óçëîâ îòñòóïîì îò ëåâîãî êðàÿ ýêðàíà. Íàïðèìåð, äåðåâî áóäåò âûâåäåíî òàê:
1 ãðóïïà
1 êóðñ
2 ãðóïïà
ÔÌÈ
3 ãðóïïà
2 êóðñ
4 ãðóïïà
8. Íàïèñàòü ðåêóðñèâíóþ ôóíêöèþ, êîòîðàÿ îïðåäåëÿåò ãëóáèíó çàäàííîãî ýëåìåíòà íà äåðåâå è âîçâðàùàåò –1, åñëè òàêîãî ýëåìåíòà íåò.
9. Íàïèñàòü ïðîöåäóðó, êîòîðàÿ ïå÷àòàåò (ïî îäíîìó ðàçó) âñå âåðøèíû äåðåâà.
10. Íàïèñàòü ïðîöåäóðó, êîòîðàÿ ïî çàäàííîìó n ñ÷èòàåò ÷èñëî âñåõ âåðøèí ãëóáèíû n â çàäàííîì äåðåâå.
11. Íàïèñàòü ïðîöåäóðó, êîòîðàÿ ñ÷èòàåò ãëóáèíó äåðåâà.
12. Îòñîðòèðîâàòü ìàññèâ À ïóòåì âêëþ÷åíèÿ åãî ýëåìåíòîâ â äåðåâî è ñêîïèðîâàòü îòñîðòèðîâàííûå äàííûå îáðàòíî â À.
13. Çàäàíà ïîñëåäîâàòåëüíîñòü ñëîâ. Îïðåäåëèòü ÷àñòîòó âõîæäåíèÿ êàæäîãî èç ñëîâ â ïîñëåäîâàòåëüíîñòü.
Óêàçàíèå. Äëÿ ðåøåíèÿ çàäà÷è ëþáîå ñëîâî èùåòñÿ â äåðåâå, êîòîðîå íà íà÷àëüíîì ýòàïå ïóñòî. Åñëè ñëîâî íàéäåíî, òî ñ÷åò÷èê åãî âõîæäåíèé óâåëè÷èâàåòñÿ íà åäèíèöó, åñëè íåò, òî ñëîâî âêëþ÷àåòñÿ â äåðåâî ñ åäèíè÷íûì çíà÷åíèåì ñ÷åò÷èêà.
Íàçàä
Íà ãëàâíóþ
    Ó÷åáíèê ïî ÿçûêó Pascal          Ëàáîðàòîðíûå ðàáîòû ïî ïðîãðàììèðîâàíèþ          Ñïðàâî÷íèê


Внимание! Е�ли у ва� не получило�ь найти нужную информацию, и�пользуйте рубрикатор или во�пользуйте�ь пои�ком


.


книги по программированию и�ходники компоненты шаблоны �айтов C++ PHP Delphi �качать