Chỉ mục (Index): Mỗi vị trí của một phần tử trong một mảng có một chỉ mục số được sử dụng để nhận diện phần tử.. Mảng gồm các bản ghi có kiểu giống nhau, có kích thước cố định, mỗi phầ[r]
(1)Cấu trúc liệu mảng Cấu trúc liệu mảng gì?
Mảng (Array) cấu trúc liệu cũ quan trọng Mảng lưu giữ số phần tử cố định phần tử có kiểu Hầu hết cấu trúc liệu sử dụng mảng để triển khai giải thuật Dưới khái niệm quan trọng liên quan tới Mảng
Phần tử: Mỗi mục lưu giữ mảng gọi phần tử.
Chỉ mục (Index): Mỗi vị trí phần tử mảng có mục số sử dụng để nhận diện phần tử
Mảng gồm ghi có kiểu giống nhau, có kích thước cố định, phần tử xác định số
Mảng cấu trúc liệu cấp phát lien tục Ưu điểm mảng:
Truy câp phần tử với thời gian số O(1) Sử dụng nhớ hiệu
Tính cục nhớ Nhược điểm
Không thể thay đổi kích thước mảng chương trình dang thực Mảng động
Mảng động (dynamic aray): cấp phát nhớ cho mảng cách động trình chạy chương trình C malloc calloc, C++ new
Sử dụng mảng động ta bắt đầu với mảng có phàn tử, số lượng phàn tử vượt qua khả ảng ta gấp đơi kích thước mảng cuc copy phàn tử mảng cũ vào nửa đầu mảng
Ưu điểm: tránh lãng phí nhớ phải khai báo mảng có kích thước lớn từ đầu Nhược điểm:
+ phải thực them thao tác copy phần tử thay đổi kích thước + số thời gian thực thao tác khơng cịn số
Biểu diễn Cấu trúc liệu mảng
(2)Hình minh họa phần tử mục:
Dưới số điểm cần ghi nhớ cấu trúc liệu mảng:
Chỉ mục bắt đầu với
Độ dài mảng 10, nghĩa mảng lưu giữ 10 phần tử
Mỗi phần tử truy cập thơng qua mục phần tử Ví dụ, lấy giá trị phần tử mục 27
Phép toán hỗ trợ mảng
Dưới hoạt động hỗ trợ mảng:
Duyệt: In tất phần tử mảng theo cách in phần tử Chèn: Thêm phần tử vào mảng mục cho
Xóa: Xóa phần tử từ mảng mục cho
Tìm kiếm: Tìm kiếm phần tử sử dụng mục hay giá trị Cập nhật: Cập nhật giá trị phần tử mục
Trong ngơn ngữ C, mảng khởi tạo với kích cỡ ban đầu, gán giá trị mặc định cho phần tử mảng theo thứ tự sau:
Kiểu liệu Giá trị mặc định
bool false
char
int
float 0.0
double 0.0f
void
(3)Hoạt động chèn phần tử vào mảng
Hoạt động chèn để chèn nhiều phần tử liệu vào mảng Tùy theo yêu cầu, phần tử chèn vào vị trí đầu, vị trí cuối vị trí mục cho mảng
Phần triển khai hoạt động chèn ví dụ thực Trong ví dụ này, chèn liệu vào cuối mảng
Ví dụ
Giả sử LA mảng tuyến tính khơng có thứ tự có N phần tử K số nguyên dương thỏa mãn K <= N Dưới giải thuật chèn phần tử A vào vị trí thứ K mảng LA
Giải thuật 1 Bắt đầu 2 Gán J=N 3 Gán N = N+1
4 Lặp lại bước J >= K 5 Gán LA[J+1] = LA[J]
6 Gán J = J-1
7 Gán LA[K] = ITEM 8 Kết thúc
Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>
main() {
int LA[] = {1,3,5,7,8}; int item = 10, k = 3, n = 5; int i = 0, j = n;
printf("Danh sach phan tu mang ban dau:\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]); }
(4)
while( j >= k){ LA[j+1] = LA[j]; j = j - 1;
}
LA[k] = item;
printf("Danh sach phan tu cua mang sau hoat dong chen:\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]); }
}
Biên dịch chạy chương trình C cho kết quả:
Hoạt động xóa phần tử từ mảng
Hoạt động xóa xóa phần tử tồn từ mảng tổ chức lại phần tử cịn lại mảng
Ví dụ
Giả sử LA mảng tuyến tính có N phần tử K số ngun dương thỏa mãn K <= N Dưới thuật tốn để xóa phần tử có mảng LA vị trí K
Giải thuật 1 Bắt đầu 2 Gán J=K
(5)5 Gán J = J+1 6 Gán N = N-1 7 Kết thúc
Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>
main() {
int LA[] = {1,3,5,7,8}; int k = 3, n = 5;
int i, j;
printf("Danh sach phan tu mang ban dau:\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]); }
j = k;
while( j < n){ LA[j-1] = LA[j]; j = j + 1;
}
n = n -1;
printf("Danh sach phan tu mang sau hoat dong xoa:\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]); }
}
(6)Hoạt động tìm kiếm
Bạn thực hoạt động tìm kiếm phần tử mảng dựa vào giá trị hay mục phần tử
Ví dụ
Giả sử LA mảng tuyến tính có N phần tử K số nguyên dương thỏa mãn K <= N Dưới giải thuật để tìm phần tử ITEM sử dụng phương pháp tìm kiếm (hay tìm kiếm tuyến tính)
Giải thuật 1 Bắt đầu 2 Gán J=0
3 Lặp lại bước J < N
4 Nếu LA[J] ITEM THÌ TỚI BƯỚC 6 5 Gán J = J +1
6 In giá trị J, ITEM 7 Kết thúc
Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>
main() {
int LA[] = {1,3,5,7,8}; int item = 5, n = 5; int i = 0, j = 0;
printf("Danh sach phan tu mang ban dau:\n");
for(i = 0; i<n; i++) {
(7)
while( j < n){
if( LA[j] == item ){ break;
}
j = j + 1; }
printf("Tim thay phan tu %d tai vi tri %d\n", item, j+1); }
Biên dịch chạy chương trình C cho kết quả:
Hoạt động cập nhật (Hoạt động update)
Hoạt động cập nhật update giá trị phần tử tồn mảng mục cho
Giải thuật
Giả sử LA mảng tuyến tính có N phần tử K số nguyên dương thỏa mãn K <= N Dưới giải thuật để update giá trị phần tử vị trí K mảng LA
1 Bắt đầu
2 Thiết lập LA[K-1] = ITEM 3 Kết thúc
Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>
main() {
int LA[] = {1,3,5,7,8}; int k = 3, n = 5, item = 10; int i, j;
(8)printf("Danh sach phan tu mang ban dau:\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]); }
LA[k-1] = item;
printf("Danh sach phan tu mang sau hoat dong update:\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]); }
}