M ảng có thể coi là cấu trúc dữ liệu cho phép truy c ập ng ẫu nhiên thông qua ch ỉ số của chúng.[r]
Trang 1Lecturer: PhD Ngo Huu Phuc
Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com
C ấu trúc dữ liệu và giải thuật
Trang 2Bài 2 M ảng
N ội dung:
Tham kh ảo:
Deshpande Kakde – C and data structures
Trang 32.1 Khái ni ệm về mảng (1/2)
M ảng là c ấu trúc dữ liệu do người dùng định nghĩa ,
có kích thước cố định và đồng nhất
kích thước của mảng khi đang sử dụng
M ảng có thể coi là cấu trúc dữ liệu cho phép truy cập
ng ẫu nhiên thông qua chỉ số của chúng
Trang 42.1 Khái ni ệm về mảng (2/2)
Các thành ph ần của mảng được truy cập thông qua ch ỉ số ,
ch ỉ số là số nguyên để chỉ vị trí của thành phần đó trong
m ảng.
Như vậy, một mảng được hình thành bởi một cặp (value, index) ;
N ếu chỉ số là 1 số, mảng được gọi là mảng 1 chiều Nếu
ch ỉ số có dạng {i 1 , i 2 , i 3 ,… , i n }, m ảng được gọi là mảng n
Trang 52.2 Bi ểu diễn mảng 1 chiều (1D) (1/3)
• M ảng được thể hiện trong bộ nhớ bằng ánh x ạ tuần
t ự
• Đặc tính cơ bản của ánh xạ tuần tự cho mỗi phần tử của
m ảng có “khoảng cách” cố định với phần tử đầu của mảng.
• Như vậy, nếu phần tử thứ i ánh x ạ tới vị trí a thì ph ần tử
th ứ ( i+1 ) ánh x ạ tới vị trí ( a+1 )
Trang 62.2 Bi ểu diễn mảng 1 chiều (1D) (2/3)
Trang 72.2 Bi ểu diễn mảng 1 chiều (1D) (3/3)
• Địa chỉ của phần tử đầu tiên trong mảng được
g ọi là địa chỉ cơ sở ( base address - LB).
• Địa chỉ của phần tử thứ i được xác định:
Base address + offset of the ith element from
base address
trong đó, offset được tính:
Offset of the ith element = number of elements
before the ith * size of each element
• N ếu LB là lower bound (cận dưới), offset
được xác định:
Trang 82.3 Bi ểu diễn mảng 2 chiều (2D) (1/5)
• M ảng 2 chiều có thể được hiểu thông qua mảng 1D, trong đó, mỗi phần tử của nó là mảng 1D –
M ảng của Mảng.
• M ảng 2D có thể xem là 1 cột của các hàng
• Cách bi ểu diễn này được gọi là row-major
representation.
Trang 92.3 Bi ểu diễn mảng 2 chiều (2D) (2/5)
Trang 102.3 Bi ểu diễn mảng 2 chiều (2D) (3/5)
Địa chỉ của phần tử tại hàng i , c ột j được xác định:
addr(a[i, j]) = ( number of rows placed before ith row * size of a row) + (number of elements placed before the jth element in the ith row * size of element)
trong đó:
Number of rows placed before ith row = (i – LB1), v ới LB1 là lower bound c ủa chiều thứ nhất.
Size of a row = number of elements in a row * a size of element.
Number of elements in a row = (UB2 – LB2+1), v ới UB2 và LB2 là
c ận trên và cận dưới của chiều thứ 2.
Như vậy: