You are on page 1of 30

Mng - Array

Mng Array

Mt s tnh cht
Khai bo mng trong C
Truy xut cc thnh phn
Truyn tham s kiu mng cho hm
Mt s thao tc c s
Mng nhiu chiu

Mng Mt s tnh cht

Mng l mt kiu d liu c cu trc do ngi lp


trnh nh ngha
Dng biu din cc i tng d liu dng mt
dy cc thnh phn c cng kiu vi nhau kiu c
s
NNLT C lun ch nh mt khi nh lin tc cho
mt bin kiu mng
Kch thc ca mng c xc nh ngay khi khai
bo v khng bao gi thay i

Mng Khai bo trong C


kiucs TnBin[Sthnhphn];
kiu ca mi thnh phn

hng s, s thnh phn


ti a ca mng

do lp trnh vin t tn

int

a[100];

//a l mng biu din dy gm 100 thnh phn int

Mng V d
#define
#define SIZE
SIZE
int
int

a[5];
a[5];

10
10
//
// aa dy
dy gm
gm 55 s
s nguyn
nguyn

long
long int
int big[100];
big[100];//
// big:
big: chim
chim 400
400 bytes!
bytes!
double
double

d[100];
d[100];

long
long double
double

//
// d:
d: chim
chim 800
800 bytes!
bytes!

v[SIZE];//
v[SIZE];// v:10
v:10 long
long doubles
doubles

Mng V d
int
int
double
double
short
short
long
long

a[5]
a[5]
d[100]
d[100]
primes[]
primes[]
b[50]
b[50]

==
==
==
==

{{
{{
{{
{{

khi to cho
5 thnh phn

10,
10, 20,
20, 30,
30,
1.5,
1.5, 2.7};
2.7};
1,
1, 2,
2, 3,
3, 5,
5,
00 };
};

Trnh bin dch xc


nh kch thc
gm 7 thnh phn

40,
40, 50};
50};
7,
7, 11,
11, 13};
13};

cch nhanh nht


khi to tt c cc
thnh phn bng 0

2 thnh phn
u tin c
khi to, phn
cn li: 0

Mng Truy xut cc phn t

Cc thnh phn ca mng c truy xut thng qua ch s


ca chng 0..n-1
Thao tc truy xut khng kim tra gii hn ca ch s
int
int main()
main()
{{
int
int a[6];
a[6];
int
int ii == 7;
7;
a[0]
a[0] == 59;
59;
a[5]
a[5] == -10;
-10;
a[i/2]
a[i/2] == 2;
2;
a[6]
a[6] == 0;
0;
a[-1]
a[-1] == 5;
5;
return
return 0;
0;
}}

0
1
2
3
4
5

Truyn tham s Mng cho hm

Tham s kiu mng c truyn cho hm chnh l a ch


ca phn t u tin trn mng
S thnh phn trong tham s mng c th trng.
S thnh phn thc s c s dng phi truyn qua mt
tham s khc (vd: size)
int
int add_elements(int
add_elements(int a[],
a[], int
int size)
size)
{{
int
int add_elements(int
add_elements(int *p,
*p, int
int size)
size)
{{

V d
#include
#include <stdio.h>
<stdio.h>
void
voidsum(long
sum(long [],
[], int);
int);
int
int main(void)
main(void) {{
long
long primes[6]
primes[6] == {{ 1,
1, 2,
2,
3,
3, 5,
5, 7,
7, 11
11 };
};
sum(primes,
sum(primes, 6);
6);
printf("%li\n",
printf("%li\n", primes[0]);
primes[0]);
return
return 0;
0;
}}
void
voidsum(long
sum(long a[],
a[], int
int sz)
sz) {{
int
int i;
i;
long
long total
total == 0;
0;
for(i
for(i == 0;
0; ii << sz;
sz; i++)
i++)
total
total +=
+= a[i];
a[i];
a[0]
a[0] == total;
total;
}}

primes
1
2
3
5
7
11
a
sz

dng kim tra


gii hn ch s
tng c lu vo
phn t u tin

Mt s thao tc c s

Nhp
Xut
Thm mt thnh phn d liu
Loi b mt thnh phn d liu
Tm kim
Sp xp

Mng Nhp d liu


void
void ReadData(int
ReadData(int a[],
a[], int
int size)
size)
{{
duyt qua tt c cc
int
int i;
i;
phn t

}}

for(i
for(i == 0;
0; ii << size;
size; i++)
i++)
{{
printf(Nhap
printf(Nhap thanh
thanh phan
phan %d:
%d: ,
, i);
i);
scanf(%d,
scanf(%d, &a[i]);
&a[i]);
}}
nhp d liu cho a[i]

Mng Xut d liu ra mn hnh


void
void WriteData(int
WriteData(int a[],
a[], int
int size)
size)
{{
int
int i;
i;

}}

for(i
for(i == 0;
0; ii << size;
size; i++)
i++)
printf(%d
printf(%d ,
, a[i]);
a[i]);
printf(\n);
printf(\n);

Mng Nhp xut d liu


#include
#include <stdio.h>
<stdio.h>

void
void ReadData(int
ReadData(int [],
[], int
int );
);
void
void WriteData(int
WriteData(int [],
[], int
int );
);
int
int main()
main()
{{
int
int a[100],
a[100], n;
n;

}}

printf(Nhap
printf(Nhap so
so thanh
thanh phan
phan cua
cua day:
day: );
);
scanf(%d,
scanf(%d, &n);
&n);
printf(Nhap
printf(Nhap cac
cac thanh
thanh phan
phan cua
cua day:
day: );
);
ReadData(a,
ReadData(a, n);
n);
printf(Day
printf(Day vua
vua nhap:
nhap: \n);
\n);
WriteData(a,
WriteData(a, n);
n);
return
return 0;
0;

Mng Tm v tr X trong dy

Bi ton: Tm v tr X trn mng a ang c N thnh phn.


Gii php: Tm tun t

//input:
//input: dy
dy
//output:
//output: V
V

(a,
(a,
tr
tr

N),
N),
ca
ca

XX
X,
X, -1
-1 nu
nu khng
khng c
c

int
Search(int
int
Search(int a[],
a[], int
int N,
N, int
int X)
X)
{{
for
for (int
(int ii == 0;
0; ii << N;
N; ii ++)
++)
if
if (a[i]
(a[i] ==
== X)
X)
return
return i;
i;
return
return -1;
-1;
}}

Mng Thm mt thnh phn d liu

Bi ton: cn thm thnh phn d liu X vo mng a


ang c N thnh phn.
Hai trng hp cn xem xt:
Dy cha c th t
Thm X vo cui a.
Dy c th t
Tm v tr thch hp, chn X vo

Mng Thm X vo cui dy


Thm 15 vo (a, 7)
0

1
2

N=8
7

a[N]
a[N] == X;
X;
1
NX
N ++;
++;
5

Mng Chn X vo dy tng dn


Chn 6 vo (a, 7)
0

1
2

1
5

N=8
7
X

6
V tr thch hp: 4

pos
7

Mng Chn X vo dy tng dn


//input:
//input: dy
dy (a,
(a, N)
N) tng
tng dn,
dn, XX
//output:
//output: dy
dy (a,
(a, N)
N)
c
c XX ng
ng v
v tr
tr

void
void insert(int
insert(int mang[],
mang[], int
int *N,
*N, int
int X)
X)
{{
int
int pos=
pos= *N
*N -1;
-1;
while
while (pos
(pos >=
>= 00 &&
&& mang[pos]>X)
mang[pos]>X) {{
mang[pos+1]
mang[pos+1] == mang[pos];
mang[pos];
pos--;
pos--;
}}
mang[pos+1]
mang[pos+1] == X;
X;
*N
*N == *N
*N ++ 1;
1;
}}

Mng Loi b mt thnh phn d liu

Bi ton: loi b thnh phn d liu X ra khi


mng a ang c N thnh phn.
Hng gii quyt: xc nh v tr ca X, nu tm
thy th dn cc phn t pha sau ln lp vo
ch trng. 2 trng hp:
Dy khng c th t: lp phn t cui ln
Dy th t: di tt c cc phn t sau v
tr ca X ln trc 1 v tr.

Mng Loi b X ra khi dy tng


Loi 5 khi (a, 8)
pos
0
1
2

1
5

STOP

N=7
8
X
Tm v tr ca 5

Ok, found

Dn cc v tr 4, 5, 6, 7 ln

Mng Loi b X ra khi dy tng


//input:
//input: dy
dy (a,
(a, N),
N),
//output:
//output: dy
dy (a,
(a, N)
N)

XX

loi
loi b
b 11 thnh
thnh phn
phn XX

int
Remove(int
int
Remove(int a[],
a[], int
int *N,
*N, int
int X)
X)
{{
int
int pos
pos == Search(a,
Search(a, *N,
*N, X);
X);
if
if (pos
(pos ==
== -1)
-1) //khng
//khng c
c XX trong
trong dy
dy
return
return 0;
0;
*N
*N == *N-1;
*N-1;
for
for (;
(; (pos
(pos << *N);
*N); pos
pos ++)
++)
a[pos]
a[pos] == a[pos
a[pos ++ 1];
1];
return
return 1;
1;
}}

Mng Sp xp

Bi ton: Sp xp cc thnh phn ca (a, N) thu


c dy tng dn
Gii php: Tm cch loi b tt c cc v tr sai trong
dy
Thut ton sp xp i ch trc tip
Thut ton ni bt - Bubble sort
Thut ton Selection Sort

Mng Sp xp i ch
1
1
1
2
i

j
2

1
5

Mng Sp xp i ch
1

2
1
2

j
3

1
5

Mng Sp xp i ch
1

4
1
2

j
4

1
5

Mng Sp xp i ch
1

5
1
2

j
5

1
5

Mng Sp xp i ch
1

1
2

1
5

Mng Sp xp i ch
void
void Swap(int
Swap(int *x,
*x, int
int *y)
*y)
{{
int
int tt == *x;
*x; *x
*x == *y;
*y; *y
*y == t;
t;
}}
void
void InterchangeSort(int
InterchangeSort(int a[],
a[], int
int N)
N)
{{
int
int i,
i, j;
j;
for
for (i
(i == 00 ;; i<N-1
i<N-1 ;; i++)
i++)
for
for (j
(j =i+1;
=i+1; jj << NN ;; j++)
j++)
if(a[j]<
if(a[j]< a[i])
a[i])
Swap(&a[i],&a[j]);
Swap(&a[i],&a[j]);
}}

Mng nhiu chiu

C khng h tr mng nhiu chiu. Tuy nhin c th tip


cn theo hng: Mng 2 chiu l mng mt chiu m mi
thnh phn ca n l mt mng mt chiu.

float
float

short
short

rainfall[12][365];
rainfall[12][365];

rainfall l mng gm 12
thnh phn, mi thnh phn l
mng gm 365 s float

exam_marks l mng gm
exam_marks[500][10];
exam_marks[500][10]; 500 thnh phn, mi thnh
phn l mng 10 s short

const
const int
int brighton
brighton == 7;
7;
int
int day_of_year
day_of_year == 238;
238;
rainfall[brighton][day_of_year]
rainfall[brighton][day_of_year] == 0.0F;
0.0F;

Tng kt

Khai bo mng trong C


Truy xut cc phn t
Truyn tham s kiu mng cho hm
Cc thao tc: nhp, xut, thm/hy 1 thnh phn,
tm kim, sp xp
Mng nhiu chiu

You might also like