Mảng và xâu ký tự
Mảng và xâu 2
Nguyễn Việt Hà
Nội dung
Mảng
khai báo
cấu trúc, thao tác
Xâu ký tự
tạo xâu, nhập, xuất
một số hàm xâu
Một số thuật toán sắp xếp và tìm kiếm
Mảng và xâu 3
Nguyễn Việt Hà
Tài liệu tham khảo
C++ How to program, Chapter 7
The C programming language, Chap. 1.6,
1.9, Chap. 5
Mảng và xâu 4
Nguyễn Việt Hà
Mảng
Tập các phần tử thuộc cùng một kiểu dữ
liệu
Được sắp xếp liên tục trong bộ nhớ
kích thước là cố định
Có thể đánh chỉ số và truy cập theo thứ tự
ngẫu nhiên
C/C++: chỉ số luôn bắt đầu từ 0
Mảng và xâu 5
Nguyễn Việt Hà
Ví dụ
int main()
{
int c[12];
for (int i=0; i<12; i++) {
cin >> c[i];
}
}
Mảng và xâu 6
Nguyễn Việt Hà
Mảng và xâu 7
Nguyễn Việt Hà
Khai báo mảng
int main()
{
int a[12];
int b[] = {2, 3, 5, 7};
int c[5] = {2, 4, 8, 16};
int d[2] = {1, 2, 3}; // compile error
int m[5], i;
…
}
Mảng và xâu 8
Nguyễn Việt Hà
Kích thước mảng không cần biết trước
int main()
{
int n, max = 0;
cin >> n;
int a[n];
for (int i=0; i<n; i++) {
cin >> a[i];
if (a[max] < a[i]) max = i;
}
if (n > 0)
cout << "max number = " << a[max];
}
Mảng và xâu 9
Nguyễn Việt Hà
Mảng là tham số
Có thể truyền mảng là tham số cho một
hàm
Như là tham số biến
Hàm cần phải biết kích thước của mảng
thông qua một tham số phụ
thông qua giá trị kết thúc mảng
Mảng và xâu 10
Nguyễn Việt Hà
Ví dụ: copy mảng
void arrayCopy(int a[], int b[], int size)
{
for (int i=0; i<size; i++)
b[i] = a[i];
}
Mảng và xâu 11
Nguyễn Việt Hà
int linearSearch(int, int [], int);
int main()
{
int a[100], key;
…
cin >> key;
cout << linearSearch(key, a, 100);
}
int linearSearch(int k, int m[], int size)
{
for (int i=0; i< size; i++) {
if (k == m[i]) return i;
}
return -1;
}
Mảng và xâu 12
Nguyễn Việt Hà
Bài tập
Viết các hàm tính giá trị lớn nhất, giá trị
nhỏ nhất, giá trị trung bình của một mảng
số nguyên.
Mảng và xâu 13
Nguyễn Việt Hà
Mảng nhiều chiều
int a[8][8];
int b[2][3] = { {1, 2, 4}, {2, 3, 5} };
for (int i=0; i<2; i++)
for (int j=0; j<3; j++)
cout << b[i][j] << endl;
Bản chất là mảng một chiều
Mảng và xâu 14
Nguyễn Việt Hà
Sắp xếp và tìm kiếm
Một trong các công việc chính của các HTTT
Sắp xếp để tìm kiếm hiệu quả, vd. từ điển
Sắp xếp
đổi chỗ các phần tử tạo ra một mảng có thứ tự
sắp xếp chọn, chèn, nổi bọt, nhanh, trộn,…
Tìm kiếm
tìm kiếm nhị phân (binary search)
sử dụng thuật toán băm (hashing)