Cơ sở dữ liệu - Mảng dữ liệu
Bạn đang xem tài liệu "Cơ sở dữ liệu - Mảng dữ liệu", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- co_so_du_lieu_mang_du_lieu.pdf
Nội dung text: Cơ sở dữ liệu - Mảng dữ liệu
- NMLTNMLT MMҦҦNGNG DDӲӲ LILIӊӊUU Trҫn Phѭӟc Tuҩn tranphuoctuan.khoatoan.dhsp@gmail.com MMҧҧngng –– ArrayArray Mӝt sӕ tính chҩt Khai báo mҧng trong C Truy xuҩt các thành phҫn TruyӅn tham sӕ kiӇu mҧng cho hàm Mӝt sӕ thao tác cѫ sӣ Mҧng nhiӅu chiӅu NHҰP MÔN LҰP TRÌNH 12/23/2009 2
- MMҧҧngng –– Mӝt sӕ tínhnh chchҩtt Mҧng là mӝt kiӇu dӳ liӋu có cҩu trúc do ngѭӡi lұp trình ÿӏnh nghƭa Dùng biӇu diӉn các ÿӕi tѭӧng dӳ liӋu ӣ dҥng mӝt dãy các thành phҫn có cùng kiӇu vӟi nhau – kiӇu cѫ sӣ NNLT C luôn chӍ ÿӏnh mӝt khӕi nhӟ liên tөc cho mӝt biӃn kiӇu mҧng Kích thѭӟc cӫa mҧng ÿѭӧc xác ÿӏnh ngay khi khai báo và không bao giӡ thay ÿәi NHҰP MÔN LҰP TRÌNH 12/23/2009 3 MMҧҧngng –– Khai báoo trongtrong CC typedef kiӅucѪsӡ TênkiӅu[Sӓthànhphҩn]; kiӇu cӫa mӛi thành phҫn hҵng sӕ, sӕ thành phҫn tӕi ÿa cӫa mҧng do lұp trình viên ÿһt tên typedef int AINT[100]; //AINT là ki͋u m̫ng bi͋u di͍n dãy g͛m 100 thành ph̯n int AINT a; //a: bi͆n ki͊u AINT NHҰP MÔN LҰP TRÌNH 12/23/2009 4
- MMҧҧngng –– Ví dө #define#define SIZE SIZE 1010 intint a[5];a[5]; //a//adãydãy ggӕӕmm 55 ssӓӓ nguyênnguyên longlong int int big[100]; big[100]; // // big: big: chichiӁӁmm 400 400 bytes!bytes! doubledouble d[100];d[100]; // // d: d: chi chiӁӁmm 800 800 bytes!bytes! longlong doubledouble v[SIZE];// v[SIZE];// v:10 v:10 long long doublesdoubles NHҰP MÔN LҰP TRÌNH 12/23/2009 5 khӣi trӏ cho 5 MMҧҧngng –– Ví dө thành phҫn intint a[5]a[5] == {{ 10,10, 20,20, 30,30, 40,40, 50};50}; doubledouble d[100]d[100] == {{ 1.5,1.5, 2.7};2.7}; shortshort primes[]primes[] == {{ 1,1, 2,2, 3,3, 5,5, 7,7, 11,11, 13};13}; longlong b[50]b[50] == {{ 00 };}; 2 thành phҫn ÿҫu tiên ÿѭӧc compiler xác ÿӏnh khӣi trӏ, phҫn kích thѭӟc gӗm 7 còn lҥi: 0 thành phҫn cách nhanh nhҩt ÿӇ khӣi trӏ Wҩt cҧ các intint ii = = 7;7; thành phҫn bҵng 0 constconst int int c c == 5;5; intint a[i];a[i]; doubledouble d[c];d[c]; shortshort primes[];primes[]; NHҰP MÔN LҰP TRÌNH 12/23/2009 6
- MMҧҧngng –– Truy xuҩtt ccácc phphҫn tӱ Các thành phҫn cӫa mҧng ÿѭӧc truy xuҩt thông qua chӍ sӕ cӫa chúng 0 size-1 Thao tác truy xuҩt không kiӇm tra giӟi hҥn cӫa chӍ sӕ intint main() main() a {{ 0 int a[6]; int a[6]; 1 intint ii == 7;7; a[0]a[0] == 59;59; 2 a[5]a[5] == -10;-10; 3 a[i/2]a[i/2] == 2;2; 4 a[6]a[6] == 0;0; 5 a[-1]a[-1] == 5;5; returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 7 TruyӅӅn tham sӕ MMҧng cho hààm Tham sӕ kiӇu mҧng ÿѭӧc truyӅn cho hàm chính là ÿӏa chӍ cӫa phҫn tӱ ÿҫu tiên trên mҧng Sӕ thành phҫn trong tham sӕ mҧng có thӇ ÿӇ trӕng. Sӕ thành phҫn thӵc sӵ ÿѭӧc sӱ dөng phҧi truyӅn qua mӝt tham sӕ khác (vd: size) intint add_elements(int add_elements(int a[], a[], int int size) size) {{ intint add_elements(int add_elements(int *p, *p, int int size) size) {{ NHҰP MÔN LҰP TRÌNH 12/23/2009 8
- Ví dө Ví dө primes #include#include 1 void sum(long [], int); void sum(long [], int); 2 intint main(void) main(void) {{ 3 longlong primes[6] primes[6] == {{ 1,1, 2,2, 3,3, 5,5, 7,7, 1111 };}; 5 sum(primes,sum(primes, 6);6); 7 printf("%li\n", primes[0]); printf("%li\n", primes[0]); 11 returnreturn 0;0; }} a voidvoid sum(long sum(long a[],a[], int int sz)sz) {{ sz 6 intint i;i; longlong total total == 0;0; dùng ÿӇ kiӇm tra for(ifor(i == 0;0; ii << sz; sz; i++)i++) giӟi hҥn chӍ Vӕ totaltotal +=+= a[i];a[i]; a[0] = total; Wәng ÿѭӧc lѭu vào a[0] = total; phҫn tӱ ÿҫu tiên }} NHҰP MÔN LҰP TRÌNH 12/23/2009 9 MMӝӝtt ssӕӕ thaothao ttáácc ccѫѫ ssӣӣ Nhұp Xuҩt Thêm mӝt thành phҫn dӳ liӋu Loҥi bӓ mӝt thành phҫn dӳ liӋu Tìm kiӃm Sҳp xӃp NHҰP MÔN LҰP TRÌNH 12/23/2009 10
- MMҧҧngng –– Nhұpp ddӳ liӋӋu voidvoid ReadData(int ReadData(int a[], a[], int int size)size) { { duyӋt qua tҩt cҧ các intint i; i; phҫn tӱ for(ifor(i == 0;0; ii << size; size; i++) i++) {{ printf(“Nhapprintf(“Nhap thanhthanh phanphan %d:%d: ”,”, i);i); scanf(“%d”,scanf(“%d”, &a[i]);&a[i]); }} }} nhұp dӳ liӋu cho a[i] NHҰP MÔN LҰP TRÌNH 12/23/2009 11 MMҧҧngng –– Xuҩt dӳ liӋӋu ra màn hìnhnh voidvoid WriteData(int WriteData(int a[], a[], int int size)size) {{ intint i; i; for(ifor(i == 0;0; ii << size; size; i++) i++) printf(“%dprintf(“%d ”,”, a[i]);a[i]); printf(“\n”);printf(“\n”); }} NHҰP MÔN LҰP TRÌNH 12/23/2009 12
- MMҧҧngng –– Nhұpp xuxuҩtt ddӳ liliӋuu #include#include voidvoid ReadData(int ReadData(int [],[], intint );); voidvoid WriteData(int WriteData(int [],[], intint );); voidvoid main() main() {{ intint a[100], a[100], n;n; clrscr();clrscr(); printf(“Nhapprintf(“Nhap soso thanhthanh phanphan cuacua day:day: “);“); scanf(“%d”,scanf(“%d”, &n);&n); printf(“Nhapprintf(“Nhap caccac thanhthanh phanphan cuacua day:day: “);“); ReadData(a,ReadData(a, n);n); printf(“Dayprintf(“Day vuavua nhap:nhap: \n“);\n“); WriteData(a,WriteData(a, n);n); }} NHҰP MÔN LҰP TRÌNH 12/23/2009 13 MMҧҧngng –– Tìm vӏ trtrí X trong dãy Bài toán: Tìm vӏ trí X trên mҧng a ÿang có N thành phҫn. Giҧi pháp: Tìm tuҫn tӵ //input://input: dãydãy (a,(a, N),N), XX //output://output: VV͔͔ trítrí c cͰͰaa X,X, -1-1 nn͈͈uu khôngkhông cócó intint Search(intSearch(int a[],a[], intint N,N, intint X)X) {{ forfor (int(int ii == 0;0; ii << N;N; ii ++)++) ifif (a[i](a[i] === X)X) returnreturn i;i; returnreturn 1;1; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 14
- MMҧҧngng –– ThêmThêm mmӝt thànhnh phphҫn dӳ liӋu Bài toán: cҫn thêm thành phҫn dӳ liӋu X vào mҧng a ÿang có N thành phҫn. Hai trѭӡng hӧp cҫn xem xét: Dãy chѭa có thӭ tӵ Æ Thêm X vào cuӕi a. Dãy ÿã có thӭ tӵ Æ Tìm vӏ trí thích hӧp, chèn X vào NHҰP MÔN LҰP TRÌNH 12/23/2009 15 MMҧҧngng –– ThêmThêm XX vvàào cuӕii dãydãy Thêm 15 vào (a, 7) 01234567 12 2 8 5 1 6 4 N = 78 a[N]a[N] == X;X; 15 NXN ++;++; NHҰP MÔN LҰP TRÌNH 12/23/2009 16
- MMҧҧngng –– ChChèn X vào dãy tăăngng ddҫnn Chèn 6 vào (a, 7) pos 01234567 1 2 4 5 8 12 15 N = 78 X 6 9ӏ trí thích hӧp: 4 NHҰP MÔN LҰP TRÌNH 12/23/2009 17 MMҧҧngng –– Chèn X vàào dãy tăng dҫnn //input://input: dãydãy (a,(a, N)N) WăWăngng dd̰̰n,n, XX //output://output: dãydãy (a,(a, N)N) ÿÿãã cócó X X ͨͨ ÿÿúngúng vv͔͔ trítrí voidvoid Insert(intInsert(int a[],a[], intint &N,&N, intint X)X) {{ intint pos;pos; forfor (pos(pos == N;N; (pos>0)&&(a[pos(pos>0)&&(a[pos-1]>X);-1]>X); pospos )) a[pos]a[pos] == a[posa[pos ––1]; 1]; a[pos]a[pos] == X;X; NN ++;++; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 18
- MMҧҧngng –– LoLoҥi bӓ mmӝtt ththành phҫҫn dӳ liӋӋu Bài toán: loҥi bӓ thành phҫn dӳ liӋu X ra khӓi mҧng a ÿang có N thành phҫn. +ѭӟng giҧi quyӃt: xác ÿӏnh vӏ trí cӫa X, nӃu tìm thҩy thì dӗn các phҫn tӱ ӣ phía sau lên ÿӇ lҩp vào chӛ trӕng. 2 trѭӡng hӧp: Dãy không có thӭ tӵ: lҩp phҫn tӱ cuӕi lên Dãy ÿã thӭ tӵ: dӡi tҩt cҧ các phҫn tӱ ӣ sau ví trí cӫa X lên trѭӟc 1 vӏ trí. NHҰP MÔN LҰP TRÌNH 12/23/2009 19 MMҧҧngng –– LoLoҥi bӓ XX rara khkhӓii dãydãy ttăăngng Loҥi 5 khӓi (a, 8) pos 01234567 12 2 8 5 1 6 4 15 N = 87 STOP X 5 Ok, found Tìm vӏ trí cӫa 5 'ӗn các vӏ trí 4, 5, 6, 7 lên NHҰP MÔN LҰP TRÌNH 12/23/2009 20
- MMҧҧngng –– Loҥi bӓ XX rara khkhӓii dãydãy ttăng //input://input: dãydãy (a,(a, N),N), XX //output://output: dãydãy (a,(a, N)N) ÿÿãã lolo̪̪ii bb͘͘ 11 thànhthành phph̰̰nn XX intint Remove(intRemove(int a[],a[], intint &N,&N, intint X)X) {{ intint pospos == Search(a,Search(a, N,N, X);X); ifif (pos(pos === 1)1) //không//không ccóó X X trongtrong dãydãy returnreturn 0;0; NN ;; forfor (;(; (pos(pos << N);N); pospos ++)++) a[pos]a[pos] == a[posa[pos ++ 1];1]; returnreturn 1;1; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 21 MMҧҧngng –– Sҳpp xxӃӃp Bài toán: Sҳp xӃp các thành phҫn cӫa (a, N) ÿӇ thu ÿѭӧc dãy tăng dҫn Giҧi pháp: Tìm cách triӋt tiêu tҩt cҧ các nghӏch thӃ cӫa dãy Æ Thuұt toán sҳp xӃp Ĉәi chә trӵc tiӃp NHҰP MÔN LҰP TRÌNH 12/23/2009 22
- MMҧҧngng –– Sҳpp xxӃӃp ÿәi chәә j 12345678 1212 8 5 1 6 4 15 i NHҰP MÔN LҰP TRÌNH 12/23/2009 23 MMҧҧngng –– SSҳҳpp xxӃӃpp ÿÿәәii chchәә j 12345678 1 1228 5 2 6 4 15 i NHҰP MÔN LҰP TRÌNH 12/23/2009 24
- MMҧҧngng –– SSҳҳpp xxӃӃpp ÿÿәәii chchәә j 12345678 1 2 1248 5 6 4 15 i NHҰP MÔN LҰP TRÌNH 12/23/2009 25 MMҧҧngng –– SSҳҳpp xxӃӃpp ÿÿәәii chchәә j 12345678 1 2 4 1258 6 5 15 i NHҰP MÔN LҰP TRÌNH 12/23/2009 26
- MMҧҧngng –– SSҳҳpp xxӃӃpp ÿÿәәii chchәә 12345678 1 2 4 5 6 8 12 15 NHҰP MÔN LҰP TRÌNH 12/23/2009 27 MMҧҧngng –– SSҳҳpp xxӃӃpp ÿÿәәii chchәә voidvoid Swap(intSwap(int &x,&x, intint &y)&y) {{ intint tt == x;x; xx == y;y; yy == t;t; }} voidvoid InterchangeSort(intInterchangeSort(int a[],a[], intint N)N) {{ intint i,i, j;j; forfor (i(i == 00 ;; i<N-1i<N-1 ;; i++)i++) forfor (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]); }} NHҰP MÔN LҰP TRÌNH 12/23/2009 28
- MMҧҧngng nhinhiӅӅuu chichiӅӅuu C không hӛ trӧ mҧng nhiӅu chiӅu. Tuy nhiên có thӇ tiӃp cұn theo hѭӟng: Mҧng 2 chiӅu là mҧng mӝt chiӅu mà mӛi thành phҫn cӫa nó là mӝt mҧng mӝt chiӅu. “rainfall” là mҧng gӗm 12 floatfloat rainfall[12][365];rainfall[12][365]; thành phҫn, mӛi thành phҫn là Pҧng gӗm 365 sӕ float “exam_marks” là mҧng gӗm shortshort exam_marks[500][10];exam_marks[500][10]; 500 thành phҫn, mӛi thành phҫn là mҧng 10 sӕ short constconst int int brightonbrighton = = 7;7; intint day_of_year day_of_year == 238;238; rainfall[brighton][day_of_year]rainfall[brighton][day_of_year] == 0.0F;0.0F; NHҰP MÔN LҰP TRÌNH 12/23/2009 29 TTóómm llѭѭӧӧcc Khai báo mҧng trong C Truy xuҩt các phҫn tӱ TruyӅn tham sӕ kiӇu mҧng cho hàm Các thao tác: nhұp, xuҩt, thêm/hӫy 1 thành phҫn, tìm kiӃm, sҳp xӃp Mҧng nhiӅu chiӅu NHҰP MÔN LҰP TRÌNH 12/23/2009 30