Biểu diễn tuần tự sẽ được sử dụng để biểu diễn cho một mẩu tin có cấu trúc thay đổi. Thông qua việc dịch, tổng bộ nhớ cần để lưu các phần tử của mỗi một phần động được xác định và bộ nhớ được cấp phát đủ để lưu trữ mẩu tin với phần động lớn nhất. Chẳng hạn với mẩu tin cong_nhan ta có mô hình lưu trữ như trong hình vẽ sau:
h a n g e Vi e N c end; { with Ho_so[i] } end; { In_luong } begin {Chuong trinh chinh} nhap(ho_so,n); tinh_luong(ho_so,n); in_luong(ho_so,n); readln; end 4.8.2 Cài đặt mẩu tin có cấu trúc thay đổi Biểu diễn nhớ Biểu diễn sử dụng để biểu diễn cho mẩu tin có cấu trúc thay đổi Thông qua việc dịch, tổng nhớ cần để lưu phần tử phần động xác định nhớ cấp phát đủ để lưu trữ mẩu tin với phần động lớn Chẳng hạn với mẩu tin cong_nhan ta có mơ hình lưu trữ hình vẽ sau: ← Ho_ten Ho_ten → ← Ngay_cong Ngay_cong → Luong → ← Luong Loai → He_so → ← Loai ← Gia_cong_nhat Nghi_bhxh → ← Không sử dụng Công nhân biên chế Công nhân hợp đồng Vì khối nhớ đủ lớn để lưu trữ phần động lớn nên có đủ chỗ cho phần động phần động nhỏ không sử dụng tới số ô nhớ cấp phát Với mẩu tin có cấu trúc thay đổi, rõ ràng ta tiết kiệm số nhớ so với mẩu tin bình thường Giải thuật thực phép toán Lựa chọn phần tử phần động giống lựa chọn phần tử bình thường, qua việc dịch độ dời phần tử lựa chọn tính tốn qua việc thực độ dời cọng vào địa sở khối để xác định vị trí phần tử 44 bu to k lic d o m o o c u -tr a c k C w w w d o Chương IV: Kiểu liệu có cấu trúc m C lic k to bu y Ngơn ngữ lập trình w w w w 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 c u -tr a c k w y N c 4.9 CHUỖI KÝ TỰ: Chuỗi ký tự cấu trúc liệu bao gồm dãy ký tự Như vậy, kiểu chuỗi ký tự kiểu đồng nhất, kích thước cố định thay đổi tùy theo ngôn ngữ Kiểu liệu chuỗi ký tự kiểu quan trọng mà hầu hết ngôn ngữ có 4.9.1 Ðặc tả cú pháp: Đặc tả thuộc tính Tùy ngơn ngữ, có cách đặc tả kiểu chuỗi ký tự: a/ Ðộ dài khai báo cố định: Chuỗi ký tự có độ dài (kích thước) cố định khai báo chương trình Mọi giá trị gán cho đối tượng liệu chuỗi có độ dài Khi chuỗi thực gán cho đối tượng liệu mà độ dài chuỗi thực khác độ dài khai báo có điều chỉnh độ dài chuỗi thực cách cắt bớt ký tự dư thêm vào ký tự trắng để có chuỗi có độ dài khai báo Ðây kỹ thuật dùng COBOL từ khóa PICTURE dùng để xác định số lượng ký tự, ví dụ: Last_Name PICTURE X(20) khai báo biến chuỗi ký tự Last_Name chứa chuỗi 20 ký tự Trong Pascal (chuẩn) kiểu liệu chuỗi ký tự khơng có Thay vào kiểu chuổi ký tự biểu diễn véctơ ký tự Last_Name: PACKED ARRAY [1 20] OF Char b/ Ðộ dài thay đổi giới hạn khai báo: Chuỗi ký tự có độ dài cực đại khai báo trước chương trình giá trị thực đối tượng liệu lưu trữ chuỗi có độ dài ngắn hơn, chí chuỗi rỗng Trong trình thực độ dài giá trị chuỗi đối tượng liệu thay đổi, bị cắt vượt giới hạn khai báo Ðây kỹ thuật dùng PL/1 (và Turbo Pascal) c/ Ðộ dài không giới hạn: Chuỗi ký tự có độ dài độ dài thay đổi cách động thơng qua q trình thực Ðây kỹ thuật dùng SNOBOL4 Trong ba phương pháp nói hai phương pháp đầu cho phép cấp phát nhớ cho đối tượng liệu chuỗi xác định thời gian dịch Ðối vơi phương pháp thứ ba sử dụng cấp phát nhớ động thời gian thực Các phương pháp khác địi hỏi phép tốn khác chuỗi Sau số phép toán chủ yếu Đặc tả phép tốn Trên chuỗi ký tự, thường có phép toán sau: a/ Phép ghép nối (concatennation) 45 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 w y N O W ! PD k to bu Chương IV: Kiểu liệu có cấu trúc c Ghép phép tốn nhập hai chuỗi ký tự tạo chuỗi ví dụ "//" ký hiệu phép ghép "BLOCK"//"HEAD" cho "BLOCKHEAD" Turbo Pascal sử dụng tốn tử “+” cho phép toán ghép chuỗi b/ Các phép toán quan hệ chuỗi Các phép toán quan hệ thông thường bằng, nhỏ hơn, lớn kiểu ký tự mở rộng cho chuỗi ký tự Tập hợp ký tự ln có thứ tự Mở rộng thứ tự cho chuỗi ký tự thành thứ tự alphabe chuỗi A nhỏ chuỗi B ký tự A nhỏ ký tự B hai ký tự tương ứng chúng ký tự thư hai A nhỏ ký tự thứ hai B Nếu chuỗi A ngắn chuỗi B A mở rộng cách thêm vào ký tự trắng cho dài B để so sánh c/ Chọn chuỗi dùng số vị trí ký tự Nhiều ngơn ngữ cung cấp phép tốn chọn chuỗi chuỗi cách cho vị trí ký tự ký tự cuối (hoặc vị trí ký tự chiều dài chuỗi con) Ví dụ FORTRAN, lệnh NEXT = STR(6:10) gán ký tự, vị trí thứ đến vị trị thứ 10 chuỗi STR cho biến chuỗi NEXT d/ Ðịnh dạng nhập - xuất Ðịnh dạng nhập xuất phép toán dùng để thay đổi dạng nhập vào xuất chuỗi ký tự Nhập xuất có định dạng nét bật FORTRAN PL/1 e/ Chọn chuỗi dùng so mẫu Thông thường người ta vị trí chuỗi cần chọn chuỗi lớn quan hệ với chuỗi khác biết Ví dụ chuỗi chữ số sau dấu chấm thập phân hay chuỗi đứng sau khoảng trống Phép so mẫu có đối số thứ để xác định dạng chuỗi cần chọn (chẳng hạn độ dài nó) Ðối số thứ hai phép toán so mẫu chuỗi ký tự dùng để tìm chuỗi (chẳng hạn dấu chấm thập phân) Như kết phép toán so mẫu chọn chuỗi sau dấu chấm thập phân có độ dài cho 4.9.2 Cài đặt Biểu diễn nhớ Mỗi phương pháp đặc tả chuỗi có cách biểu diễn nhớ tương ứng Ðối với chuỗi có độ dài khai báo cố định dùng véctơ ký tự Ví dụ chuỗi khai báo có độ dài dùng để lưu trữ chuỗi EINSTEIN (cũng có ký tự): E I N S T E I N Ðối với chuỗi có độ dài thay đổi giới hạn khai báo dùng véctơ ký tự, sử dụng hai ô làm mô tả chứa giá trị thể độ dài lớn khai báo độ dài hành chuỗi Ví dụ chuỗi khai báo có độ dài 12 dùng để lưu trữ chuỗi EINSTEIN (có ký tự): 46 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 C lic k to bu Ngơn ngữ lập trình w w d o XC er 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 12 Độ dài khai báo Độ dài thực E I N S T E I N Các ô dư không sử dụng Ðối với chuỗi có độ dài khơng giới hạn sử dụng biểu diễn nhớ liên kết với mô tả chứa độ dài chuỗi E I N T S E I N # Ðộ dài thực chuỗi Giải thuật thực phép tốn Thơng thường phần cứng hỗ trợ cho việc biểu diễn chuỗi có độ dài cố định biểu diễn khác cho chuỗi phải mơ phần mềm Các phép toán ghép, chọn chuỗi so mẫu phải mô phần mềm 4.10 CẤU TRÚC DỮ LIỆU CĨ KÍCH THƯỚC THAY ÐỔI CTDL có kích thước thay đổi cấu trúc mà số lượng phần tử thay đổi cách động trình thực chương trình Một số kiểu chủ yếu cấu trúc liệu có kích thước thay đổi là: 4.10.1 Danh sách cấu trúc danh sách Danh sách CTDL tuyến tính với số lượng thay đổi phần tử có kiểu giống Nếu phần tử danh sách lại danh sách gọi cấu trúc danh sách (list structures) Các phần tử thêm vào xóa khỏi danh sách Các phần tử lựa chọn từ danh sách vị trí phần tử danh sách bị thay đổi phép thêm xóa phần tử nên khơng thể sử dụng số để xác định phần tử Thay vào đó, việc lựa chọn dựa sở mối quan hệ vị trí phần tử với danh sách chẳng hạn phần tử đầu, hai, ba, kế hặc cuối Biểu diễn nhớ liên kết cho danh sách cấu trúc danh sách dùng cách phổ biến để phù hợp với thay đổi số lượng phần tử 4.10.2 Ngăn xếp hàng đợi Ngăn xếp danh sách mà việc lựa chọn, thêm, xóa phần tử thực đầu danh sách Do việc thêm, xóa phần tử thực đầu ngăn xếp, nên phần tử đưa vào sau, lấy trước Do ngăn xếp gọi cấu trúc liệu kiểu LIFO (Last In, First Out) Hàng đợi danh sách mà việc lựa chọn, xóa phần tử thực đầu việc thêm phần tử thực đầu khác danh sách 47 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 k to bu Chương IV: Kiểu liệu có cấu trúc c Do việc xóa phần tử thực đầu (đầu hàng) việc thêm phần tử thực cuối hàng, nên phần tử đưa vào trước, lấy trước Do hàng đợi gọi cấu trúc liệu kiểu FIFO (First In, First Out) Cả hai phương pháp biểu diễn liên kết dùng cho ngăn xếp hàng đợi 4.11 CON TRỎ 4.11.1 Cấp phát tĩnh, cấp phát động trỏ Cấp phát nhớ (gọi tắt cấp phát) dành riêng ô nhớ nhớ cho chương trình sử dụng Thơng thường nhớ cấp phát để lưu trữ giá trị liệu biến Có hai phương pháp cấp phát cấp phát tĩnh cấp phát động Cấp phát tĩnh cấp phát ô nhớ cho ÐTDL thực q trình dịch Trong biên dịch, thơng qua khai báo biến, dịch xác định kiểu liệu ÐTDL nên dành sẵn khối ô nhớ đủ lớn để lưu trữ ÐTDL kiểu Người lập trình sử dụng nhớ cấp phát thơng qua tên biến Khi khối chương trình, nơi khai báo biến kết thúc nhớ cấp phát tự động giải phóng Ưu điểm Ưu điểm cấp phát tĩnh người lập trình dễ sử dụng, cụ thể người lập trình cần khai báo biến, chương trình dịch tự động cấp phát sau tự động giải phóng Nhược điểm Nhược điểm cấp phát tĩnh việc sử dụng nhớ khơng tối ưu, cụ thể cấp phát nhiều ô nhớ sử dụng không hết cấp phát thiếu Cấp phát động cấp phát thực chương trình Người lập trình phải viết lệnh cấp phát chương trình, thực lệnh nhớ cấp phát Sử dụng cấp phát động, người lập trình lệnh giải phóng để thu hồi nhớ Ðể cấp phát động, ta cần có biến trỏ hay gọi biến kiểu tham chiếu Biến trỏ ÐTDL sơ cấp chứa địa khối ô nhớ cấp phát Người lập trình sử dụng nhớ cấp phát thơng qua biến trỏ Ưu điểm Ưu điểm bật cấp phát động sử dụng nhớ cách tối ưu Nhược điểm Nhược điểm cấp phát động tên, có nhiều tên biến trỏ tham chiếu đến ô nhớ làm giảm độ tin cậy chương trình Ngồi gặp khó kăn sử dụng cấp phát động 48 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 Ngơn ngữ lập trình w w d o XC er w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c ... trúc liệu bao gồm dãy ký tự Như vậy, kiểu chuỗi ký tự kiểu đồng nhất, cịn kích thước cố định thay đổi tùy theo ngôn ngữ Kiểu liệu chuỗi ký tự kiểu quan trọng mà hầu hết ngôn ngữ có 4.9.1 Ðặc tả. .. pháp: Đặc tả thuộc tính Tùy ngơn ngữ, có cách đặc tả kiểu chuỗi ký tự: a/ Ðộ dài khai báo cố định: Chuỗi ký tự có độ dài (kích thước) cố định khai báo chương trình Mọi giá trị gán cho đối tượng liệu. .. mềm 4.10 CẤU TRÚC DỮ LIỆU CĨ KÍCH THƯỚC THAY ÐỔI CTDL có kích thước thay đổi cấu trúc mà số lượng phần tử thay đổi cách động trình thực chương trình Một số kiểu chủ yếu cấu trúc liệu có kích thước