Tải bản đầy đủ (.pdf) (7 trang)

cau truc du lieu 0054

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (293.45 KB, 7 trang )

NGUYỄN VĂN LINH
TRẦN CAO ĐỆ
TRƯƠNG THỊ THANH TUYỀN
LÂM HOÀI BẢO
PHAN HUY CƯỜNG
TRẦN NGÂN BÌNH

CẤU TRÚC DỮ LIỆU

Trang

1


Cấu trúc dữ liệu

Lời nói đầu

ĐẠI HỌC CẦN THƠ – 12/2003
LỜI NÓI ĐẦU
Để đáp ứng nhu cầu học tập của các bạn sinh viên, nhất là sinh viên chuyên ngành tin
học, Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ chúng tơi đã tiến hành biên
soạn các giáo trình, bài giảng chính trong chương trình học. Giáo trình mơn Cấu Trúc Dữ
Liệu này được biên soạn cơ bản dựa trên quyển "Data Structures and Algorithms" của
Alfred V. Aho, John E. Hopcroft và Jeffrey D. Ullman do Addison-Wesley tái bản năm
1987. Giáo trình này cũng được biên soạn dựa trên kinh nghiệm giảng dạy nhiều năm môn
Cấu Trúc Dữ Liệu và Giải Thuật của chúng tôi.
Tài liệu này được soạn theo đề cương chi tiết môn Cấu Trúc Dữ Liệu của sinh viên
chuyên ngành tin học của Khoa Công Nghệ Thơng Tin Trường Đại Học Cần Thơ. Mục tiêu
của nó nhằm giúp các bạn sinh viên chuyên ngành có một tài liệu cô đọng dùng làm tài liệu
học tập, nhưng chúng tơi cũng khơng loại trừ tồn bộ các đối tượng khác tham khảo. Chúng


tôi nghĩ rằng các bạn sinh viên không chuyên tin và những người quan tâm tới cấu trúc dữ
liệu và giải thuật sẽ tìm được trong này những điều hữu ích.
Mặc dù đã rất cố gắng nhiều trong quá trình biên soạn giáo trình nhưng chắc chắn giáo
trình sẽ cịn nhiều thiếu sót và hạn chế. Rất mong nhận được sự đóng góp ý kiến quý báu
của sinh viên và các bạn đọc để giáo trình ngày một hoàn thiện hơn.
Cần thơ, ngày 10 tháng 11 năm 2003
Các tác giả

Trần Cao Đệ
Nguyễn Văn Linh
Trương Thị Thanh Tuyền
Lâm Hồi Bảo
Phan Huy Cường
Trần Ngân Bình

Trang

2


Cấu trúc dữ liệu

Mục lục

MỤC LỤC
CHƯƠNG I

MỞ ĐẦU ..............................................................................................................9
U


I.

TỪ BÀI TỐN ĐẾN CHƯƠNG TRÌNH...................................................................................9
1. Mơ hình hóa bài tốn thực tế ................................................................................................9
2. Giải thuật (algorithms) .......................................................................................................12
3. Ngôn ngữ giả và tinh chế từng bước (Pseudo-language and stepwise refinement) ...........15
4. Tóm tắt................................................................................................................................17

II.

KIỂU DỮ LIỆU TRỪU TƯỢNG (ABSTRACT DATA TYPE)................................................18
1. Khái niệm trừu tượng hóa...................................................................................................18
2. Trừu tượng hóa chương trình .............................................................................................18
3. Trừu tượng hóa dữ liệu.......................................................................................................19

III.
KIỂU DỮ LIỆU - CẤU TRÚC DỮ LIỆU VÀ KIỂU DỮ LIỆU TRỪU TƯỢNG (DATA
TYPES, DATA STRUCTURES, ABSTRACT DATA TYPES) ..........................................................20
CHƯƠNG II CÁC KIỂU DỮ LIỆU TRỪU TƯỢNG CƠ BẢN ...............................................22
(BASIC ABSTRACT DATA TYPES) ......................................................................................22
I.
1.
2.
3.

KIỂU DỮ LIỆU TRỪU TƯỢNG DANH SÁCH (LIST) .........................................................24
Khái niệm danh sách ..........................................................................................................24
Các phép toán trên danh sách .............................................................................................24
Cài đặt danh sách................................................................................................................26


1.
2.
3.
4.

NGĂN XẾP (STACK) .............................................................................................................43
Định nghĩa ngăn xếp...........................................................................................................43
Các phép toán trên ngăn xếp ..............................................................................................44
Cài đặt ngăn xếp .................................................................................................................45
Ứng dụng ngăn xếp để loại bỏ đệ qui của chương trình.....................................................48

III.
1.
2.
3.
4.

HÀNG ĐỢI (QUEUE)........................................................................................................53
Định Nghĩa .........................................................................................................................53
Các phép toán cơ bản trên hàng..........................................................................................53
Cài đặt hàng........................................................................................................................53
Một số ứng dụng của cấu trúc hàng....................................................................................62

IV.

DANH SÁCH LIÊN KẾT KÉP (double - lists) ...................................................................62

II.

BÀI TẬP ............................................................................................................................................68

CHƯƠNG III CẤU TRÚC CÂY (TREES) ...............................................................................73
I.
1.
2.
3.
4.
II.
III.
1.

CÁC THUẬT NGỮ CƠ BẢN TRÊN CÂY...............................................................................74
Định nghĩa ..........................................................................................................................74
Thứ tự các nút trong cây.....................................................................................................75
Các thứ tự duyệt cây quan trọng.........................................................................................75
Cây có nhãn và cây biểu thức.............................................................................................76
KIỂU DỮ LIỆU TRỪU TƯỢNG CÂY ...................................................................................78
CÀI ĐẶT CÂY.....................................................................................................................79
Cài đặt cây bằng mảng .......................................................................................................79

Trang

3


Cấu trúc dữ liệu

Mục lục

2.
3.

4.

Biểu diễn cây bằng danh sách các con ...............................................................................85
Biểu diễn theo con trái nhất và anh em ruột phải:..............................................................86
Cài đặt cây bằng con trỏ .....................................................................................................87

IV.
1.
2.
3.

CÂY NHỊ PHÂN (BINARY TREES)....................................................................................87
Định nghĩa ..........................................................................................................................87
Duyệt cây nhị phân.............................................................................................................88
Cài đặt cây nhị phân ...........................................................................................................89

V.

CÂY TÌM KIẾM NHỊ PHÂN (BINARY SEARCH TREES) .....................................................92
1. Định nghĩa ..........................................................................................................................92
2. Cài đặt cây tìm kiếm nhị phân............................................................................................93

BÀI TẬP ..........................................................................................................................................100
CHƯƠNG IV
I.

TẬP HỢP ......................................................................................................103

KHÁI NIỆM TẬP HỢP.........................................................................................................104


II.

KIỂU DỮ LIỆU TRỪU TƯỢNG TẬP HỢP ....................................................................104

III.
1.
2.

CÀI ĐẶT TẬP HỢP..........................................................................................................105
Cài đặt tập hợp bằng vector Bit ........................................................................................105
Cài đặt bằng danh sách liên kết ........................................................................................107

IV.
1.
2.
3.

TỪ ĐIỂN (dictionary) .....................................................................................................111
Cài đặt từ điển bằng mảng................................................................................................111
Cài đặt từ điển bằng bảng băm .........................................................................................113
Các phương pháp xác định hàm băm ...............................................................................122

V.

HÀNG ƯU TIÊN (priority queue) ....................................................................................123
Khái niệm hàng ưu tiên ....................................................................................................123
Cài đặt hàng ưu tiên..........................................................................................................124

1.
2.


BÀI TẬP ..........................................................................................................................................131
CHƯƠNG V ĐỒ THỊ (GRAPH) .............................................................................................133
I.

CÁC ĐỊNH NGHĨA ..............................................................................................................134

II.

KIỂU DỮ LIỆU TRỪU TƯỢNG ĐỒ THỊ............................................................................135

III.
1.
2.

BIỂU DIỄN ĐỒ THỊ ........................................................................................................136
Biểu diễn đồ thị bằng ma trận kề......................................................................................136
Biểu diễn đồ thị bằng danh sách các đỉnh kề: ..................................................................138

IV.
1.
2.

CÁC PHÉP DUYỆT ĐỒ THỊ (traversals of graph).........................................................138
Duyệt theo chiều sâu (depth-first search) .........................................................................139
Duyệt theo chiều rộng (breadth-first search)....................................................................140

V.

MỘT SỐ BÀI TOÁN TRÊN ĐỒ THỊ ....................................................................................143

1. Bài tốn tìm đuờng đi ngắn nhất từ một đỉnh của đồ thị (the single source shorted path
problem) ...................................................................................................................................143
2. Tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh.............................................................145
3. Bài tốn tìm bao đóng chuyển tiếp (transitive closure)....................................................146

Trang

4


Cấu trúc dữ liệu

4.

Mục lục

Bài tốn tìm cây bao trùm tối thiểu (minimum-cost spanning tree).................................147

BÀI TẬP ..........................................................................................................................................150

Trang

5


Cấu trúc dữ liệu

Chương V: Đồ thị

BÀI TẬP

1. Viết biểu diễn đồ thị V.8 bằng:
- Ma trận kề.
- Danh sách các đỉnh kề.

2. Duyệt đồ thị hình V.8 (xét các đỉnh theo thứ tự a,b,c...)
- Theo chiều rộng bắt đầu từ a.
- Theo chiều sâu bắt đầu từ f
3. Áp dụng giải thuật Dijkstra cho đồ thị hình V.8, với đỉnh nguồn là

a.
4. Viết biểu diễn đồ thị V.9 bằng:
Ma trận kề.
Danh sách các đỉnh kề.
5. Duyệt đồ thị hình V.9 (xét các đỉnh theo thứ tự A,B,C...)
Theo chiều rộng bắt đầu từ A.
Theo chiều sâu bắt đầu từ B.
6. Áp dụng giải thuật Dijkstra cho đồ thị hình V.9, với đỉnh nguồn là A.
7. Tìm cây bao trùm tối thiểu của đồ thị hình V.9 bằng
Giải thuật Prim.
Giải thuật Kruskal.
8. Cài đặt đồ thị có hướng bằng ma trận kề rồi viết các giải thuật:
Duyệt theo chiều rộng.
Duyệt theo chiều sâu.
Tìm đường đi ngắn nhất từ một đỉnh cho trước (Dijkstra).
Tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh (Floyd).
9. Cài đặt đồ thị có hướng bằng danh sách các đỉnh kề rồi viết các giải thuật:
Duyệt theo chiều rộng.
Trang

150



Cấu trúc dữ liệu

Chương V: Đồ thị

Duyệt theo chiều sâu.
10. Cài đặt đồ thị vô hướng bằng ma trận kề rồi viết các giải thuật:
Duyệt theo chiều rộng.
Duyệt theo chiều sâu.
Tìm đường đi ngắn nhất từ một đỉnh cho trước (Dijkstra).
Tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh (Floyd).
Tìm cây bao trùm tối thiểu (Prim, Kruskal).
Cài đặt thuật tốn Greedy cho bài tốn tơ màu đồ thị (Gợi ý: xem giải thuật trong
chương 1)
11. Cài đặt đồ thị vô hướng bằng danh sách các đỉnh kề rồi viết các giải thuật:
Duyệt theo chiều rộng.
Duyệt theo chiều sâu.
12. Hãy viết một chương trình, trong đó, cài đặt đồ thị vô hướng bằng cấu trúc ma trận
kề rồi viết các thủ tục/hàm sau:
Nhập toạ độ n đỉnh của đồ thị.
Giả sử đồ thị là đầy đủ, tức là hai đỉnh bất kỳ đều có cạnh nối, và giả sử giá của mỗi cạnh
là độ dài của đoạn thẳng nối hai cạnh. Hãy tìm:
Đường đi ngắn nhất từ một đỉnh cho trước (Dijkstra).
Đường đi ngắn nhất giữa tất cả các cặp đỉnh (Floyd).
Cây bao trùm tối thiểu (Prim, Kruskal).
Thể hiện đồ thị lên màn hình đồ hoạ, các cạnh thuộc cây bao trùm tối thiểu được vẽ bằng
một màu khác với các cạnh khác.

Trang


151



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×