Professional Documents
Culture Documents
Ni dung trnh by
2
Kiu d liu phc hp Kiu cu trc Con tr cu trc Cu trc t tr Kiu hp Mt s vn vi cu trc
Kiu d liu phc hp (composite datatype) l kiu d liu c xy dng t cc kiu d liu khc, cc kiu c th l:
kiu d liu c bn hoc, kiu d liu phc hp khc
Nhng kiu do ngi dng nh ngha thng l nhng kiu d liu phc hp:
Ngn ng cung cp phng tin ngi dng nh ngha (khai bo) nhng kiu ny
Cc thnh phn c th c kiu l kiu cu trc khc Kiu cu trc cn c gi l kiu bn ghi (record); cc thnh phn cn c gi l trng (field)
Kiu cu trc
5
l p1 x y p2 x
Khai bo kiu struct Point Tn kiu { Kiu v tn cc int x; thnh phn int y; }; Khai bo bin struct Point p; //C x: Point q; //C++ p: 10 Khi to Point p = {10, 20};
y: 20
Php gn Point p = {10, 20}; Point q = p; //q={10, 20} Truy cp thnh phn Line l; l.p1 = p; l.p1.x = l.p2.x;
Con tr cu trc
8
Line l = {{10, 20}, {30, 40}}; Point p = {50, 60}; Point *pp = &p; Point &rp = l.p1; Line *pl = &l; printf(%d, %d, pp->x, (*pp).y);//50, 60 printf(%d, %d, rp.x, rp.y); //10, 20 pp = &(pl->p1); pp++; printf(%d, %d, pp->x, (*pp).x);//30, 40
p kiu cu trc
9
C/C++ khng cho php chuyn kiu trn kiu cu trc struct Int1 { int a; }; struct Int2 { int a; }; Int1 i1 = {10}; int i = i1.a; //ok int j = (int)i1; //error i1 = 10; //error Int2 i2 = (Int2)i1; //error
p kiu cu trc
10
C/C++ cho php chuyn kiu tng minh trn kiu con tr cu trc
struct Point { int x, y; }; struct Line { Point p1, p2; };
Point p = {10, 20}; int *pi = (int*)&p; (*pi) = 30; printf(%d, %d, p.x, p.y); //30, 20 Line l = {{1, 2}, {3, 4}}; Line *pl = &l; Point *pp = (Point*)l; pp++; printf(%d, %d, pp->x, pp->y); //3, 4 int ai[] = {5, 6, 7, 8}; pl = (Line*)ai; printf(%d, %d, pl->p1.x, pl->p2.y); //5, 8
Cu trc t tr
11
Nhiu cu trc d liu l cu trc qui: cu trc c mt hay nhiu thnh phn c dng ca chnh n Cy nh phn l mt cu trc qui gm mt nt mang d liu v hai cy con tri phi (cng l cy nh phn) struct BinTree { int data; BinTree left, right; //!!! };
Cu trc t tr
12
Nhng cu trc qui c hin thc trong C/C++ bng nhng cu trc t tr struct BinTree { int data; BinTree *left, *right; //ok };
Cu trc t tr
13
20
40
10
Kiu hp (union)
14
Kiu hp l kiu d liu gm nhiu thnh phn d liu c lu tr ti cng mt vng nh Kiu hp cho php nhiu cch din gii (cch hiu) trn cng mt d liu C php nh kiu cu trc
Kiu hp
15
union XXX { int is[4]; Point ps[2]; Line l; }; XXX xxx = {10, 20, 30, 40}; printf("%d, %d", xxx.ps[0].x, xxx.ps[0].y); //10, 20 printf("%d, %d", xxx.l.p2.x, xxx.l.p2.y); //30, 40 xxx.l.p2 = xxx.l.p1; printf("%d", xxx.is[3]); //20
Thao tc sao chp cu trc l sao chp ton b v ch vng nh ca cu trc struct X { char *s; int i; }; char a[] = hi; X x1 = {a, 1}; X x2 = x1; printf(%s, %d, x1.s, x1.i); //hi, 1 x2.i = 2; x2.s[0] = H; printf(%s, %d, x1.s, x1.i); //Hi, 1
Kiu cu trc A c gi l kiu m rng ca kiu cu trc B nu A c y v ng th t cc thnh phn ca B (v c th c thm cc thnh phn khc)
L mt dng c bit ca kiu con (subtype) L mt dng k tha chc nng: cc thao tc trn mt kiu cng c th dng thao tc trn cc kiu m rng ca n
struct X { int a, b; }; struct XX { int c, d; int e; }; void f(X *x) { x->a = x->b; } XX xx = {1, 2, 3}; f((X*)&xx); printf(%d, %d, %d, x.c, xx.d, xx.e); //2, 2, 3
19
Hi v p