Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Bi 1: KIU D LIU CON TR

Thng thng khi khai bo mt bin, ta thng quy nh ln v vng nh cho n. V d


VAR A:array[1..100] of byte;
Trong khai bo trn bin A c cp pht 100 byte trong b nh, tuy nhin khng phi lc no cng
dng ht 100 byte , do vy s gy lng ph b nh.
Trong nhng bi ton i hi nhiu b nh th vic lng ph b nh l iu phi trnh.
C 1 cch tit kim b nh l khng cp pht mt lc ngay t u chng trnh nh cch thng
thng m ch cp pht b nh cho bin lc cn gi l cp pht b nh ng, nu khng dng na th thu
hi li b nh. Cp pht b nh ng c thc hin thng qua bin con tr.
Kiu con tr c hai loi l con tr nh kiu v con tr khng nh kiu. Di y ta ch xt con tr
nh kiu.
1. nh ngha kiu con tr
Kiu con tr l mt kiu d liu c bit dng biu din a ch. Kiu con tr do ngi lp trnh
nh ngha theo c php:
TYPE <kiu con tr>=^<Kiu d liu>;
V d:
TYPE
CT_1=^integer;
CT_2=^real;
HocSinh=RECORD
Ten:string[30];
N_sinh:integer;
Diachi:string;
END;
CT_3=^hocsinh;
Ch : i vi cc kiu d liu c cu trc (mng, xu, bn ghi) khng c a trc tip vo nh
ngha kiu con tr m phi thng qua mt kiu khc (c th nh ngha trc hoc sau).
2. Bin con tr
Bin con tr c th khai bo gin tip thng qua kiu con tr (c nh ngha trc) hoc khai bo
trc tip.
C php khai bo bin con tr:
+ Trc tip VAR <tn bin con tr>:^<kiu con tr>;
V d: VAR N:^integer;
+ Gin tip: VAR <tn bin con tr>:<tn kiu con tr>;
V d: VAR HS: CT_3;
Lu : Bin con tr khng dng lu tr gi tr ca bin m lu tr a ch ca bin
Con tr khng tr vo u c gi l con tr rng, k hiu l nil
3. Cc thao tc trn bin con tr
a. Php gn a ch ca i tng cho bin con tr
Gi s ct l bin con tr v x l mt i tng (bin, hm, th tc) ta c th gn a ch ca x cho ct:
Cch 1: ct:=@x;
Cch 2: ct=addr(x);

Bin son: Lu Hi Phong

b. Php gn hai con tr


Hai con tr cng kiu c th gn cho nhau khi chng cng tr n 1 a ch:
Ct1=ct2;
c. Php so snh 2 con tr
Ch tn ti hai php so snh = (bng nhau) v <> (khch nhau) gia hai con tr nu chng cng kiu,
gi tr tr v ca php so snh l true hoc fasle.
Gi s c hai bin con tr cng kiu l ct1 v ct2:
+ Php so snh ct1=ct2 tr v gi tr true khi ct1 v ct2 cng tr n 1 a ch, ngc li tr v fasle
+ Php so snh ct1<>ct2 tr v gi tr fasle khi ct1 v ct2 cng tr n 1 a ch, ngc li tr v true
d. Php truy cp d liu
Khi con tr ct ang tr n 1 vng a ch no , trong Pascal cho php dng k hiu ct^ nh mt
bin ly gi tr ca vng a ch .
e. Cp pht b nh ng
Khi khai bo xong bin con tr cha c vng nh tr n, DO vy cn phi cp pht cho bin con
tr thng qua th tc new(<bin con tr>);
C th cp pht vng nh nhiu ln cho 1 bin con tr nhng bin con tr ch tr n vng nh c
cp pht cui cng.
Nu mun thu hi vng nh cp pht cho bin con tr th dng th tc Dispose(<bin con tr>);

Bin son: Lu Hi Phong

Bi 2: DANH SCH LIN KT N


Danh sch lin kt n l danh sch gm nhiu nt, mi nt gm c thng tin ca nt v mi lin
kt n nhiu nht mt nt khc.
Danh sch lin kt n A c khai bo theo c php nh sau:
TYPE Tn_Kiu_DSLKD=^Tn_bn_ghi;
Tn_bn_ghi =RECORD
Trng_1: kiu_trng_1;
Trng_2: kiu_trng_2;
..
Trng_k: kiu_trng_k;
Lin_kt: Tn_Kiu_DSLKD;
END;
VAR Tn_Bin_DSLKD:Tn_Kiu_DSLKD;
Trong c php trn, khai bo DSLK n thng qua mt con tr m n tr n 1 bn ghi, trong con tr
bn ghi ny li c mt trng tr n mt con tr bn ghi khc. C th m hnh mt con tr bn ghi
nh sau:
Trng 1;
Trng 2;
Lin kt
..
Trng k;
Khi thc hin khai bo VAR Tn_Bin_DSLKD:Tn_Kiu_DSLKD; th Tn_bin_DSLKD ch n
thun l 1 con tr v ang tr vo Nil (cha c vng nh);
V d: khai bo 1 danh sch lin kt n:
TYPE list=^danhsach;
danhsach=RECORD
info:longint;
link:list;
END;
VAR A:list;
Trong v d trn, con tr bn ghi ch c 2 trng l trng info cha thng tin ca mt nt v
trng Link lin kt n 1 nt khc trong DSLK n hoc tr vo Nil nu n l nt cui cng ca
DSLK n.
C th m hnh mt DSLK n A da trn v d khai bo trn nh sau:

A
9

nil

Cc s pha trong l gi tr ca trng info, cc mi lin kt (trng link) c th hin bng mi


tn. Con tr A lun tr v nt u tin ca DSLK.
Cc thao tc trn danh sch lin kt n gm c: Tm kim 1 nt c gi tr x, chn mt nt c gi tr
x_chen vo DSLK, xa 1 nt c gi tr k vo DSLK.
Cc chng trnh c s dng di y da trn DSLK A c khai bo nh v d trn.
1. Tm kim 1 nt c gi tr x
Thao tc ny tr v con tr P tr n nt c gi tr x, ngc li nu x khng c trong DSLK th p=nil

Bin son: Lu Hi Phong

Hm tm kim:
Function tim(A:list;k:longint):list;
VAR p:list;
BEGIN
WHILE (a<>nil)and(a^.info<>k) DO a:=a^.link;
exit(a);
END;
2. Chn nt c gi tr x_chen
Yu cu: Chn 1 nt c gi tr x_chen vo sau nt c gi tr x, nu trong DSLK khng c nt c gi
tr x th chn vo cui danh sch.
Gi s nt cha gi tr x_chen cn c chn vo DSLK A. To con tr T mang gi tr
T^.info=x_chen, T^.link=nil. Xt 3 trng hp:
+ TH1: Nu DSLK A rng th A tr vo T.
+ TH2: Nu DSLK A c t nht 1 nt v trong A c 1 nt c gi tr x th tm P l con tr tr vo nt
c gi tr x trong A. V d: x=2; x_chen=8 th ta thc hin nh sau:
B1: Cho P tr v nt c gi tr x ng thi to 1 con tr T cha x_chen=8:

T
8

A
9

nil

nil

B2: Cho lin kt ca T tr vo v tr ca P^.link ang tr n: T^.link:=P^.link;

T
8

9 kt ca
1 P tr vo
6 T: P^.link:=T;
2
B3: Cho lin

nil

T
8
2

A
9

nil

Sau 3 bc ta chn c nt c gi tr x_chen vo DSLK A


+TH3: DSLK A khng rng nhng khng c nt cha gi tr x: To con tr T cha gi tr x_chen ri
a vo cui A.
Th tc nh sau:
PROCEDURE chen(x_chen:longint;VAR a:list;x:longint);
VAR p,t:list;
BEGIN
new(t);
t^.info:=x_chen;
t^.link:=nil;
IF a=nil THEN a:=t//TH1: A rong
ELSE
BEGIN

Bin son: Lu Hi Phong

p:=tim(a,x);
IF p=nil THEN//TH3: ko tim thay x
BEGIN
p:=a;
WHILE p^.link<>nil DO p:=p^.link;
p^.link:=t;
END
ELSE
//TH2: tim thay x
BEGIN
t^.link:=p^.link;
p^.link:=t;
END;
END;
END;
Ch : Hm Tim(a,x) c trnh by mc 1 ca bi ny
3. Xa mt nt cha gi tr x trong DSLK n
Tt nhin trong A phi c 1 nt cha gi tr x th ta mi thc hin c thao tc xa ny. Chia thnh
2 trng hp:
+ TH1: nt cha gi tr x nm u DSLK.
Lc ny ch cn A tr vo nt tip theo ri thu hi vng nh ca nt u tin:
B1: Cho con tr T tr vo nt u tin: T:=A;

A
T

nil

B2: Cho A tr v nt tip theo: A:=A^.link;

A
T

9
1
6
2
3
7
B3: thu hi vng nh ca T: Dispose(T). Kt qu t c:

nil

A
1

nil

+ TH2: Nt cha x khng phi l nt u tin ca DSLK. Gi s lc ny x=3


B1: Cho con tr P2 tr vo nt cha gi tr x, con tr P1 tr vo nt trc P2

P1
A

P2
2

nil

nil

B2: Cho lin kt ca P1 tr vo lin kt ca P2: P1^.link=P2^.link

P1
A

P2
2

B3: Hy lin kt ca P2 ri thu hi vng nh ca P2: P2^.link:=nil; dispose(P2); ta c kt qu:

P1
A

Bin son: Lu Hi Phong

nil

Th tc xa nt x nh sau:
PROCEDURE xoa(VAR A:list;x:longint);
VAR p1,p2:list;
BEGIN
IF a^.info=x THEN a:=a^.link
ELSE
BEGIN
p1:=a;
p2:=a^.link;
WHILE(p2<>nil)and(p2^.info<>x) DO
BEGIN
p1:=p1^.link;
p2:=p2^.link;
END;
IF p2<>nil THEN
BEGIN
p1^.link:= p2^.link;
p2^.link:=nil;
dispose(p2);
END;
END;
END;
Bi tp:

Bin son: Lu Hi Phong

Bi 3: DANH SCH LIN KT KP

Bin son: Lu Hi Phong

You might also like