CẤU TRÚC DỮ LIỆU
VÀ GIẢI THUẬT
Vũ Song Tùng
1
NỘI DUNG
Giới thiệu chung
Danh sách tuyến tính
Cây
Đồ thị
Sắp xếp
Tìm kiếm
2
I. Giới thiệu chung
Các kỹ thuật lập trình
Ngôn ngữ giả lập trình
Sơ lược về CTDL và giải thuật
3
I. Giới thiệu chung
1.1. Các kỹ thuật lập trình
Lập trình hàm
–
–
–
Chia các giai đoạn của chương trình vào các hàm
Thể hiện những đoạn mã tương tự trong một hàm
Ưu điểm
•
•
Dễ quản lý
Tiết kiệm dung lượng chương trình
4
I. Giới thiệu chung
1.1. Các kỹ thuật lập trình
Lập trình hướng đối tượng
–
–
Trừu tượng hóa các thành phần của chương trình
Đặc điểm
•
•
•
Tính đóng gói – các thuộc tính của một thành phần và các hàm xử lý các thuộc tính đó được định nghĩa
trong cùng một khối
Tính đa hình – cho phép tạo ra nhiều hình thái của một loại thành phần
Tính kế thừa – cho phép sử dụng lại các định nghĩa đã có của một thành phần để tạo ra một thành phần
mới
5
I. Giới thiệu chung
1.2. Ngôn ngữ giả lập trình
Các quy ước
Các kiểu dữ liệu
ℝ, ℤ, ℕ
Mô tả
Tập các số thực, nguyên và tự nhiên
Kiểu bất kỳ
Mảng chứa � – � + 1 phần tử kiểu T
Dãy
Tập hợp
6
I. Giới thiệu chung
1.2. Ngôn ngữ giả lập trình
Các quy ước
Toán tử
Mô tả
Gán
So sánh
And, Or, Not logic
Làm tròn xuống và lên
Nếu C đúng thực hiện I, C sai thực hiện J
Dãy các phần tử
Tập hợp các phần tử
;
Ngắt các biểu thức
7
I. Giới thiệu chung
1.2. Ngôn ngữ giả lập trình
Biểu thức
Loại
Cú pháp
Khai báo biến
Điều
Điều kiện
kiện
Lặp xác định
Lặp xác định
Lặp không xác định
Lặp không xác định
8
I. Giới thiệu chung
1.2. Ngôn ngữ giả lập trình
Biểu thức
Loại
Cú pháp
Tạo con trỏ
Cấp phát bộ nhớ
Giải phóng bộ nhớ
Lấy
Lấy địa
địa chỉ
chỉ
Lấy
Lấy nội
nội dung
dung trong
trong con
con trỏ
trỏ
Truy
Truy cập
cập thành
thành viên
viên của
của con
con trỏ
trỏ
9
I. Giới thiệu chung
1.2. Ngôn ngữ giả lập trình
Hàm và thủ tục
10
I. Giới thiệu chung
1.2. Ngôn ngữ giả lập trình
Hướng đối tượng
11
I. Giới thiệu chung
1.3. Sơ lược về CTDL và giải thuật
Cấu trúc mảng
•
•
Tập hợp các phần tử cùng kiểu
–
–
được sắp xếp liên tiếp trong bộ nhớ
được xác định vị trí bằng chỉ số
Thường dùng để lưu trữ các danh sách tuyến tính có kích thước cố định
12
I. Giới thiệu chung
1.3. Sơ lược về CTDL và giải thuật
Cấu trúc liên kết
•
•
Tập hợp các phần tử (item) lưu trữ dữ liệu (info) và địa chỉ liên kết (link) đến phần tử khác
Dùng để lưu trữ danh sách động hoặc các cấu trúc phi tuyến
x
y
x
y
…
13
I. Giới thiệu chung
1.3. Sơ lược về CTDL và giải thuật
Giải thuật đệ quy
– Giải thuật gọi lại chính nó, gồm 2 thành phần:
•
•
Điều kiện dừng đệ quy
Gọi đệ quy
– Áp dụng giải thuật đệ quy khiến cho thuật toán trở nên mạch lạc
14
I. Giới thiệu chung
1.3. Sơ lược về CTDL và giải thuật
Độ phức tạp của thuật toán O(…)
–
–
Số lượng trung bình (Tcp) của phép toán phức tạp nhất trong thuật toán
Độ phức tạp của các thuật toán sắp xếp và tìm kiếm trong dãy n phần tử:
Thuật toán
Độ phức tạp
SelectSort
2
O(n )
InsertSort
2
O(n )
BubbleSort
2
O(n )
QuickSort
O(nlog2n)
HeapSort
O(nlog2n)
LinearSearch
O(n)
BinarySearch
O(log2n)
15
II. Danh sách tuyến tính
Ngăn xếp
Hàng đợi
Danh sách liên kết
16
II. Danh sách tuyến tính
2.1. Ngăn xếế
p (Stack)
Dãy các phầầ
n tửửđửợc thếm vào (push) và lầế
y ra (pop) tại cùng một đầầ
u cuử
a dãy
17
II. Danh sách tuyến tính
2.1. Ngăn xếế
p (Stack)
Định nghĩa ngăn xếế
p bằng maử
ng
18
II. Danh sách tuyến tính
2.2. Hàng đợi (Queue)
Dãy các phầầ
n tửửđửợc thếm vào (enqueue) và lầế
y ra (dequeue) tại hai đầầ
u khác nhau cuử
a dãy
19
II. Danh sách tuyến tính
2.2. Hàng đợi (Queue)
Định nghĩa hàng đợi bằng maử
ng
20
II. Danh sách tuyến tính
2.3. Danh sách liến kếế
t
Danh sách liến kếế
t 2 chiếầ
u
Dãy các phầầ
n tửửliên kêế
t với phầầ
n tửửphía sau (next) và phía trửớc (prev) trong dãy
21
II. Danh sách tuyến tính
2.3. Danh sách liên kết
Mô hình
…
…
Danh sách rỗng
– phần tử đầu danh sách
– phần tử cuối danh sách
22
II. Danh sách tuyến tính
2.3. Danh sách liến kếế
t
Định nghĩa –
23
II. Danh sách tuyến tính
2.3. Danh sách liến kếế
t
Định nghĩa –
24
II. Danh sách tuyến tính
2.3. Danh sách liến kếế
t
Định nghĩa –
25