:
: TURBO PASCAL 7.1
: ,
: 2 .
:
1. .. Turbo Pascal. . 2- . .: , 2007. . 138-149.
2. .. . . . .: , 2008. . 130-152.
:
1. .
2. .
3. .
.
(, )
3 . , . , , . . , , . . :
Type
Text = < >;
AdrT = ^Text;
AdrZv = ^Zveno;
Zveno = record
K1: < >;
Lev, Prav: AdrZv;
Ard: ArdT;
End;
Var
DvDer: AdrZv;
1. .
2. , , .
3. , , .
4. , , , .
5. .
, . . , , , nil.
.
(* , *)
var
Zap: Text;
S: AdrZv;
T: AdrT;
Q, Root: AdrZv;
K: Integer;
Begin
New(T);
T^:= Zap;
New(S);
S^.K1:= K;
S^.AdrT:= T;
S.Lev:= nil;
L^.Prav:= nil;
If Root = nil then Root:= S
Else if K < Q^.K1 then Q^.Lev:= S else Q^.Prav:= S
, , -. , , . :
|
|
1. ( ). , , <> nil.
2. ( ). , , <> nil.
:
1. .
2. .
3. .
.
(* 1. : D , K - *)
procedure UDDer(Var D: AdrZv; K: Integer);
var Q: AdrZv;
procedure UD(Var R: AdrZv); { ; R }
begin
if R^.Prav = nil then { }
begin
Q^.K1:= R^.K1; {R ; Q }
Q^.Adr:= R^.Adr; { }
Q:= R;
R:= Q^.Lev; { Prav - Lev }
End
Else
UD(R^.Prav);
end;
begin
if D = nil then
Writeln( )
Else
If K < D^.Kl then
UDDer(D^.Lev, K)
Else
If K > D^.K1 then
UDDer(D^.Prav, K)
Else
Begin
Q:= D; { Q }
If Q^.Prav = nil then
D:= Q^.Lev {*} { }
Else
If Q^.Lev = nil then
D:= Q^.Prav {**} { }
Else
UD(Q^.Lev); {***}
End;
end;
(*)
Begin
D:= Q^.Lev;
Dispose(Q);
End
(**)
(***)
Dispose(Q);
. . , . : .
type
Adr = ^Zveno;
Zveno = record
AdrSled: Adr;
Element: Char;
end;
.
. 2 : . :
type
Adr2 = ^Zveno2
Zveno2 = record
AdrSled: Adr2;
AdrPred: Adr2;
Element: < >;
end;
: , 15.
1 | ― , . |
2 | ― , . |
3 | ― , . |
4 | ― . |
5 | ― . |
6 | ― . |
7 | ― . |
8 | ― , , . |
9 | ― , , . |
10 | ― , . |
11 | ― , . |
12 | ― . |
13 | ― . |
14 | ― , , . |
15 | ― , , . |
16 | ― . |
17 | ― . |
18 | ― . |
:
|
|
1. .
2. .
3. .
4. .
5. .
, , . .