CẤU TRÚC DỮ LIỆU KIỂU MẢNG (ARRAY)

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2013): Phần 1 (Trang 40 - 41)

Có thể nói, mảng là cấu trúc dữ liệu căn bản và được sử dụng rộng rãi nhất trong tất cả các ngôn ngữ lập trình. Một mảng là 1 tập hợp cố định các thành phần có cùng 1 kiểu dữ liệu, được lưu

trữ kế tiếp nhau và có thể được truy cập thông qua một chỉ số. Ví dụ, để truy cập tới phần tử thứ i của mảng a, ta viết a[i]. Chỉ số này phải là số nguyên không âm và nhỏ hơn kích thước của mảng (số

phần tử của mảng). Trong chương trình, chỉ số này không nhất thiết phải là các hằng số hoặc biến số, mà có thể là các biểu thức hoặc các hàm.

a1 a2 ... ai ai+1 ... an

Lưu ý rằng cấu trúc của bộ nhớ máy tính cũng được tổ chức thành các ô nhớ, và cũng có thể

truy cập ngẫu nhiên thông qua các địa chỉ. Do vậy, việc lưu trữ dữ liệu trong mảng có sự tương thích

hoàn toàn với bộ nhớ máy tính, trong đó có thể coi toàn bộ bộ nhớ máy tính như 1 mảng, và địa chỉ

các ô nhớ tương ứng như chỉ số của mảng. Chính vì sự tương thích này mà việc sử dụng cấu trúc dữ

liệu mảng trong các ngôn ngữ lập trình có thể làm cho chương trình hiệu quả hơn và chạy nhanh hơn.

Mảng có thể có nhiều hơn 1 chiều. Khi đó, số các chỉ số của mảng sẽ tương ứng với số chiều. Chẳng hạn, trong mảng 2 chiều a, thành phần thuộc cột i, hàng j được viết là a[i][j]. Mảng 2 chiều còn được gọi là ma trận (matrix).

a11 a21 ... ai1 ai+11 ... am1 a12 a22 ... ai2 ai+12 ... am2 ... ... ... ... ... ... ... a1j a2j ... aij ai+1j ... amj a1j+1 a2j+1 ... aij+1 ai+1j+1 ... amj+1 ... ... ... ... ... ... ... a1n a2n ... ain ai+1n ... amn

Như đã nói ở trên, mảng là cấu trúc dữ liệu dễ sử dụng, tốc độ truy cập cao. Tuy nhiên, nhược

điểm chính của mảng là không linh hoạt về kích thước. Nghĩa là khi ta đã khai báo 1 mảng thì kích

thước của nó là cố định, không thể thay đổi trong quá trình thực hiện chương trình. Điều này rất bất tiện khi ta chưa biết trước số phần tử cần xử lý. Nếu khai báo mảng lớn sẽ tốn bộ nhớ và ảnh hưởng

đến hiệu suất của chương trình. Nếu khai báo mảng nhỏ sẽ dẫn đến thiếu bộ nhớ. Ngoài ra, việc bố trí lại các phần tử trong mảng cũng khá phức tạp, bởi vì mỗi phần tử đã có vị trí cố định trong mảng, và

để bố trí 1 phần tử sang 1 vị trí khác, ta phải tiến hành “dồn” các phần tử có liên quan.

Trong phần tiếp theo, chúng ta sẽ xem xét một cấu trúc dữ liệu khác, cũng cho phép lưu trữ 1 tập các phần tử, nhưng có kích thước và cách bố trí linh hoạt hơn. Đó là cấu trúc dữ liệu danh sách liên kết.

3.2DANH SÁCH LIÊN KẾT 3.2.1 Khái niệm

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2013): Phần 1 (Trang 40 - 41)