Tham khảo tài liệu ''giáo trình phân tích khả năng ứng dụng kiểu dữ liệu sơ cấp trong ngôn ngữ lập trình p8'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
- Ðối với phần tử dãy, cộng kích thước phần tử hành với vị trí phần tử hành để vị trí phần tử Ðối với biểu diễn liên kết Như trình bày, khối nhớ biểu diễn liên kết bố trí rời rạc nhau, khối nối với khối trỏ lúc đầu nắm trỏ tới khối Do việc đến khối ln phải xuất phát từ khối Để lựa chọn ngẫu nhiên phần tử cấu trúc liên kết cần phải duyệt dãy khối, từ khối đến khối cần lựa chọn Lựa chọn dãy phần tử thực cách lựa chọn phần tử nói sau từ phần tử hành, duyệt theo trỏ để đến phần tử VÉCTƠ 4.5.1 Định nghĩa véctơ Véctơ (còn gọi mảng chiều) CTDL bao gồm số cố định phần tử có kiểu giống tổ chức thành dãy phần tử Như véctơ CTDL có kích thước cố định đồng 4.5.2 Sự đặc tả cú pháp Đặc tả thuộc tính véctơ Các thuộc tính véctơ là: - Số lượng phần tử, rõ cách cho tập số Tập số thông thường cho miền số nguyên, trường hợp đó, số lượng phần tử số nguyên cuối - số nguyên + Một cách tổng quát tập số kiểu liệt kê đó, trường hợp này, số lượng phần tử số giá trị kiểu liệt kê Cũng có ngơn ngữ định rõ số lượng phần tử ngôn ngữ C chẳng hạn - Kiểu liệu phần tử, thường viết rõ khai báo - Chỉ số sử dụng để lựa chọn phần tử Nếu tập số cho miền tập số nguyên số nguyên định phần tử số nguyên thứ định phần tử thứ Nếu tập số liệt kê giá trị liệt kê số phần tử Nếu ngôn ngữ định rõ số lượng phần tử số phần tử Khai báo véctơ Pascal ARRAY [] OF Ví dụ VAR a: ARRAY[1 10] OF real; Khai báo xác định véctơ a có 10 phân tử số real Các phần tử lựa chọn số từ đến 10 Miền giá trị số không thiết 1, ví dụ 34 y bu to k d o m o c 4.5 w N O W ! PD m w o c u -tr a c k h a n g e Vi e lic O W N y bu to k lic C Chương IV: Kiểu liệu có cấu trúc w w d o XC er Ngơn ngữ lập trình w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e y N c Var b: ARRAY [-5 10] OF integer; Với khai báo b véctơ có 16 phần tử (10 – (-5) + = 16) Các phần tử lựa chọn nhờ số từ -5 đến 10 Miền giá trị số không thiết miền số nguyên, liệt kê (hoặc miền liệt kê) Ví dụ: Type Ngay = (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay); var c : ARRAY [Ngay] OF Integer ; Khai báo xác đinh véctơ c có phần tử số integer, phần tử c lựa chọn nhờ “chỉ số” từ Chu_nhat đến Bay Khai báo véctơ ngôn ngữ C [] Ví dụ int d[10]; Khai báo xác định véctơ d có 10 phần tử số int, phần tử lựa chọn nhờ số từ đến Đặc tả phép toán véctơ Các phép toán véctơ bao gồm: Phép toán lựa chọn phần tử véctơ phép lấy số, viết tên véctơ theo sau số phần tử lựa chọn đặt cặp dấu [] Như phép lựa chọn phần tử véctơ phép lựa chọn trực tiếp Ví dụ, với khai báo ví dụ thuộc phần đặc tả thuộc tính nói trên, Các phần tử véctơ a lựa chọn cách viết a[1], a[2], …, a[10] Các phần tử véctơ b lựa chọn cách viết b[-5], b[-4], …, b[10] Các phần tử véctơ c lựa chọn cách viết c[Chu_nhat], c[Hai], …, c[Bay] Các phần tử véctơ d lựa chọn cách viết d[0], d[1], …, d[9] Chỉ số một biến (nói chung biểu thức), ví dụ a[i] hay a[i+2] Nhờ số biểu thức nên việc lập trình trở nên đơn giản nhiều nhờ tính khái quát số Ví dụ để in giá trị 10 phần tử véctơ a, thay ta phải viết 10 lệnh in phần tử cụ thể theo kiểu writeln(a[1]); writeln(a[2]); writeln(a[3]); … ta cần viết lệnh for i:=1 to 10 writeln(a[i]); Các phép toán khác véctơ bao gồm phép toán tạo hủy bỏ véctơ, gán hai véctơ cho phép toán thực phép tốn số học cặp véctơ có kích thước Chẳng hạn phép cộng véctơ (cộng phần tử tương ứng) Tùy thuộc vào ngôn ngữ mà phép tốn có khơng có 4.5.3 Cài đặt véctơ Biểu diễn nhớ Biểu diễn nhớ sử dụng để biễu diễn cho véctơ 35 bu to k d o m o o c u -tr a c k w lic w w w d o Chương IV: Kiểu liệu có cấu trúc m C lic k to bu Ngơn ngữ lập trình w w w C y N O W ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e y N c Mơ hình sau minh họa cho biểu diễn nhớ véctơ A : ARRAY[LB UB] OF Ðịa sở Bộ mô tả Bộ nhớ cho phần tử véctơ Véctơ A LB UB Kiểu phần tử E A[LB] A[LB+1] Kiểu liệu Cận tập số Cận tập số Kiểu liệu phần tử Kích thước phần tử A[UB] Khối ô nhớ để lưu trữ véctơ có hai phần: mơ tả nhớ dành cho phần tử véctơ Trong mô tả lưu trữ kiểu liệu cấu trúc (véctơ A), cận tập số (LB - Lower Bound), cận tập số (UB - Upper Bound), kiểu liệu phần tử kích thước phần tử (E) Bộ nhớ dành cho phần tử véctơ lưu trữ liên tiếp phần tử, từ phần tử (A[LB]) phần tử cuối (A[UB]) Do phần tử có kiểu nên nhớ dành cho phần tử có kích thước nahu Ðịa nhớ khối gọi địa sở Giải thuật thực phép toán Phép toán lựa chọn phần tử thực cách tính vị trí phần tử cần lựa chọn theo cơng thức: Vị trí phần tử thứ i = ∝ + D + (i - LB) * E Trong i số phần tử cần lựa chọn, ∝ địa sở khối ô nhớ (địa word byte khối ô nhớ dành cho véctơ) D kích thước mơ tả, LB cận tập số E kích thước đối tượng liệu thành phần (số word byte cần thiết để lưu trữ phần tử) Nếu số giá trị kiểu liệt kê số ngun hiệu i-LB phải tính tốn cách thích hợp (chẳng hạn sử dụng hiệu hai số thứ tự tương ứng i LB liệt kê) Phép gán véctơ cho véctơ khác có thuộc tính thực cách chép nội dung khối ô nhớ biểu diễn véctơ thứ sang khối ô nhớ biểu diễn véctơ thứ hai Các phép tốn tồn véctơ thực cách sử dụng vòng lặp xử lý phần tử véctơ 4.6 MẢNG NHIỀU CHIỀU Ma trận (mảng hai chiều) xem véctơ véctơ Một mảng chiều xem véctơ ma trận 36 bu to k d o m o o c u -tr a c k w lic w w w d o Chương IV: Kiểu liệu có cấu trúc m C lic k to bu Ngơn ngữ lập trình w w w C y N O W ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c w y N O W ! PD c 4.6.1 Sự đặc tả cú pháp Đặc tả thuộc tính Mảng nhiều chiều tương tự véctơ có thuộc tính khác véctơ chiều phải có tập số tương ứng Chẳng hạn khai báo cho mảng hai chiều đươc viết dạng ARRAY[LB1 UB1, LB2 UB2] OF Trong tập số có giá trị từ LB1 đến UB1, tập số có giá trị từ LB2 đến UB2 Như số lượng phần tử mảng hai chiều (UB1-LB1+1)*(UB2-LB2+1) Ví dụ khai báo Pascal: M= array [1 3, -1 2] of Integer; Sự khai báo cho ta thấy mảng M có hai chiều, chiều thứ xác định tập số chiều thứ hai xác định tập số -1 Có thể xem ma trận có dịng cột, có 12 phần tử, phần tử lưu trữ số integer Đối với mảng có số chiều nhiều hai cách làm tương tự mảng hai chiều Đặc tả phép toán Phép lựa chọn phần tử thực cách tên mảng số chiều Chẳng hạn để lựa chọn phân tử ma trận ta viết tên ma trận, theo sau cặp số dòng, cột phân cách dấu phẩy đặt cặp dấu [], ví dụ M[2,0] Như phép lựa chọn phần tử mảng nhiều chiều phép lựa chọn trực tiếp 4.6.2 Sự cài đặt Sự biểu diễn nhớ Sự biểu diễn nhớ mảng nhiều chiều tương tự biểu diễn nhớ véctơ Nghĩa sử dụng biểu diễn khố ô nhớ chia làm hai phần: mô tả nhớ cho phần tử Bộ mô tả mảng giống mô tả véctơ ngoại trừ chiều có cận cận tập số chiều Trong nhớ dành cho phần tử ta lưu trữ liên tiếp phần tử theo trật tự Với ma trận, mặt logic ma trận bảng gồm m dịng n cơt, ô phần tử, nhớ lại gồm liên tiếp nhau, ta phải lưu trữ ma trận theo trật tự dòng theo trật tự cột Lưu trữ theo trật tự dòng có nghĩa nhớ dành cho phần tử ta lưu trữ phần tử dòng thứ nhất, tiếp đến phần tử dòng thứ hai cho đên dòng cuối 37 bu to k d o m o m w o c u -tr a c k h a n g e Vi e lic O W N y bu to k lic C Chương IV: Kiểu liệu có cấu trúc w w d o XC er Ngôn ngữ lập trình w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e c u -tr a c k w y N c Lưu trữ theo trật tự cột nghĩa nhớ dành cho phần tử ta lưu trữ phần tử cột thứ nhất, tiếp đến phần tử cột thứ hai cột cuối Chẳng hạn với khai báo M: ARRAY [1 3,-1 2] OF Integer; ta có hình ảnh biểu diễn nhớ hình sau: Cấu trúc logic ma trận M Lưu trữ ma trận M theo trật tự dòng M[1,-1] M[1,0] M[1,1] M[1,2] Ma trận M Kiểu liệu M[2,-1] M[2,0] M[2,1] M[2,2] LB1 (= 1) Cận tập số thứ M[3,-1] M[3,0] M[3,1] M[3,2] UB1 (= 3) Cận tập số thứ LB2 (= -1) Cận tập số thứ hai UB2 (= 2) Cận tập số thứ hai Bộ mô tả M[1,-1] M[1,0] Bộ nhớ cho M[1,1] Các phần tử M[1,2] M[2,-1] Dòng thứ Dòng thứ hai M[2,0] M[3,2] Cấu trúc logic ma trận M Lưu trữ ma trận M theo trật tự cột M[1,-1] M[1,0] M[1,1] M[1,2] Ma trận M Kiểu liệu M[2,-1] M[2,0] M[2,1] M[2,2] LB1 (= 1) Cận tập số thứ M[3,-1] M[3,0] M[3,1] M[3,2] UB1 (= 3) Cận tập số thứ LB2 (= -1) Cận tập số thứ hai UB2 (= 2) Cận tập số thứ hai Bộ mô tả M[1,-1] M[2,-1] Bộ nhớ cho M[3,-1] Các phần tử M[1,0] M[2,0] Cột thứ Cột thứ hai M[3,0] M[3,2] 38 bu to k lic d o m o m w o d o Chương IV: Kiểu liệu có cấu trúc w w w w w C lic k to bu Ngơn ngữ lập trình C y N O W ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c ... véctơ A : ARRAY[LB UB] OF Ðịa sở Bộ mô tả Bộ nhớ cho phần tử véctơ Véctơ A LB UB Kiểu phần tử E A[LB] A[LB+1] Kiểu liệu Cận tập số Cận tập số Kiểu liệu phần tử Kích thước phần... w o c u -tr a c k h a n g e Vi e lic O W N y bu to k lic C Chương IV: Kiểu liệu có cấu trúc w w d o XC er Ngôn ngữ lập trình w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g... phần: mơ tả nhớ dành cho phần tử véctơ Trong mô tả lưu trữ kiểu liệu cấu trúc (véctơ A), cận tập số (LB - Lower Bound), cận tập số (UB - Upper Bound), kiểu liệu phần tử kích thước phần tử (E) Bộ