Nội dung lý thuyết
Mảng hai chiều là mảng một chiều mà trong đó mỗi phần tử là một mảng một chiều. Hầu hết các ngôn ngữ lập trình bậc cao đều có sẵn kiểu mảng hai chiều. Nếu cần thiết, có thể tạo ra mảng có hơn hai chiều hay còn gọi là mảng nhiều chiều.
Khai báo mảng hai chiều
Khai báo mảng hai chiều là cung cấp đủ các thông tin:
tên biến mảng
kiểu dữ liệu
kích thước (gồm hai số nguyên dương, mỗi số xác định kích thước một chiều của hình chữ nhật)
Cấu trúc mảng hai chiều
Trong bộ nhớ, mảng hai chiều được tổ chức tương tự như mảng một chiều, tức là lưu trữ thành một khối các ô nhớ liên tục.
Độ lớn của mảng: số hàng × số cột × độ dài kiểu dữ liệu
Truy cập ngẫu nhiên
Các thông tin trong khai báo mảng giúp máy tính xác định dung lượng bộ nhớ cần cho mảng.
Để truy cập một phần tử, cần biết hai chỉ số: chỉ số hàng và chỉ số cột.
Ví dụ: bangDiem[3][1]
là phần tử ở hàng thứ 3, cột thứ 1 trong mảng Hình 1b.
Các chỉ số luôn đi kèm để định vị chính xác phần tử.
Thời gian thực hiện việc đọc/gán giá trị cho một phần tử là hằng số, không phụ thuộc kích thước mảng.
Python có sẵn kiểu danh sách (list) rất linh hoạt, có thể dùng để tạo mảng một chiều, hai chiều.
Danh sách lồng nhau được khai báo và sử dụng như mảng hai chiều.
Cú pháp:
1. Khai báo danh sách rỗng làm mảng hai chiều:
Ten_danh_sach = []
2. Khai báo danh sách với cấu trúc “[]” chứa danh sách con:
Ten_danh_sach = [ [...], [...], ..., [...] ]
Ví dụ: matranThuc = [[7.5, 6.5, 5.5, 0.5, 0.9, 0.1], [6.5, 8.5, 8.0, 8.0, 0.4, 4.5]]
→ Tạo mảng hai chiều 2 hàng, 5 cột.
Trong bộ nhớ máy tính, mảng hai chiều n hàng × m cột được lưu thành dãy n×m số liên tiếp, hàng trước đến hàng sau: hàng 0 → hàng 1 → ...
Thời gian thực hiện các phép toán của mảng
Phép chèn thêm/xoá phần tử ở đầu/cuối mảng: thời gian thực hiện không vượt quá một hằng số.
Nếu mảng có độ dài bao nhiêu cũng cần dịch chuyển dữ liệu nếu không đủ chỗ.
Trường hợp không còn chỗ, phải di chuyển sang vùng nhớ mới, thời gian tỷ lệ với độ dài danh sách.
→ Trung bình cần khoảng n/2 thao tác dịch chuyển để thêm vào giữa mảng.