Session 19 - Concept

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 18

Bi 19

Cc Kiu d liu Nng cao v Sp xp

Mc tiu:
Kt thc bi hc ny, bn c th:
Gii thch Tm hiu cu trc (structure) v cng dng ca chng
nh ngha cu trc
Khai bo cc bin kiu cu trc
Gii thchTm hiu cch truy cp vo cc phn t ca cu trc
Gii thchTm hiu cch khi to cu trc
Gii thchTm hiu cch s dng cu trc vi cu lnh gn
Gii thch cch truyn cu trc vo hm nh cc i sGii thchTm hiu cch truyn itham s
kiu kiu cu trc vo hm
S dng mng cc cu trc
Gii thchTm hiu s cch khi to ca cc mng cu trc
Gii thchTm hiu con tr n cu trc
Gii thchTm hiu cch truyn cc i s kiu con tr cu trc vo hm nh cc i s.
Gii thchTm hiu t kha typedef
Gii thchTm hiu vic sp xp mng vi hai thut ton sp xp mng l Insertion sort v Bubble
sort.
Gii thiu
Cc chng trnh ng dng trong bi cnh ca th gii thctrong thc t i hi lu tr cc kiu d
liu khc nhau. C th cc kiu d liu c nh ngha trc ca C t ra l khng trong nhng
trng hp nh vy. Tuy nhin, cc kiu d liu ca C m chng ta c hc c th khng trong
cc trng hp . V vy, C cho php to ra cc kiu d liu ty do ngi dng nh ngha. Mt
trong nhng kiu nh vy l cu trc (structure). Mt cu trc l mt nhm tp cc bin c gom
nhm li vi nhau cdi cng mt tn. Mt kiu d liu cng c th c t tn mi bng cch s
dng t kha typedef.
Cc ng dng thng lu tr mt s lng d liu rt ln. Trong nhng trng hp ny, vic nh v
mt mc d liu no c th tn nhiu thi gian. Sp xp cc gi tr theo mt trt t no s lm
cho cng vic tm kim nhanh chng v d dng hn. Trong chng ny, chng ta cng s xem mt s
gii thut dng sp xp cc mng.
19.1

Cu trc

Cc bBin c th c s dng lu gi mt mu d liu ti mt thi im v cc mng c th c


s dng lu gi mt s mud liu c cng kiu. Tuy nhin, mt chng trnh c th yu cu x l
cc mc d liu c kiu khc nhau trong cng mt n v chung. trng hp ny, c bin v mng
u khng thch hp s dng.

Cc Kiu d liu Nng cao v Sp xp

225

V d, mt chng trnh c vit lu tr d liu trong v mt danh mc sch. Chng trnh i


hi phi nhp v lu tr tn ca mi quyn sch (mt mng chui), tn ca tc gi (mt mng chui
khc), ln xut bn (mt s nguyn), gi ca quyn sch (mt s thc). Mt mng a chiu khng th
s dng lm iu ny, v cc phn t ca mt mng phi c cng kiu. y chnh l lc m Trong
trng hp ny, vic s dng cu trc s lm cho mi vic tr nn n gin hn.
Mt cu trc bao gm mt s mumc d liu, khng cn phi cng kiu, c nhm li vi nhau.
Trong v d trn, mt cu trc s bao gm tn sch, tn tc gi, ln xut bn, v gi ca quyn sch.
Cu trc c th lu gi bao nhiu mcmu d liu cng c.
Hnh 19.1 mMinh ha s khc bit gia mt bin, mt mng v mt cu trc.

1
Bin

I
L
L
U
S
I
O
N
S
Mn
g

I
L
L
U
S
I
O
N
S
B
A
C
H
1

Tn sch

Tn
tc gi
Ln
xut bn

Cu trc
Hnh 19.1. S khc nhau gia mt bin, mt mng v mt cu trc.
19.1.1 nh ngha mt cu trc
Mt cu trc c nh ngha chnh l mt khun mu ca bin cu trc. Cc bin trong cu trc c
gi l cc phn t ca cu trc hay thnh phn ca cu trcMt nh ngha cu trc hnh thnh
mt khun mu to ra cc bin cu trc. Cc bin trong cu trc c gi l cc phn t ca cu
trc hay thnh vin ca cu trc.
Vic nh ngha cu trc s to ra kiu d liu mi cho php ngi dng s dng chng khai bo
cc bin kiu cu trc. Cc bin trong cu trc c gi l cc phn t hay cc thnh phn ca cu
trc.
Mt cch tng qut, cc phn t ca mt cu trc quan h vi nhau mt cch logic v chng lin quan
n mt thc th duy nht. V d, v mt danh mc sch c th c biu din nh sau:
struct cat
{
char bk_name [25];
char author [20];
int edn;
float price;
};

226

Lp trnh c bn C

Cu lnh trn nh ngha mt kiu d liu mi gic tn l struct cat. Mi bin ca kiu ny bao gm
bn phn t - bk_name, author, edn, v price. Cu lnh khng khai bo bt k bin no v v vy
chng trnh khng dnh bt k vng nh no trong b nh. N ch nh ngha cu trc ca cat. T
kha struct bo cho trnh bin dch bit rng mt structure ang c nh ngha. Nhn cat khng
phi l tn bin, v khng phi ta ang khai bo bin. N l mt tn kiu. Cc phn t ca cu trc
c nh ngha trong du mc, v kt thc ton b cu lnh bng mt du chm phy.
19.1.2 Khai bo bin kiu cu trc
Mt Kkhi mt cu trc c nh ngha, chng mt hay nhiu bin kiu ny c th c khai bota
c th khai bo mt hoc nhiu bin kiu ny. iu ny c th thc hin nh sauV d:
struct cat books1;
Cu lnh ny s dnh vng nh lu gi tt c cc mc trong mt cu trc. Khai bo trn thc
hin chc nng tng t nh cc khai bo bin: int xyz v float ans. N bo vi trnh bin dch dnh
ra mt vng lu tr cho mt bin vi kiu no v gn tn cho bin.
Cng nh vi int, float v cc kiu d liu khc, ta c th c mt s bt k cc bin c kiu cu trc
cho. Trong mt chng trnh, c th khai bo hai bin books1 v books2 c kiu cu trc cat . iu
ny c th thc hin c theo nhiu cch.
struct cat
{
char bk_name[25];
char author[20];
int edn;
float price;
} books1, books2;
hoc

struct cat books1, books2;

hoc
struct cat books1;
struct cat books2;
Cc khai bo ny s dnh vng nh cho c hai bin books1 v books2.
Cc phn t ca cu trc c truy cp thng qua vic s dng ton t chm (.), ton t ny cn c
gi l ton t thnh vin membership. C php tng qut dng truy cp mt phn t ca cu trc
l:
structure_name.element_name
V d nh, m lnh sau y lin htruy cp n trng bk_name ca bin kiu cu trc books1 khai
bo bn trn.
books1.bk_name
c vo tn ca quyn sch, cu lnh s l:
scanf(%s, books1.bk_name);
in ra tn sch, cu lnh s l:

Cc Kiu d liu Nng cao v Sp xp

227

printf(The name of the book is %s, books1.bk_name);

19.1.3 Khi to cc bin cu trc


Ging nh cc bin v mng, cc bin kiu cu trc c th c khi to ti thi im khai bo. Hnh
thc tng t nh cch khi to mng. Xt cu trc sau dng lu s th t v tn nhn vin:
struct employee
{
int no;
char name[20];
};
Cc bin emp1 v emp2 c kiu employee c th c khai bo v khi to nh sau:
struct employee emp1 = {346, Abraham};
struct employee emp2 = {347, John};
y, sau khi khai bo kiu cu trc nh thng l, hai bin cu trc emp1 v emp2 c khai bo
v khi to. SVic khai bo v khi to ca chng xy rac thc hin cng mt lc trong mt
dng bi mt cu lnh duy nht. SVic khi to ca cu trc tng t nh khi to mng kiu bin,
tn bin, v ton t gn, cui cng l danh sch cc gi tr c t trong cp mc v c phn cch
bi du phy. theo sau bi du mc cha danh sch cc gi tr, phn cch nhau bi du phy.
19.1.4 Cu lnh gn s dng cc cu trcThc hin cu lnh gn vi cc bin cu trc
C th gn gi tr ca mt bin cu trc cho mt bin khc cng kiu bng cch s dng cu lnh gn
n gin. Chng hn, nu books1 v books2 l cc bin cu trc c cng kiu, th cu lnh sau l hp
l.
books2 = books1;
Cng c nhng trng hp, ni m khng th dng cu lnh gn trc tip, th c th s dng hm to
snsn memcpy(). Nguyn mu ca hm ny l:
memcpy (char * destn, char &source, int nbytes);
Hm ny thc hin sao chp nbytes c lu tr bt u t a ch source n mt vng nh khc c
a ch bt u t destn. Hm i hi ngi s dng phi m t ch ra kch c ca cu trc (nbytes),
kch c ny c th t c bng cch s dng ton t sizeof(). S dng hm memcpy(), c th sao
chp ni dung ca books1 sang books2 nh sau:
memcpy (&books2, &books1, sizeof(struct cat));
19.1.5 Cu trc lng trong cu trc
Mt cu trc c th lng trong mt cu trc khc. Tuy nhin, mt cu trc khng th lng trong chnh
n. Rt nhiu trng hp thc t i hi c mt cu trc nm trong mt cu trc khc. Xt v d, mt
mu tin v lu tr thng tin v nhng ngi mn sch v chi tit ca quyn sch c mn cng
phi c lu tr. Cu trc sau y c th c s dng: ta c th s dng cu trc sau:

228

Lp trnh c bn C

struct issue
{
char borrower [20];
char dt_of_issue[8];
struct cat books;
}issl;
Cu lnh ny khai bo books l mt thnh phn ca cu trc issue. Bn thn thnh phn ny l mt
cu trc kiu struct cat c kiu cu trc. Bin Ccu trc trn c th c khi to nh sau:
struct issue issl = {Jane, 04/22/03, {Illusions,
Richard Bach, 2, 150.00}};
Cc du ngoc lng nhau c s dng khi to mt cu trc nm trong mt cu trc.
truy cp vo cc phn t ca cu trc, hnh thc tng t nh cch s dng vi cc cu trc bnh
thng, chng hn truy cp vo tn ca ngi mn, m lnh s l:
i vi bin cu trc c thnh phn l mt cu trc khc, vic truy cp cc thnh phn ca bin ny
hon ton tng t i vi mt bin cu trc thng thng. Chng hn, truy cp vo tn ca ngi
mn ta dng lnh l:
issl.borrower
Tuy nhin truy cp vo phn t ca cu trc cat, chnh l mt phn ca cu trc issue, biu thc sau
y s c s dng:
Tuy nhin, truy cp thnh phn author ca bin cu trc cat m bin cu trc ny li l thnh phn
ca mt bin cu trc issl ta s dng lnh sau:
issl.books.author
Biu thc ny lin h n phn t author ca cu trc books trong cu trc issl.
Mc lng ca cc cu trc ch b gii hn bi dung lng hin thi ca b nh ang c. C th c
mt cu trc lng trong mt cu trc ri lng trong mt cu trc khc v v.vCc tn bin s dng
thng t m t v hnh dng ca n. Tn ca cc bin thng c t theo cch thc gi nh ni
dung thng tin m n lu tr. V d nh:
company.division.employee.salary
Cng cn nh rng nu mt cu trc c lng trong mt cu trc khc, n phi c khai bo trc
cu trc khc s dng n.
19.1.6 Truyn cu trc nh l cc i s ca hm tham s kiu cu trc
Mt bin cu trc c th c truyn vo mt hm nh l mt i sKiu tham s ca mt hm c th
l cu trc. y l mt phng tin hu dng v n c s dng truyn mt nhm cc mc d
liu c lin quan logic vi nhau thay v phi truyn tng mc mt. y l mt phng tin hu dng
khi ta mun truyn mt nhm cc thnh phn d liu c quan h logic vi nhau thng qua mt bin
thay v phi truyn tng thnh phn mt. Tuy nhin, khi mt cu trc c s dng nh mt i
stham s, cn phi lu rng kiu ca i stham s thc phi trng vi kiu ca tham s hnh thc.
Chng hn nh, mt cu trc c khai bo lu tr tn, m s khch hng v s tin gi gc vo ti
khon ca khch hng. D liu c nhp trong hm main() v cu trc c truyn vo hm
intcal()-hm tnh ton s tin li phi tr, vic ton s tin li phi tr c thc hin bng cch gi
hm intcal() c mt tham s kiu cu trc. on lnh nh sau:

Cc Kiu d liu Nng cao v Sp xp

229

V d 1:
#include <stdio.h>
struct strucintcal /* Defines the structure */
{
char name[20];
int numb;
float amt;
};
void main()
{
struct strucintcal xyz; /* Declares a variable */
void intcal(struct strucintcal);
clrscr();
/* Accepts data into the structure */
printf("\nEnter Customer name: ");
gets(xyz.name);
printf("\nEnter Customer number: ");
scanf("%d", &xyz.numb);
printf("\nEnter Principal amount: ");
scanf("%f", &xyz.amt);
intcal(xyz); /* Passes the structure to a function */
getch();
}
void intcal(struct strucintcal abc)
{
float si, rate = 5.5, yrs = 2.5;
/* Computes the interest */
si = (abc.amt * rate * yrs) / 100;
printf ("\nThe customer name is %s", abc.name);
printf("\nThe customer number is %d", abc.numb);
printf("\nThe amount is %f", abc.amt);
printf("\nThe interest is %f", si);
}

return;

Kt qu ca chng trnh trn c minh ha nh sau: Mt kt xut mu ca chng trnh trn nh


sau:
Enter Customer name: Jane
Enter Customer number: 6001

230

Lp trnh c bn C

Enter Principal Amount: 30000


The customer name is Jane
The customer number is 6001
The amount is 30000.000000
The interest is 4125.000000
C th nh ngha mt cu trc m khng c nhn. iu ny hu dng khi mt bin c khai bo
cng lc vi nh ngha cu trc ca n. Nhn s khng cn thit trong trng hp ny.
19.1.7 Mng cc cu trc
Mt trong nhng cch s dng thng thng ca cu trc l mng cu trc. khai bo mt mng cc
cu trc, mt cu trc s c nh ngha trc, v sau mt bin mng c kiu s c khai bo.
V d nh, khai bo mt mng cc cu trc c kiu cat, cu lnh s l:
struct cat books[50];
Ging nh tt c cc bin, mng cc cu trc bt u ti ch s 0. Tn mng theo sau bi ch s nm
trong du mc vung i din cho mt phn t ca mng Tn mng v ch s nm trong cp du ngoc
vung theo sau tn mng i din cho mt phn t ca mng. Sau lnh khai bo trn, phn t ny l
mt cu trc theo nh ngha ca n. V vy tt c cc qui tc dng truy xut n cc phn t ca
cu trc u c p dng trn phn t mng nylut dng lin h n cc trng (hay cc phn t)
ca cu trc u p dng c v sau. Sau khi mng cu trc books c khai bo,
books[4].author
s lin h n bin tng ng l thnh phn author ca phn t th t ca trong mng books.

Cc Kiu d liu Nng cao v Sp xp

231

19.1.8 Khi to cc mng cu trc


Mt mng kiu bt k c khi to bng cch lit k danh sch gi tr ca cc phn t trong mt cp
du mc. Lut ny cngvn ng thm ch khi cc phn t mng l cc cu trc. Mt khi to hiu
qu l cha cc du mc lng nhauV mi phn t ca mng l mt cu trc, m gi tr khi to ca
mt cu trc c t trong cp du mc, nn ta phi s dng cc cp du mc lng nhau khi khi to
mng cc cu trc. Xt v d sau:
struct unit
{
char ch;
int i;
};
struct unit series[3] =
{
{a, 100},
{b, 200},
{c, 300},
};
on lnh ny khai bo series l mt mng cu trc gm 3 phn t, mi phn t c kiu unit. Khi
khi to, v mi phn t c khi to l mt cu trc nn gi tr ca n c t trong cp du mc.,
V v vy ton b danh schgi tr cc phn t c ng trong du mc cho bit ang khi to
mt mng.

232

Lp trnh c bn C

19.1.9 Con tr n cu trc

C h tr con tr n cu trc, nhng c mt s kha cnh c bit i vi con tr cu trc. Ging nh


cc kiu con tr khc, con tr cu trc c khai bo bng cch t du * trc tn ca bin cu trc.
V d, cu lnh sau y khai bo con tr ptr_bk ca kiu cu trc cat.
struct cat *ptr_bk;
By gi gn a ch ca bin cu trc books kiu cat cho ptr_bk, cu lnh s nh sau:
ptr_bk = &books;
Ton t -> c dng truy cp von phn t ca mt cu trc s dng mt con tr cu trc. Ton
t ny l mt t hp ca du tr (-) v du ln hn (>) v n c bit n nh mt ton t t hp.
V d nh, trng author c th c truy cp theo mt trong cc cch sau y:
ptr_bk->author
hoc
books.author
hoc
(*ptr_bk).author
Trong biu thc cui cng, du ngoc l bt buc v ton t chm (.) c u tin cao hn ton t v
hng (*). Khng c du ngoc, trnh bin dch s sinh ra mt li, v ptr_bk (mt con tr) th khng
tng thch trc tip vi ton t chmv ton t chm khng c p dng trn bin con tr ptr_bk.
Cng nh tt c cc khai bo con tr khc, vic khai bo mt con tr ch cp pht khng gian cho con
tr m khng cp pht cho ni m n tr n. V vy, khi mt con tr cu trc c khai bo, khng
gian c cp pht l dnh cho a ch ca cu trc ch khng phi l bn thn cu trc.
19.1.10

Truyn con tr cu trc nh l cc i tham s

C th s dng cc con tr cu trc nh l i stham s ca hm. Ti thi im gi hm, mt con tr


cu trc hoc a ch tng minh ca mt bin cu trc c truyn vo hm. iu ny cho php mt
hm c th sa i cc phn t ca cu trc mt cch trc tip.
19.2

T kha typedef

Mt kiu d liu mi c th c nh ngha bng cch s dng t kha typedef. T kha ny khng
to ra mt kiu d liu mi, m nh ngha mt tn mi cho mt kiu c. C php tng qut ca cu
lnh typedef l:
typedef type name;
trong type l mt kiu d liu cho php bt k v name l mt tn mi cho kiu d liu ny.
Tn mi c nh ngha, l mt tn thm vo, ch khng phi l tn thay th, cho kiu d liu c.
V d nh, mt tn mi cho float c th c nh ngha theo cch sau:
typedef float deci;

Cc Kiu d liu Nng cao v Sp xp

233

Cu lnh ny s bo cho trnh bin dch bit nhn dng deci l mt tn khc ca float. Mt bin
float c th c nh ngha s dng deci nh sau:
deci amt;
y, amt l mt bin s thc kiu deci, chnh l mt tn khc ca float. Sau khi c nh ngha,
deci c th c s dng nh mt kiu d liu trong cu lnh typedef gn mt tn khc cho kiu
float. Chng hn,
typedef deci point;
Cu lnh trn bo cho trnh bin dch bit nhn dng point nh l mt tn khc ca deci, cng
chnh l mt tn khc ca float. c tnh typedef c bit tin li khi nh ngha cc cu trc, v ta
khng cn nhc li nhn struct mi khi mt s dng cu trc. V vy, cu trc c th c lin h mt
cch chnh xc hnKhi vic s dng cu trc s thun tin hn. Thm vo , tn cho mt kiu cu
trc do ngi dng nh ngha thng gi nh n mc ch ca cu trc trong chng trnh. Mt
cch tng qut, mt cu trc do ngi dng nh ngha c th c vit nh sau:
typedef struct new_type
{
type var1;
type var2;
}
y, new_type l kiu cu trc do ngi dng nh ngha v n khng phi l mt bin cu trc.
By gi, cc bin kiu cu trc c th c nh ngha theo kiu d liu mi. Mt v d nh sau:V
d:
typedef
{
int
int
int
} date;

struct
day;
month;
year;

date due_date;
y, date l mt kiu d liu mi v due_date l mt bin kiu date.
Cn nh rng typedef khng th s dng vi storage classes.
19.3

Sp xp mng (Sorting Arrays)

Sp xp c ngha l xp mng d liu theo mt th t xc nh nh tng dn hay gim dn. D liu


trong mt mng s d dng tm c nu mng c sp xpKhi mng c sp xp, vic tm kim
trn mng tr nn d dng hn.
C mt s phng php sp xp mng. Chng ta s xem xt hai phng php sau y:
Bubble Sort
Insertion Sort
Cc phng php c trnh by sau y p dng i vi mng sp xp theo th t tng dn
19.3.1 Bubble Sort

234

Lp trnh c bn C

Tn Bn thn tn ca qu trnh sp xp ny m t cch thc n lm vic. y, vic so snh bt


u t phn t di cng v phn t c gi tr nh hn s ni bt dn ln trn nh. Qu trnh sp xp
mt mng 5-phn t theo th t tng dn c cho nh sau:
So snh gi tr trong phn t th 5 vi gi tr trong phn t th 4.
Nu gi tr trong phn t th 5 nh hn gi tr trong phn t th 4, th gi tr trong hai phn t s
c hontrao i.
K tip, so snh gi tr trong phn t th 4 vi gi tr trong phn t th 3, v theo cch tng t,
cc gi tr s c traohon i nu gi tr trong phn t disau l nh hn gi tr ca phn t
trcn.
So snh gi tr trong phn t th 3 vi gi tr trong phn t th 2, v qu trnh so snh v traohon
i ny c th tip tc.
Sau mt lt, gi tr nh nht s c dit vo n phn t u tin. Mt cch nm na, c th
pht biu rng gi tr nh nht ni ln.
Trong lt k tip, vic so snh li bt u vi phn t thp nhtcui cng, v so snh dn ln n
phn t th 2. V phn t th nht cha phn tgi tr nh nht, khng cn thit phi so snh n
na.
Vi cch nh vy, cui qu trnh sp xp, cc phn t nh hn s ni bt dn ln nhtrn, trong
khi cc gi tr ln hn s chm xung. Hnh 19.2 minh ha cho phng php buble sort.
23

23

23

23

90

90

90

23

90

90

25

16

16

16

16

16

25

25

25

25

23

23

23

16

90

90

16

23

16

16

90

90

25

25

25

25

16

16

16

23

23

23

90

25

25

25

90

90

16

16

23

23

25

25

Cc Kiu d liu Nng cao v Sp xp

235

90

90

9
16
23
25
90

Figure 19.2: Bubble Sort


Chng trnh thc hin sp xp mng theo phng php bubble sort c cho nh sau:
V d 2:
#include <stdio.h>
void main()
{
int i, j, temp, arr_num[5] = { 23, 90, 9, 25, 16};
clrscr();
for(i = 3; i >= 0; i--) /* Tracks every pass */
for(j = 4; j >= 4 - i; j--) /* Compares elements */
{
if(arr_num[j] < arr_num[j - 1])
{
temp = arr_num[j];
arr_num[j] = arr_num[j - 1];
arr_num[j - 1] = temp;
}
}
printf("\nThe sorted array");
for(i = 0; i < 5; i++)
printf("\n%d", arr_num[i]);
}

236

getch();

Lp trnh c bn C

19.3.2 Insertion Sort


Trong phng php Insertion sort, mi phn t trong mng c xem xt,ta xt mi phn t ca
mng v t vo v tr ng ca n gia cc phn t c sp xp. Khi phn t cui cng c t
vo v tr ng ca n, th mng c sp xp. V d, xt mt mng c 5 phn t,
Gi tr trong phn t th nht c xem nh l ng th t.
So snh gi tr trong phn t th hai vi phn mng sp xp, m hin ti ch c phn t th
nht.
Nu gi tr trong phn t th hai nh hn, n c xen trc phn t th nht. By gi, hai phn
t u tin to thnh phn danh sch sp xp v phn cn li to thnhl danh sch cha sp
xp.
Phn t k tip trong danh sch cha sp xp, phn t th 3, c so snh vi danh sch sp
xp.
Nu gi tr trong phn t th 3 nh hn phn t th 1, gi tr trong phn t th 3 c xen trc
phn t th 1.
Ngc li, nu gi tr trong phn t th 3 nh hn phn t th 2, gi tr trong phn t th 3 c
xen trc phn t th 2. By gi, phn sp xp ca mng chagm 3 phn t, trong khi phn cha
sp xp chagm 2 phn t cn li.
Qu trnh so snh cc phn t trong danh sch cha sp xp vi cc phn t trong danh sch
sp xp tip tc cho n khi phn t cui cng trong mng c so snh v t vo v tr ng
ca n.
cui qu trnh sp xp, mi phn t c xen vo ng v tr ca n. Hnh 19.3 minh ha cch lm
vic ca insertion sort.

Cc Kiu d liu Nng cao v Sp xp

23

23

90

90

25

25

16

16

23

90

23

90

25

25

16

16

23

23

23

23

90

90

90

25

25

25

25

90

16

16

16

16

23

23

16

25

25

23

237

90

90

25

16

16

90

Figure 19.3: Insertion Sort


Chng trnh thc hin sp xp mng theo phng php insertion sort c cho nh sau:
V d 3:
#include<stdio.h>
void main()
{
int i, j, arr[5] = { 23, 90, 9, 25, 16 };
char flag;
clrscr();
/*Loop to compare each element of the unsorted part of the
array*/
for(i = 1; i < 5; i++)
/*Loop for each element in the sorted part of the array*/
for(j = 0, flag = 'n'; j < i && flag == 'n'; j++)
{
if(arr[j] > arr[i])
{
/*Invoke the function to insert the number*/
insertnum(arr, i, j);
flag = 'y';
}
}
printf("\n\nThe sorted array\n");
for(i = 0; i < 5; i++)
printf("%d\t", arr[i]);
}

getch();

insertnum(int arrnum[], int x, int y)


{
int temp;
/*Store the number to be inserted*/
temp = arrnum[x];
/*Loop to push the sorted part of the array down from the
position where the number has to inserted*/
for(; x > y; x--)
arrnum[x] = arrnum[x - 1];
/*Insert the number*/

238

Lp trnh c bn C

arrnum[x] = temp;

Cc Kiu d liu Nng cao v Sp xp

239

Tm tt
Mt cu trc l mt nhm cc bin c kiu d liu khc nhau c gom li di cng mt tn .Mt
cu trc l tp cc bin c th c kiu d liu khc nhau c nhm li vi nhau di cng mt
tn.
Mt nh ngha cu trc to thnh mt khun mu, khun mu ny c th c s dng to ra
cc bin cu trc.Vic nh ngha cu trc s to ra kiu d liu mi cho php ngi dng s
dng chng khai bo cc bin kiu cu trc
Cc phn t c lp ca cu trc c tham chiu ntruy cp bng cch s dng ton t chm
(.), hay cn c gi l ton t thnh vin.
Cc gi tr ca mt bin cu trc c th c gn cho mt bin khc c cng kiu bng cch s
dng cu lnh gn n gin.
C th c mt cu trc nm trong mt cu trc khc. Tuy nhin mt cu trc khng th lng trong
chnh n.
Mt bin cu trc c th c truyn vo mt hm nh l mt itham s.
Cch ci ts dng thng dng nht ca cu trc l di hnh thc cc mng cu trc.
Ton t -> c s dng truy cp vo cc phn t ca mt cu trc thng qua mt con tr tr
n cu trc .
Mt kiu d liu mi c th c nh ngha bng t kha typedef.
Hai k thutphng php dng sp xp mt mng l bubble sort v insertion sort.
Trong bubble sort, gi tr ca cc phn t c so snh vi gi tr ca phn t k tip. Trong
phng php ny, cc phn t nh hn ni ln dn, v cui cng mng s c sp xp.
Trong insertion sort, ta xt mi phn t trong mng s c xem xt, v chn vo v tr ng ca
n gia cc phn t c sp xp.

240

Lp trnh c bn C

Kim tra tin hc tp


1. Mt __________ nhm mt s mcu d liu li vi nhau, cc mcu d liu ny khng cnnht
thit phi c cng kiu.
2. Cc phn t ca cu trc c tham chiutruy cp n thng qua vic s dng _________.
3. Cc gi tr ca mt bin cu trc c th c gn cho mt bin khc c cng kiu bng cch s
dng cu lnh gn n gin.
(ng / Sai)
4. Khng th c mt cu trc nm trong mt cu trc khc.

(ng / Sai)

5. Mt kiu d liu mi c th c nh ngha s dng t kha _________.


6. Trong bubble sort, cc phn t ______________ c so snh.
7. Trong insertion sort, nu mt phn t cha c sp xp phi c t vo mt v tr c sp
xp no , th cc gi tr ny s c trao i vi nhau.
(ng / Sai)

Cc Kiu d liu Nng cao v Sp xp

241

Bi tp t lm
1. Vit mt chng trnh C ci t mt h thng qun l kho. Hy lu tr m s, tn hng, gi c
v s lng ang c ca mi mn hng trong mt cu trc. Nhp chi tit ca 5 mn hng vo mt
mng cc cu trc v hin th tn tng mn hng v tng gi tr ca n. cui chng trnh , hy
hin th tng gi tr ca kho hng.
2. Vit mt chng trnh C lu tr cc tn v im s ca 5 sinh vin trong mt mng cu trc.
Hy sp xp mng cu trc theo th t im s gim dn. Hin th 3 im s cao nht.

242

Lp trnh c bn C

You might also like