<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
Lecturer: PhD. Ngo Huu Phuc
Tel: 0438 326 077
Mob: 098 5696 580
Email:
<b>C</b>
<b>ấu trúc dữ liệu và giải thuật</b>
</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>
<b>Bài 2. M</b>
<b>ảng</b>
<b>N</b>
<b>ội dung:</b>
1.
Khái ni
ệm về mảng.
2.
Bi
ểu diễn mảng 1 chiều (1D).
3.
Bi
ểu diễn mảng 2 chiều (2D).
4.
Các phép toán trên m
ảng 1D.
5.
Các phép toán trên m
ảng 2D.
<b>Tham kh</b>
<b>ảo:</b>
</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>
<b>2.1. Khái ni</b>
<b>ệm về mảng (1/2)</b>
<i><b>M</b></i>
<i><b>ảng</b></i>
là c
ấu trúc dữ liệu do
<b>người dùng định nghĩa</b>
,
có
<b>kích thước cố định </b>
và
<b>đồng nhất</b>
.
Theo tính ch
ất
<i><b>đồng nhất</b></i>
, các thành ph
ần có cùng kiểu, được
g
ọi là
<i><b>element type</b></i>
ho
ặc
<i><b>base type</b></i>
.
Theo tính ch
ất có
<i><b>kích thước cố định</b></i>
, ta khơng th
ể thay đổi
kích thước của mảng khi đang sử dụng.
</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>
<b>2.1. Khái ni</b>
<b>ệm về mảng (2/2)</b>
Các thành ph
ần của mảng được truy cập thông qua
<i><b>ch</b></i>
<i><b>ỉ số</b></i>
,
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
<i><b>(value, </b></i>
<i><b>index)</b></i>
;
</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>
<b>2.2. Bi</b>
<b>ểu diễn mảng 1 chiều (1D) (1/3)</b>
•
M
ảng được thể hiện trong bộ nhớ bằng
<i><b>ánh x</b></i>
<i><b>ạ tuần </b></i>
<i><b>t</b></i>
<i><b>ự</b></i>
.
•
Đặ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.
</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6></div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>
<b>2.2. Bi</b>
<b>ểu diễn mảng 1 chiều (1D) (3/3)</b>
•
Địa chỉ của
<i><b>ph</b></i>
<i><b>ần tử đầu tiên </b></i>
trong m
ảng được
g
ọi là địa chỉ cơ sở (
<i><b>base address </b></i>
- LB).
•
Địa chỉ của phần tử thứ
<i><b>i</b></i>
được xác định:
<b>Base address + offset of the ith element from </b>
<b>base address</b>
trong đó,
<i>offset</i>
được tính:
<i><b>Offset of the ith element = number of elements </b></i>
<i><b>before the ith * size of each element</b></i>
.
•
N
ếu LB là
<b>lower bound</b>
(c
ận dưới), offset
</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>
<b>2.3. Bi</b>
<b>ểu diễn mảng 2 chiều (2D) (1/5)</b>
•
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
–
<i><b>M</b></i>
<i><b>ảng của Mảng</b></i>
.
•
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à
<i>row-major </i>
</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9></div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>
<b>2.3. Bi</b>
<b>ểu diễn mảng 2 chiều (2D) (3/5)</b>
Địa chỉ của phần tử tại
<i><b>hàng i</b></i>
,
<i><b>c</b></i>
<i><b>ột j</b></i>
được xác định:
<b>addr(a[i, j]) = ( number of rows placed before ith row * </b>
<b>size of a row) + (number of elements placed before the </b>
<b>jth element in the ith row * size of element)</b>
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.
<i><b>Như vậy</b></i>
:
</div>
<!--links-->