Advertisement
Guest User

Untitled

a guest
May 27th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.49 KB | None | 0 0
  1. UNIT TreeStorage_New;        
  2. INTERFACE
  3.  
  4. USES
  5.   Types;
  6.  
  7.   PROCEDURE InsertInTree(Lexem: LexemType);
  8.   FUNCTION IsTreeFull(): BOOLEAN;
  9.   FUNCTION GetLexemCount(): INTEGER;
  10.   PROCEDURE PrintTree(VAR F: TEXT);
  11.   PROCEDURE DeleteTree();
  12.  
  13. IMPLEMENTATION
  14. CONST
  15.   DepthOfTree = 854;  {ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ äåðåâà}
  16. TYPE
  17.   NodePtr = ^NodeType;
  18.   NodeType = RECORD
  19.                Key: LexemType;
  20.                Left, Right: NodePtr;
  21.                Count: INTEGER
  22.              END;  
  23.   VAR
  24.   Root: NodePtr;
  25.   LexemCount: INTEGER;
  26.  
  27.   PROCEDURE Insert(VAR Ptr: NodePtr; Str: LexemType);
  28.   BEGIN {Insert}
  29.     IF Ptr = NIL
  30.     THEN
  31.       BEGIN {Ñîçäàåì ëèñò ñî çíà÷åíèåì Str}
  32.         NEW(Ptr);
  33.         Ptr^.Key := Str;
  34.         Ptr^.Left := NIL;
  35.         Ptr^.Right := NIL;
  36.         Ptr^.Count := 1;
  37.         INC(LexemCount)
  38.       END
  39.     ELSE
  40.       IF Ptr^.Key > Str
  41.       THEN
  42.         Insert(Ptr^.Left, Str)
  43.       ELSE
  44.         IF Ptr^.Key < Str
  45.         THEN
  46.           Insert(Ptr^.Right, Str)
  47.         ELSE
  48.           INC(Ptr^.Count)
  49.   END;  {Insert}                          \
  50.  
  51.   FUNCTION GetLexemCount(): INTEGER;
  52.   BEGIN  {GetLexemCount}
  53.     GetLexemCount := LexemCount
  54.   END;  {GetLexemCount}
  55.  
  56.   FUNCTION IsTreeFull(): BOOLEAN;
  57.   BEGIN {IsTreeFull}
  58.     IsTreeFull := (LexemCount = DepthOfTree)
  59.   END;  {IsTreeFull}
  60.  
  61.   PROCEDURE InsertInTree(Lexem: LexemType);
  62.   BEGIN {InsertInTree}    
  63.     Insert(Root, Lexem)  
  64.   END;  {InsertInTree}
  65.  
  66.   PROCEDURE Print(Ptr: NodePtr;  VAR F: TEXT);  
  67.   BEGIN {Print}
  68.     IF Ptr <> NIL
  69.     THEN  {Ïå÷àòàåò ïîääåðåâî ñëåâà, âåðøèíó, ïîääåðåâî ñïðàâà}
  70.       BEGIN
  71.         Print(Ptr^.Left, F);
  72.         WRITELN(Ptr^.Key, ' ', Ptr^.Count);
  73.         Print(Ptr^.Right, F)
  74.       END
  75.   END;  {Print}
  76.  
  77.   PROCEDURE PrintTree(VAR F: TEXT);  
  78.   BEGIN {PrintTree}
  79.     Print(Root, F)
  80.   END;  {PrintTree}
  81.  
  82.   PROCEDURE Delete(Ptr: NodePtr);  {î÷èñòêà ïàìÿòè}
  83.   BEGIN {Delete}
  84.     IF Ptr <> NIL
  85.     THEN  {Óäàëÿåò ïîääåðåâî ñëåâà, âåðøèíó, ïîääåðåâî ñïðàâà}
  86.       BEGIN
  87.         Delete(Ptr^.Left);
  88.         Delete(Ptr^.Right);
  89.         DISPOSE(Ptr)
  90.       END
  91.   END;  {Delete}
  92.  
  93.   PROCEDURE DeleteTree();  {î÷èñòêà ïàìÿòè}
  94.   BEGIN {DeleteTree}  
  95.     Delete(Root)
  96.   END;  {DeleteTree}
  97.  
  98. BEGIN
  99.   Root := NIL;
  100.   LexemCount := 0
  101. END. {UNIT TreeStorage_New}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement