Khái niệm chung về cấu trúc dữ liệu Dữ liệu không có cấu trúc đơn giản: Integer, char, Boolean, real… Mỗi đối tượng dữ liệu là một phần tử đơn lẻ.. Dữ liệu có cấu trúc: Được cấu th
Trang 1Dữ liệu kiểu mảng, xâu ký tự
Khái niệm về cấu trúc dữ liệu.
Kiểu dữ liệu mảng (array).
Một số bài toán sử dụng mảng.
Mảng hai chiều.
Kiểu dữ liệu xâu ký tự.
Kiểu dữ liệu tập hợp.
Trang 2Khái niệm chung về cấu trúc dữ liệu
Dữ liệu không có cấu trúc (đơn giản):
Integer, char, Boolean, real…
Mỗi đối tượng dữ liệu là một phần tử đơn lẻ
Dữ liệu có cấu trúc:
Được cấu thành bởi các phần tử dữ liệu đơn giản
Bao gồm: mảng, tập hợp, bản ghi, tệp
Trang 3Kiểu dữ liệu mảng
Mảng (array) là kiểu dữ liệu bao gồm một số lượng hữu hạn các phần tử có cùng kiểu dữ liệu
Khai báo mảng:
TYPE
Kiểu_Mảng = ARRAY [KCD] OF KPT;
VAR
Biến_Mảng : Kiểu_Mảng;
Khai báo trực tiếp:
VAR
Biến_Mảng: ARRAY[KCD] OF KPT;
KCD - Quy định số lượng và cách thức truy cập tới các phần tử
KPT - Kiểu phần tử của mảng
Trang 4Khai báo mảng
TYPE
DaySo = array[1 100] of Real;
DemKyTu = array[A Z] of Integer;
VAR
A: DaySo;
Dem1: DemKyTu;
M: array[1 10] of Integer;
M1: array[-3 5] of Real;
Trang 5Truy nhập mảng
Để truy nhập tới từng phần tử, sử dụng chỉ số:
Tên_Biến_Mảng[chỉ_số]
A[3] phần tử thứ ba trong mảng A (xem VD)
Dem1[‘M’] phần tử thứ ‘M’ trong mảng Dem1
Mỗi phần tử của mảng có thể coi như một biến độc lập có kiểu dữ liệu là KPT Một mảng tưng ứng với nhiều biến có cùng kiểu.
Mọi thao tác (đọc, viết, gán,…) đối với kiểu dữ
liệu KPT đều áp dụng được với phần tử của mảng.
Trang 6Gán giá trị cho các phần tử của mảng
VAR
Day1: Array[1 10] of Integer;
BEGIN
Day1[1]:=3;
Day1[2]:=10;
Writeln(Day1[1],’;’,Day1[2]);
Day1[2]:=Day1[1]+Day1[2];
Readln;
Writeln(Day1[1],’;’,Day1[2]);
END.
3;10 3;13 _
Trang 7Một số bài toán
Tìm kiếm vị trí xuất hiện của phần tử có giá trị cho trước trong mảng.
Giải thuật: Lần lượt so sánh các phần tử của mảng với giá trị cho trước, nếu phát hiện phần tử có giá trị bằng giá trị đã cho thì in vị trí của phần tử ra
Sắp xếp mảng tăng dần.
Tìm phần tử nhỏ nhất, đổi chỗ với phần tử đầu tiên của mảng
Lặp lại công việc với phần còn lại của mảng (kể từ phần
tử thứ hai) cho tới khi đổi chỗ hai phần tử cuối cùng
Trang 8Mảng hai chiều
Tình huống sử dụng:
Các bài toán với ma trận
Khai báo:
Biến_mảng: ARRAY[n1 n2,m1.m2] of KPT;
Ví dụ:
A, B, C : Array [1 10, 1 20] of real;
A, B, C là ba ma trận kích thước 10x20
Truy xuất:
A[i,j]: phần tử hàng i cột j
Trang 9Một số bài toán
Tính tổng các phần tử của ma trận
Tính tổng các phần tử dương/âm của ma trận
Tính tổng các phần tử trên đường chéo chính của ma trận
Cộng hai ma trận cùng kích thước
Nhân hai ma trận vuông, 2 ma trận bất kỳ
Ma trận chuyển vị
Ma trận đơn vị
Nghịch đảo ma trận
Ma trận tam giác
Trang 10Kiểu dữ liệu xâu ký tự
Khái niệm xâu ký tự: Xâu ký tự trong Pascal là
một chuỗi các ký tự liên tiếp nhau.
Khai báo:
Tên_biến_xâu: STRING[độ_dài_cực_đại]; hoặc:
Tên_biến_xâu: STRING;
Ví dụ
s: string [30]; { xâu có độ dài tối đa là 30 ký tự}
s1: string; { xâu có độ dài tối đa là 255 ký tự}
Trang 11Thao tác với xâu
Truy nhập từng ký tự của xâu:
Tên_biến_xâu [STT_ký_tự]
Vd: s[3] là ký tự thứ 3 trong xâu (coi như biến char)
Phép cộng xâu:
s := ‘ABC’ + ‘123’; {s = ‘ABC123’}
s := s + ‘XYZ’; {s = ‘ABC123XYZ’}
Phép so sánh: xâu nào đứng trước theo thứ tự từ
điển thì nhỏ hơn
‘abc’ < ‘abcd’; ‘Ha Noi’ < ‘Ha Tay’;
Trang 12Thao tác với xâu
Nhập/xuất xâu ký tự:
write / writeln: xuất
read / readln: nhập (nếu không nhập xâu mà gõ Enter luôn thì xâu sẽ là rỗng)
Trang 13Một số hàm/thủ tục xử lý xâu
Hàm length(st): độ dài xâu.
Thủ tục delete(st, pos, num): xóa num ký tự kể từ vị trí pos trong
xâu st.
Thủ tục insert(obj, st, pos): chèn xâu obj vào vị trí pos trong xâu st.
Thủ tục str(value, st): biến đổi giá trị value thành xâu lưu vào st.
Thủ tục val(st, var1, code): biến xâu st thành số chứa trong var1
(nguyên hoặc thực) Nếu thành công, code=0, nếu không, code=vị trí gặp lỗi trong xâu st khi biến đổi.
Hàm copy(st, pos, size): trả về size ký tự của xâu st kể từ vị trí pos.
Hàm concat(st1, st2, ): nối các xâu với nhau
Hàm pos(obj, target): trả về vị trí đầu tiên của xâu obj tìm thấy trong
xâu target.