ể ữ ệ ể ữ ệ

Các ki u d li u Các ki u d li u nâng cao - nâng cao - ắ ế S p x p S p x p ắ ế

Bài 11

ụM c tiêu - M c tiêu - 11

ể ữ ệ ấ ấ

ể ấ

c a c u trúc

ầ ử ủ ấ

ở ạ

ử ụ

ử ụ

 Tìm hi u ki u d li u c u trúc và công d ng  Đ nh nghĩa c u trúc  Khai báo các bi n ki u c u trúc ế  Cách truy c p vào các ph n t ậ  Kh i t o bi n c u trúc ế ấ  S d ng bi n c u trúc trong câu l nh gán ế ấ  Cách truy n tham s c u trúc ố ấ  S d ng m ng các c u trúc ấ ả  Tìm hi u cách kh i t o m ng các c u trúc ả ở ạ

Elementary Programming with C/Session 11/ Slide 2 of 23

ụM c tiêu - 2 M c tiêu - 2

ỏ ấ

ng pháp Bubble

 Con tr c u trúc ỏ ấ  Cách truy n tham s ki u con tr c u trúc ố ể ề  Tìm hi u t khóa typedef ể ừ  S p x p m ng b ng ph ươ ả ắ ế sort và Insertion sort.

Elementary Programming with C/Session 11/ Slide 3 of 23

ấC u Trúc C u Trúc

 M t c u trúc bao g m các m u d li u, không nh t ấ c nhóm l

t cùng ki u, đ

i v i nhau.

thi

 M t c u trúc có th bao g m nhi u m u d li u nh ư ồ

ẫ ữ ệ

ẫ ữ ệ ạ ớ ề

ộ ấ ế ộ ấ

ồ ượ ể

v y.ậ

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

1

1

Bi nế

Tên sách

Tác giả

L n ầ xu t b n ấ ả

I L L U S I O N M ngả

Elementary Programming with C/Session 11/ Slide 4 of 23

ấ ấ

Đ nh Nghĩa C u ị Đ nh Nghĩa C u ị TrúcTrúc

ể ẽ ạ ữ ệ

ấ ườ ệ ị ớ ử ụ

c g i là các ph n ầ ượ ế ấ

hay thành ph n c a c u trúc c a c u trúc ọ ầ ủ ấ ử ủ ấ

Vi c đ nh nghĩa c u trúc s t o ra ki u d li u i dùng s d ng chúng đ m i cho phép ng ể khai báo các bi n ki u c u trúc . ể ấ ế Các bi n trong c u trúc đ t Ví d :ụ

struct cat {

char bk_name [25]; char author [20]; int edn; float price;

};

Elementary Programming with C/Session 11/ Slide 5 of 23

ấ ấ

ộ ấ

Khai Báo Bi n C u Trúc ế Khai Báo Bi n C u Trúc ế ượ ị ề

c đ nh nghĩa, chúng ta có ể ế ộ

t ớ ể ư ữ ấ ệ

Khi m t c u trúc đã đ th khai báo m t ho c nhi u bi n ki u này. ặ Ví d : ụ struct cat books1; Câu l nh này s dành đ vùng nh đ l u tr t ủ ẽ c các m c trong m t c u trúc. ộ ấ ả ụ

struct cat {

struct cat books1, books2; ho c ặ

char bk_name[25]; char author[20]; int edn; float price;

} books1, books2;

struct cat books1; struct cat books2; Elementary Programming with C/Session 11/ Slide 6 of 23

ậ ậ

ử ủ ử ủ

ấ ấ

Truy C p Ph n T c a C u ầ Truy C p Ph n T c a C u ầ TrúcTrúc

ầ ử ủ ấ

c a c u trúc đ ệ ử ụ này còn đ

ượ toán t c g i là ọ

c truy c p ử ấ ch m ử toán t

 Các ph n t thông qua vi c s d ng (.), toán t ượ thành viên - membership.  Cú pháp:

structure_name.element_name

 Ví d :ụ

scanf(“%s”, books1.bk_name);

Elementary Programming with C/Session 11/ Slide 7 of 23

Kh i T o C u Trúc Kh i T o C u Trúc

ở ạ ở ạ

ấ ấ

ế

 Gi ng nh các bi n khác và m ng, các bi n ế i th i ờ ể ượ

ả c kh i t o t ở ạ ạ

ư ố ki u c u trúc có th đ ể ấ đi m khai báo ể struct employee

 Các bi n ế emp1 và emp2 có ki u ể employee có

int no; { char name [20]; };

c khai báo và kh i t o nh sau: ể ượ ở ạ ư

Elementary Programming with C/Session 11/ Slide 8 of 23

th đ struct employee emp1 = {346, “Abraham”}; struct employee emp2 = {347, “John”};

ử ụ ử ụ

Câu L nh Gán S D ng Câu L nh Gán S D ng Các C u Trúc - 1 Các C u Trúc - 1

ệ ệ ấ ấ

ơ

ể ử ụ

ế

 Có th s d ng câu l nh gán đ n gi n đ gán giá tr c a m t bi n c u trúc cho ế ộ ị ủ ể m t bi n khác có cùng ki u ể ế ộ  Ch ng h n, n u ế books1 và books2 là các bi n c u trúc có cùng ki u, thì câu l nh ấ sau là h p l ợ ệ

books2 = books1;

Elementary Programming with C/Session 11/ Slide 9 of 23

ử ụ ử ụ

Câu L nh Gán S D ng Câu L nh Gán S D ng Các C u Trúc - 2 Các C u Trúc - 2

ệ ệ ấ ấ

ợ ể ườ

ng h p không th dùng câu l nh gán ệ ể ử d ngụ hàm t o s n ạ ẵ

Elementary Programming with C/Session 11/ Slide 10 of 23

Trong tr tr c ti p, thì có th s ự ế memcpy() Cú pháp: memcpy (char * destn, char &source, int nbytes); Ví d :ụ memcpy (&books2, &books1, sizeof(struct cat));

C u Trúc L ng Trong C u Trúc C u Trúc L ng Trong C u Trúc

ồ ồ

ấ ấ

ấ ấ

 M t c u trúc có th l ng trong m t c u trúc khác. Tuy

ộ ấ

ộ ấ

ể ồ

ể ồ

nhiên, m t c u trúc không th l ng trong chính nó. {

ộ ấ struct issue

char borrower [20]; char dt_of_issue[8]; struct cat books;

ng

ươ

c a c u trúc này t ầ ử ủ ấ ng khác,

}issl; ậ t ự ư ớ ấ

 Vi c truy c p vào các ph n t ệ nh v i c u trúc bình th ườ issl.borrower

c a c u trúc cat là m t ph n

ầ ử ủ ấ

 Đ truy c p vào ph n t ậ ể c a c u trúc issl , ủ ấ

Elementary Programming with C/Session 11/ issl.books.author Slide 11 of 23

ề ề

ố ể ấ ố ể ấ

Truy n tham s ki u c u Truy n tham s ki u c u trúc trúc

 Tham s c a hàm có th là m t c u

ộ ấ

ố ủ

trúc.

ươ ề ữ ệ

 Là m t ph ố ầ

ớ ả

ế

ng ti n h u d ng khi ệ mu n truy n m t nhóm các thành ph n d li u có quan h logic v i nhau thông qua m t bi n thay vì ph i ộ truy n t ng thành ph n m t ộ ả ki u c a tham s hình th c.

ầ  Ki u c a tham s th c ph i trùng v i ớ ố ự ố

ề ừ ể ủ ể ủ

Elementary Programming with C/Session 11/ Slide 12 of 23

M ng C u Trúc ấ M ng C u Trúc ấ

ả ả

ườ

ế

 M t áp d ng th ặ  M t ki u c u trúc ph i đ ả ượ ấ ể ả

ng g p là m ng c u trúc ấ ả c đ nh nghĩa c, sau đó m t bi n m ng có ki u đó ể

ộ ộ tr ướ m i đ ớ ượ

ộ c khai báo  Ví d :ụ struct cat books[50];  Đ truy c p vào thành ph n author c a ầ books: c a m ng

ậ ể th t ph n t ầ ử ứ ư ủ books[4].author

Elementary Programming with C/Session 11/ Slide 13 of 23

ở ạ ở ạ

ấ ấ

ả ả

Kh i T o Các M ng C u Kh i T o Các M ng C u Trúc Trúc

ả ượ ệ

c kh i t o b ng cách li ị t kê c a nó trong m t ộ

M ng c u trúc đ ở ạ ằ ấ danh sách các giá tr ph n t ầ ử ủ c p d u móc ấ ặ  Ví d :ụ

struct unit {

char ch; int i;

}; struct unit series [3] =

Elementary Programming with C/Session 11/ Slide 14 of 23

{{‘a’, 100}{‘b’, 200}{‘c’, 300}};

Con Tr Đ n C u Trúc Con Tr Đ n C u Trúc

ỏ ế ỏ ế

ấ ấ

ượ ặ

c tên c a bi n c u trúc.

c a m t c u trúc s d ng m t con tr c dùng đ truy c p vào các ph n ậ ộ ỏ

Con tr c u trúc đ c khai báo b ng cách đ t ằ ỏ ấ d u * tr ế ấ ủ ướ ấ Toán t -> đ ể ượ ử t ộ ấ ử ụ ử ủ Ví d :ụ struct cat *ptr_bk; ptr_bk = &books;

printf(“%s”,ptr_bk->author);

c truy n vào hàm, cho c a ầ ử ủ ượ ự ế ổ

Elementary Programming with C/Session 11/ Slide 15 of 23

Con tr c u trúc đ ỏ ấ phép hàm thay đ i tr c ti p các ph n t c u trúc. ấ

ừT Khóa typedef T Khóa typedef

c đ nh nghĩa ị ộ ữ ệ ể ượ

khóa ể ớ

ớ storage

ị typedef ữ ệ ể ộ  M t ki u d li u có th đ ể b ng cách s d ng t ử ụ ạ ộ

Elementary Programming with C/Session 11/ Slide 16 of 23

ừ  Nó không t o ra m t ki u d li u m i, mà ộ đ nh nghĩa m t tên m i cho m t ki u đã có. ớ  Cú pháp: typedef type name;  Ví d :ụ typedef float deci;  typedef không th s d ng v i ể ử ụ classes

S p x p m ng ắ ế S p x p m ng ắ ế

ả ả

 S p x p liên quan đ n vi c thay đ i v trí các ph n t ệ

ổ ị

ầ ử

ế

ế ứ ự

ư

 D li u trong m ng s d dàng tìm th y h n n u ẽ ễ

xácđ nh nh tăng d n hay gi m d n ầ ơ

ế

ả ế

theo th t ữ ệ m ng đ ả  Hai ph

c s p x p ng pháp s p x p m ng đ

c trình bày:

ượ ắ ươ

ượ

ế Bubble Sort và Insertion Sort

i cùng và ph n t

ng pháp Bubble sort, vi c so sánh b t đ u ắ ầ có giá tr nh h n s ỏ ơ ẽ

ầ ử

t ừ chuy n d n lên trên (n i b t)

ổ ọ

ng pháp Insertion sort, m i ph n t

 Trong ph ươ d ph n t ầ ử ướ ầ ể ươ

ầ ử ủ

trong c xem xét, và đ t vào v trí đúng c a nó gi a ữ ị đã đ

ượ ắ

 Trong ph m ng đ ượ ả các ph n t ầ ử

ặ c s p x p ế Elementary Programming with C/Session 11/ Slide 17 of 23

Bubble Sort Bubble Sort

Elementary Programming with C/Session 11/ Slide 18 of 23

Bubble Sort - tt Bubble Sort - tt

#include 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]

{

temp=arr_num[j]; arr_num[j]=arr_num[j-1]; arr_num[j-1]=temp;

}

}                                             Contd…..

Elementary Programming with C/Session 11/ Slide 19 of 23

Bubble Sort - tt Bubble Sort - tt

printf("\nThe sorted array"); for(i=0;i<5;i++)

printf("\n%d", arr_num[i]);

getch();

Elementary Programming with C/Session 11/ Slide 20 of 23

}

Insertion Sort Insertion Sort

Elementary Programming with C/Session 11/ Slide 21 of 23

Insertion Sort - tt Insertion Sort - tt

#include 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

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();

}

Elementary Programming with C/Session 11/ Slide 22 of 23

Insertion Sort-3 Insertion Sort-3

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*/ arrnum[x]=temp;

}

Elementary Programming with C/Session 11/ Slide 23 of 23