home *** CD-ROM | disk | FTP | other *** search
- MODULE MTPtr;
-
- (*---------------------------------------------*)
- (* Program to measure the speed of: *)
- (* *)
- (* 1) Allocating dynamic binary-tree structure *)
- (* *)
- (* 2) Searching through the binary-tree *)
- (*---------------------------------------------*)
-
- FROM InOut IMPORT WriteString, WriteLn, Read, Write;
- FROM SYSTEM IMPORT TSIZE;
- FROM Storage IMPORT ALLOCATE;
- FROM MathLib0 IMPORT sin, entier;
-
- CONST SIZE = 1000;
- MainLoopCount = 30;
-
- TYPE Ptr = POINTER TO Node;
-
- Node = RECORD
- Value : INTEGER;
- Left, Right : Ptr;
- END;
-
- VAR Numbers : ARRAY [1..SIZE] OF INTEGER;
- Iter, I : CARDINAL;
- TreeRoot : Ptr;
- Pi : REAL;
- dummy : CHAR;
-
- PROCEDURE Create;
- (* Create array using sin() *)
- VAR J : CARDINAL;
- Angle, FloatSize, Increment : REAL;
-
- BEGIN
- Angle := 0.0;
- J := 1;
- Increment := Pi / 360.0;
- FloatSize := FLOAT(SIZE);
- WHILE J <= SIZE DO
- Numbers[J] := entier(sin(Angle) * FloatSize);
- Angle := Angle + Increment;
- INC(J);
- END;
- END Create;
-
- PROCEDURE Insert(VAR Root : Ptr; Item : INTEGER);
- (* Insert element in binary-tree *)
- BEGIN
- IF Root = NIL THEN
- ALLOCATE(Root,TSIZE(Node));
- Root^.Value := Item;
- Root^.Left := NIL;
- Root^.Right := NIL
- ELSE
- WITH Root^ DO
- IF Item < Value THEN Insert(Left,Item)
- ELSE Insert(Right,Item)
- END;
- END;
- END;
- END Insert;
-
-
- PROCEDURE Search(VAR Root : Ptr; Target : INTEGER);
- (* Recursive procedure to search for Target value *)
- BEGIN
- IF Root <> NIL THEN
- IF Target <> Root^.Value THEN
- IF Target < Root^.Value THEN
- Root := Root^.Left; Search(Root,Target)
- ELSE
- Root := Root^.Right; Search(Root,Target)
- END
- END;
- END;
- END Search;
-
- BEGIN (* MAIN *)
- Pi := 355. / 113.;
- Create;
- WriteString('Created array'); WriteLn;
- (* Building the binary tree *)
- WriteString('Press <CR> to time tree creation '); WriteLn;
- Read(dummy);
- NEW(TreeRoot);
- TreeRoot := NIL;
- FOR I := 1 TO SIZE DO
- Insert(TreeRoot,Numbers[I]);
- END; (* FOR I *)
- WriteLn;
- WriteString('Created Tree'); WriteLn;
- WriteString('Press <CR> to time tree search'); WriteLn;
- Read(dummy); WriteLn;
- FOR Iter := 1 TO MainLoopCount DO
- FOR I := SIZE TO 1 BY -1 DO
- Search(TreeRoot,Numbers[I]);
- END; (* FOR I *)
- END; (* FOR Iter *)
- WriteLn;
- WriteString('DONE'); WriteLn;
- END MTPtr.