Kiểu dữ liệu có cấu trúc hay còn gọi là CTDL là kiểu dữ liệu mà các ÐTDL có cấu trúc. Như vậy CTDL là một tập các ÐTDL có cấu trúc và tập các phép toán trên các ÐTDL đó.
Các CTDL thông dụng: Mảng, chuỗi ký tự, mẩu tin, ngăn xếp, con trỏ, tập tin.
44 trang |
Chia sẻ: oanh_nt | Lượt xem: 1336 | Lượt tải: 0
Nội dung tài liệu Bài giảng Ngôn ngữ lập trình: Kiểu dữ liệu có cấu trúc, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 4:KIỂU DỮ LIỆU CÓ CẤU TRÚC Định nghĩa kiểu dữ liệu có cấu trúc. Sự đặc tả kiểu dữ liệu có cấu trúc. Sự cài đặt các cấu trúc dữ liệu. Vectơ (mảng một chiều). Mảng nhiều chiều. Mẩu tin và mẩu tin có cấu trúc thay đổi. Chuỗi ký tự. Cấu trúc dữ liệu có kích thước thay đổi (Danh sách, Con trỏ, Tập hợp, Tập tin). ĐỊNH NGHĨA Kiểu dữ liệu có cấu trúc hay còn gọi là CTDL là kiểu dữ liệu mà các ÐTDL có cấu trúc. Như vậy CTDL là một tập các ÐTDL có cấu trúc và tập các phép toán trên các ÐTDL đó. Các CTDL thông dụng: Mảng, chuỗi ký tự, mẩu tin, ngăn xếp, con trỏ, tập tin... SỰ ĐẶC TẢ Thuộc tính: Số lượng phần tử. Kiểu của các phần tử. Tên của phần tử. Kích thước tối đa. Tổ chức phần tử. Phép toán: Lựa chọn phần tử. Phép toán trên toàn cấu trúc. Thêm/bớt phần tử, tạo/hủy cấu trúc. ĐẶC TẢ THUỘC TÍNH Số lượng phần tử: Kích thước cố định, kích thước thay đổi. Kiểu phần tử: Đồng nhất và không đồng nhất. Tên của phần tử: Chỉ số, tên trường. Kích thước tối đa: Số lượng lớn nhất các phần tử. Tổ chức phần tử: Một dãy các phần tử. ĐẶC TẢ PHÉP TOÁN Phép toán lựa chọn một phần tử: Chọn trực tiếp và chọn tuần tự. Phép toán trên toàn cấu trúc: Gán. Thêm / Bớt phần tử: Làm thay đổi kích thước. Tạo / Hủy cấu trúc. SỰ CÀI ĐẶT Biểu diễn bộ nhớ: Biểu diễn tuần tự. Biểu diễn liên kết. Cài đặp phép toán chọn một phần tử: Chọn trực tiếp trong biểu diễn tuần tự. Chọn tuần tự trong biểu diễn tuần tự . Chọn trực tiếp trong biểu diễn liên kết. Chọn tuần tự trong biểu diễn liên kết. BIỂU DIỄN BỘ NHỚ Biểu diễn tuần tự Biểu diễn liên kết CÀI ĐẶT PHÉP TOÁN Chọn trực tiếp trong biểu diễn tuần tự: Vị trí phần tử = địa chỉ cơ sở + độ dời. Chọn tuần tự trong biểu diễn tuần tự: Xác định vị trí phần tử đầu tiên. Vị trí phần tử tiếp theo = Vị trí phần tử hiện hành + Kích thước phần tử hiện hành. Lựa chọn trong biểu diễn liên kết: Duyệt từ đầu danh sách. VÉCTƠ (MẢNG MỘT CHIỀU) Định nghĩa: Là CTDL có kích thước cố định và đồng nhất. Đặc tả: Số lượng phần tử: Tập chỉ số. Kiểu của tất cả các phần tử. Tên phần tử: Chỉ số của phần tử. Phép tóan lựa chọn một phần tử: Chọn trực tiếp bằng cách chỉ ra chỉ số của phần tử. Chỉ số là giá trị của biểu thức. Phép toán gán. Ví dụ: V : ARRAY[1..10] OF REAL CÀI ĐẶT VÉCTƠ (1) Tổ chức lưu trữ: Biểu diễn tuần tự. CÀI ĐẶT VÉCTƠ (2) Phép toán lựa chọn 1 phần tử: Vị trí phần tử thứ i = + D + (i – LB)* E là địa chỉ cơ sở. D là kích thước bộ mô tả. Phép toán gán: Copy khối ô nhớ. MẢNG NHIỀU CHIỀU Đặc tả: Mỗi chiều có một tập chỉ số. Cài đặt: Biểu diễn bộ nhớ tuần tự, các phần tử được lưu trũ kế tiếp nhau, nhưng có 2 cách lưu: Các phần tử được lưu theo trật tự dòng: Hết dòng này đến dòng khác. Các phần tử được lưu theo trật tự cột: Hết cột này đến cột khác. BIỂU DIỄN MA TRẬN M[1..3,-1..2] OF INTEGER CHỌN MỘT PHẦN TỬ CỦA MA TRẬN Vị trí của phần tử M[i,j] được tính theo công thức: Vị trí M[i,j] = + D + (i-LB1)*S + (j-LB2)*E là địa chỉ cơ sở. D là kích thước bộ mô tả. S là kích thước 1 dòng = (UB2-LB2+1)*E. E là kích thước một phần tử. MẨU TIN Định nghĩa: Là CTDL có kích thước cố định và không đồng nhất. Đặc tả: Số lượng phần tử (trường). Tên của mỗi phần tử. Kiểu của mỗi phần tử. Phép toán chọn phần tử: Sử dụng tên PT. Phép gán. Ví dụ: Nhan_vien: Record Ma: Integer; Ho_ten: string[25]; Tuoi: Integer; Luong: Real; End. CÀI ĐẶT MẨU TIN Bộ nhớ tuần tự:Một khối ô nhớ liên tục để lưu trữ cả mẩu tin. Mỗi trường được lưu trong một khối. Mỗi khối có thể có bộ mô tả riêng. Ví dụ: Nhan_vien Vị trí phần tử = + Tổng kích thước các phần tử trước đó. Ví dụ: Vị trí Tuoi = + Kích thước Ma + Kích thước Ho_ten Ma Ho_ten Tuoi Luong MẨU TIN CÓ CẤU TRÚC THAY ĐỔI Bài toán. Định nghĩa. Cài đặt. MẨU TIN CÓ CẤU TRÚC THAY ĐỔI (BÀI TOÁN) Ví dụ: Một xí nghiệp có hai loại công nhân: Biên chế và hợp đồng. Lương công nhân biên chế = Số ngày công * múc lương tối thiểu * Hệ số /20. Những ngày nghỉ bảo hiểm xã hội, họ được trả lương bảo hiểm. Lương công nhân hợp đồng = Số ngày công * đơn giá công nhật. ĐỊNH NGHĨA MẨU TIN CÓ CẤU TRÚC THAY ĐỔI Mỗi mẩu tin bao gồm hai phần: Phần tĩnh và phần động. Phần tĩnh gồm các trường mà tất cả các thể hiện đều có. Phần động sẽ có các trường khác nhau tùy theo từng thể hiện. Trong phần tĩnh phải có một trường dùng để phân biệt các thể hiện. Phép toán lựa chọn một phần tử tương tự như mẩu tin bình thường. VÍ DỤ TYPE Loai_Cong_Nhan = (bien_che,hop_dong); VAR Cong_Nhan : RECORD Ho_Ten: String[20]; Ngay_Cong: Real; Luong: Real; CASE loai: Loai_Cong_Nhan OF bien_che: (He_So: Real; Nghi_bhxh:Real); hop_dong: (Gia_Cong_Nhat: Real); END; CÀI ĐẶT MẨU TIN CÓ CẤU TRÚC THAY ĐỔI Ho_Ten Ngay_Cong Luong Loai Gia_Cong_nhat Không sử dụng Ho_Ten Ngay_Cong Luong Loai He_So Nghi_BHXH CHUỖI KÝ TỰ Đặc tả thuộc tính. Đặc tả phép tóan. Cài đặt chuỗi ký tự. ĐẶC TẢ THUỘC TÍNH CHUỖI KÝ TỰ Đặc tả thuộc tính: Có ba phương pháp: Độ dài khai báo cố định. Độ dài thay đổi trong một giới hạn đã được khai báo. Độ dài không giới hạn. ĐẶC TẢ PHÉP TOÁN CHUỖI KÝ TỰ Đặc tả phép toán: Phép ghép chuỗi. Các phép toán quan hệ. Lấy chuỗi con của một chuỗi bằng cách chỉ ra ký tự đầu tiên và ký tự cuối cùng. Định dạng nhập - xuất. Chọn chuỗi con bằng cách so mẫu. CÀI ĐẶT CHUỖI KÝ TỰ (1) Độ dài khai báo cố định: Sử dụng một véctơ của các ký tự để lưu trữ một chuỗi Ví dụ chuỗi được khai báo có độ dài 12 nhưng chuỗi thực là “EINSTEIN”. Thì phải thêm vào 4 ký tự trắng để có độ dài 12. CÀI ĐẶT CHUỖI KÝ TỰ (2) Độ dài thay đổi trong giới hạn đã khai báo: Sử dụng một véctơ để lưu trữ một chuỗi và có bộ mô tả lưu cả độ dài được khai báo và độ dài thực. Ví dụ chuỗi được khai báo có độ dài 12 nhưng chuỗi thực là “EINSTEIN”. Sẽ có 4 ô không sử dụng. CÀI ĐẶT CHUỖI KÝ TỰ (3) Độ dài không cố định: Sử dụng biểu diễn liên kết có bộ mô tả lưu trữ độ dài thực của chuỗi. Ví dụ chuỗi cần lưu trữ là “EINSTEIN”. CẤU TRÚC DỮ LIỆU CÓ KÍCH THƯỚC THAY ĐỔI Định nghĩa: Là CTDL có số phần tử thay đổi một cách động trong quá trình thực hiện chương trình. Một số cấu trúc điển hình: Danh sách. Ngăn xếp. Hàng đợi. CON TRỎ Cấp phát tĩnh, cấp phát động và con trỏ. Đặc tả. Ví dụ. Cài đặt. CON TRỎ (Cấp phát ...) Cấp phát tĩnh: Trong khi dịch. Nhờ khai báo biến, bộ dịch sẽ dành sẵn ô nhớ đủ để lưu trữ. Tự động giải phóng. Sử dụng nhờ tên biến Không tối ưu. Cấp phát động: Trong khi thực hiện. Người lập trình chủ động cấp phát và giải phóng. Sử dụng thông qua địa chỉ. Cần có biến con trỏ để lưu trữ địa chỉ. ĐẶC TẢ CON TRỎ Con trỏ tham chiếu đến các ĐTDL có kiểu cụ thể. Con trỏ tham chiếu đến các ĐTDL có kiểu bất kỳ. Phép toán cấp phát ô nhớ động và trả địa chỉ về cho con trỏ. Phép toán truy xuất tới ĐTDL được cấp phát động. Phép toán giải phóng ô nhớ. VÍ DỤ VỀ CON TRỎ (1) Con trỏ tham chiếu đến các ĐTDL có kiểu cụ thể Type Sinh_vien = Record Ho_ten : String[25]; Tuoi : Byte; End; Var p : ^Sinh_vien; q : ^Integer; VÍ DỤ VỀ CON TRỎ (2) Begin New(p); p^.Ho_ten:= ‘Nguyen Van A’; p^.tuoi := 20; Writeln(p^.Ho_ten, ‘ ‘, p^.tuoi); Dispose(p); New(q); q^ := 3547; End. VÍ DỤ VỀ CON TRỎ (3) Con trỏ tham chiếu đến các ĐTDL có kiểu bất kỳ Type Sinh_vien = Record Ho_ten : String[25]; Tuoi : Byte; End; Var p : pointer ; VÍ DỤ VỀ CON TRỎ (4) Begin GetMem(p, SizeOf(Sinh_vien)); {................ } FreeMem(p, SizeOf(Sinh_Vien)); GetMem(p, SizeOf(Integer)); {................. } FreeMem(p, SizeOf(Integer)); End. CÀI ĐẶT CON TRỎ Địa chỉ tuyệt đối: Giá trị con trỏ là địa chỉ thực của khối ô nhớ cấp phát động. Phương pháp này thường dùng cho con trỏ tham chiếu đến một ĐTDL có kiểu cụ thể. Địa chỉ tương đối: Giá trị con trỏ là độ dời của khối ô nhớ cấp phát động. Địa chỉ của khối ô nhớ = địa chỉ cơ sở + giá trị con trỏ (độ dời). TẬP HỢP Đặc tả. Cài đặt tập hợp bằng véctơ bit. Cài đặt tập hợp bằng bảng băm. ĐẶC TẢ TẬP HỢP CTDL đồng nhất và có kích thước thay đổi; Không quan tâm đến thứ tự các phần tử; Giá trị các phần tử khác nhau. Phép toán kiểm tra một giá trị có thuộc một tập hợp? Thêm, Bớt phần tử. Hợp, giao và hiệu của hai tập hợp. CÀI ĐẶT TẬP HỢP BẰNG VECTO BIT Một tập hợp được biểu diễn bởi một véctơ các bit 0 hoặc 1. Phép kiểm tra. Phép Thêm và Bớt. Phép Hợp, Giao và Hiệu Ưu điểm: dễ dàng cài đặt. Nhược điểm: Không gian nhỏ. CÀI ĐẶT TẬP HỢPBẰNG BẢNG BĂM Tập hợp là một bảng băm mở. Phép kiểm tra. Phép Thêm và Bớt. Phép Hợp, Giao và Hiệu Ưu điểm: cài đặt cho tập hợp bất kỳ, các phép kiểm tra, thêm, bớt dễ thực hiện. Nhược điểm: khó thực hiện các phép hợp, giao, hiệu. TẬP TIN Tập tin tuần tự Tập tin văn bản. Tập tin truy xuất trực tiếp TẬP TIN TUẦN TỰ Đặc tả: một dãy tuyến tính các phần tử có cùng kiểu. Ðộ dài của tập tin là không giới hạn. Kiểu phần tử có thể là kiểu sơ cấp hoặc kiểu cấu trúc có kích thước cố định như mảng hoặc mẩu tin Mode read, mode write, con trỏ tập tin. Phép toán: open, read, write, EOF, close CÀI ĐẶT TẬP TIN TUẦN TỰ Hệ điều hành. Giao tiếp giữa bộ nhớ trong và bộ nhớ ngoài thông qua buffer. CÁC LOẠI TẬP TIN KHÁC Tập tin văn bản: Tập tin tuần tự đặc biệt, các phần tử là kí tự. Tập tin truy xuất trực tiếp: Có thể nhẩy đến truy xuất phần tử bất kỳ.
Các file đính kèm theo tài liệu này:
- chuong4.ppt