Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 39 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
39
Dung lượng
6,66 MB
Nội dung
BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ngành: Công nghệ thông tin SINH VIÊN THỰC HIỆN: Bùi Đứa Toàn MÃ SỐ SINH VIÊN: 20012030356 LỚP: K20.PR02 GV HƯỚNG DẪN: Thầy Quảng BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ngành: Công nghệ thông tin SINH VIÊN THỰC HIỆN: Bùi Đức Toàn MÃ SỐ SINH VIÊN: 20012030356 LỚP: K20.PR02 GV HƯỚNG DẪN MÔN HỌC: Thầy Quảng NHẬN XÉT Nhận xét giảng viên hướng dẫn: ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… GIẢNG VIÊN HƯỚNG DẪN 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 LỜI CAM ĐOAN Em xin cam đoan tập lớn môn Cấu trúc liệu giải thuật kết thực thân em hướng dẫn thầy Quảng Những phần sử dụng tài liệu tham khảo tập lớn nêu rõ phần tài liệu tham khảo Các kết trình bày tập lớn chương trình xây dựng hồn tồn kết thân em thực Nếu vi phạm lời cam đoan này, em xin chịu hoàn toàn trách nhiệm trước khoa nhà trường Hà Nội, ngày … tháng … năm… Họ tên sinh viên 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 LỜI CẢM ƠN Để hồn thành tập lớn này, lời em xin phép gửi lời cảm ơn tới mơn Lập trình phát triển ứng dụng web nâng cao, Khoa Công nghệ thông tin – Trường Cao đẳng Công nghệ Bách Khoa Hà Nội tạo điều kiện thuận lợi cho em thực tập lớn môn học Đặc biệt em xin chân thành cảm ơn thầy Quảng tận tình hướng dẫn, bảo em suốt thời gian thực tập lớn vừa qua Em xin chân thành cảm ơn tất Thầy, Cô Trường tận tình giảng dạy, trang bị cho em kiến thức cần thiết, quý báu để giúp em thực tập lớn Mặc dù em có cố gắng, với trình độ cịn hạn chế, q trình thực đề tài khơng tránh khỏi thiếu sót Em hi vọng nhận ý kiến nhận xét, góp ý Thầy giáo, Cô giáo kết triển khai tập lớn Em xin trân trọng cảm ơn! 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 MỤC LỤC CHƯƠNG I: CƠ SỞ LÝ THUYẾT 1.1 1.1.1 1.2 1.2.1 Khái niệm giải thuật Giải thuật gì? Cấu trúc liệu mảng (Array) 18 Khái niệm 18 Mảng (Array) cấu trúc liệu cũ quan trọng Mảng lưu giữ số phần tử cố định phần tử có kiểu Hầu hết cấu trúc liệu sử dụng mảng để triển khai giải thuật Dưới khái niệm quan trọng liên quan tới Mảng .18 Phần tử: Mỗi mục lưu giữ mảng gọi phần tử 18 Chỉ mục (Index): Mỗi vị trí phần tử mảng có mục số sử dụng để nhận diện phần tử 18 Mảng gồm ghi có kiểu giống nhau, có kích thước cố định, phần tử xác định số 18 Mảng cấu trúc liệu cấp phát lien tục 18 1.2.2 Ưu điểm 18 Truy câp phàn tử với thời gian số O(1) 18 Sử dụng nhớ hiệu 18 Tính cục nhớ 18 1.2.3 Nhược điểm .18 Khơng thể thay đổi kích thước mảng chương trình dang thực 18 1.2.4 Mảng động .18 Mảng động (dynamic aray) : cấp phát nhớ cho mảng cách động trình chạy chương trình C malloc calloc, C++ new 18 Sử dụng mảng động ta bắt đầu với mảng có phàn tử, số lượng phàn tử vượt qua khả ảng ta gấp đơi kích thước mảng cuc copy phàn tử mảng cũ vào nửa đầu mảng 18 Ưu điểm: tránh lãng phí nhớ phải khai báo mảng có kích thước lớn từ đầu 18 Nhược điểm: 18 Phải thực them thao tác copy phần tử thay đổi kích thước 18 Một số thời gian thực thao tác khơng cịn số 18 1.2.5 Biểu diễn Cấu trúc liệu mảng 18 Mảng khai báo theo nhiều cách đa dạng ngơn ngữ lập trình Để minh họa, sử dụng phép khai báo mảng ngôn ngữ C: 19 19 Hình minh họa phần tử mục: 19 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 .19 Dưới số điểm cần ghi nhớ cấu trúc liệu mảng: 19 Chỉ mục bắt đầu với .19 Độ dài mảng 10, nghĩa mảng lưu giữ 10 phần tử 19 Mỗi phần tử truy cập thơng qua mục phần tử Ví dụ, lấy giá trị phần tử mục 27 .19 1.2.6 Phép toán hỗ trợ mảng .19 Duyệt: In tất phần tử mảng theo cách in phần tử 19 Chèn: Thêm phần tử vào mảng mục cho 19 Xóa: Xóa phần tử từ mảng mục cho 19 Tìm kiếm: Tìm kiếm phần tử sử dụng mục hay giá trị 19 Cập nhật: Cập nhật giá trị phần tử mục 19 Trong ngôn ngữ C, mảng khởi tạo với kích cỡ ban đầu, gán giá trị mặc định cho phần tử mảng theo thứ tự sau: 19 Kiểu liệu .19 Giá trị mặc định 19 bool 19 false 19 char 19 19 int .20 20 float 20 0.0 .20 double .20 0.0f 20 void 20 wchar_t .20 20 1.3 Danh sách liên kết (Linked list) 20 1.3.1 Khái niệm .20 1.7.1 Khái niệm 35 Cấu trúc liệu biểu diễn nút (node) kết nối cạnh Chúng ta tìm hiểu Cây nhị phân (Binary Tree) Cây tìm kiếm nhị phân (Binary Search Tree) phần 35 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Cây nhị phân cấu trúc liệu đặc biệt sử dụng cho mục đích lưu trữ liệu Một nhị phân có điều kiện đặc biệt nút có tối đa hai nút Một nhị phân tận dụng lợi hai kiểu cấu trúc liệu: mảng thứ tự danh sách liên kết (Linked List), việc tìm kiếm nhanh mảng thứ tự thao tác chèn xóa nhanh Linked List 35 35 Dưới số khái niệm quan trọng liên quan tới nhị phân: 35 Đường: dãy nút với cạnh 35 Nút gốc (Root): nút gọi nút gốc Một có nút gốc đường xuất phát từ nút gốc tới nút khác Nút gốc nút khơng có nút cha 35 Nút cha: nút ngoại trừ nút gốc mà có cạnh hướng lên nút khác gọi nút cha .35 Nút con: nút nút cho kết nối cạnh gọi nút nút 35 Nút lá: nút mà khơng có nút gọi nút 35 Cây con: biểu diễn nút 36 Truy cập: kiểm tra giá trị nút điều khiển nút 36 Duyệt: duyệt qua nút theo thứ tự 36 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Bậc: bậc nút biểu diễn số nút Nếu nút gốc có bậc 0, nút có bậc 1, nút cháu có bậc 2, … 36 Khóa (Key): biểu diễn giá trị nút dựa mà thao tác tìm kiếm thực nút .36 1.7.2 Hoạt động tìm kiếm nhị phân 36 Chèn: chèn phần tử vào cây/ tạo 36 Tìm kiếm: tìm kiếm phần tử 36 Duyệt tiền thứ tự: duyệt theo cách thức duyệt tiền thứ tự (tham khảo chương sau) .36 Duyệt trung thứ tự: duyệt theo cách thức duyệt trung thứ tự (tham khảo chương sau) .36 Duyệt hậu thứ tự: duyệt theo cách thức duyệt hậu thứ tự (tham khảo chương sau) .36 PHẦN KẾT LUẬN 36 TÀI LIỆU THAM KHẢO .38 CHƯƠNG I: CƠ SỞ LÝ THUYẾT 1.1 Khái niệm giải thuật 1.1.1 Giải thuật gì? Giải thuật (hay cịn gọi thuật tốn - tiếng Anh Algorithms) tập hợp hữu hạn thị để thực thi theo thứ tự để thu kết mong muốn Nói chung giải thuật độc lập với ngơn ngữ lập trình, tức giải thuật triển khai nhiều ngơn ngữ lập trình khác Xuất phát từ quan điểm cấu trúc liệu, số giải thuật quan trọng: Giải thuật Tìm kiếm: Giải thuật để tìm kiếm phần tử cấu trúc liệu Giải thuật Sắp xếp: Giải thuật để xếp phần tử theo thứ tự Giải thuật Chèn: Giải thuật để chèn phần từ vào cấu trúc liệu 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Giải thuật Cập nhật: Giải thuật để cập nhật (hay update) phần tử tồn cấu trúc liệu Giải thuật Xóa: Giải thuật để xóa phần tử tồn từ cấu trúc liệu 1.1.2 Đặc điểm giải thuật Không phải tất thủ tục gọi giải thuật Một giải thuật nên có đặc điểm sau: Tính xác định: Giải thuật nên rõ ràng không mơ hồ Mỗi giai đoạn (hay bước) nên rõ ràng mang mục đích định Dữ liệu đầu vào xác định: Một giải thuật nên có nhiều liệu đầu vào xác định Kết đầu ra: Một giải thuật nên có nhiều liệu đầu xác định, nên kết nối với kiểu kết bạn mong muốn Tính dừng: Các giải thuật phải kết thúc sau số hữu hạn bước Tính hiệu quả: Một giải thuật nên thi hành với nguồn có sẵn, tức có khả giải hiệu vấn đề điều kiện thời gian tài nguyên cho phép Tính phổ biến: Một giải thuật có tính phổ biến giải thuật giải lớp vấn đề tương tự Độc lập: Một giải thuật nên có thị độc lập với phần code lập trình 1.1.3 Giải thuật tiệm cận - Asymptotic Algorithms Phân tích tiệm cận giải thuật khái niệm giúp ước lượng thời gian chạy (Running Time) giải thuật Sử dụng phân tích tiệm cận, đưa kết luận tốt tình trường hợp tốt nhất, trường hợp trung bình, trường hợp xấu giải thuật Phân tích tiệm cận tức tiệm cận liệu đầu vào (Input), tức giải thuật khơng có Input kết luận cuỗi giải thuật chạy lượng thời gian cụ thể số Ngoài nhân tố Input, nhân tố khác xem không đổi Phân tích tiệm cận nói đến việc ước lượng thời gian chạy phép tính bước tính tốn Ví dụ, thời gian chạy phép tính ước lượng hàm f(n) với phép tính khác hàm g(n2) Điều có nghĩa thời gian chạy 10 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Trong đời sống thực, ngăn xếp cho phép hoạt động vị trí ngăn xếp Ví dụ, đặt thêm hay đĩa vào ngăn xếp Do đó, cấu trúc liệu trừu tượng ngăn xếp cho phép thao tác liệu vị trí Tại thời điểm nào, truy cập phần tử ngăn xếp Đặc điểm làm cho ngăn xếp trở thành cấu trúc liệu dạng LIFO LIFO viết tắt Last-In-First-Out Ở đây, phần tử đặt vào (được chèn, thêm vào) cuối truy cập Trong thuật ngữ ngăn xếp, hoạt động chèn gọi hoạt động PUSH hoạt động xóa gọi hoạt động POP Dưới sơ đồ minh họa ngăn xếp hoạt động diễn ngăn xếp Một ngăn xếp triển khai theo phương thức Mảng (Array), Cấu trúc (Struct), Con trỏ (Pointer) Danh sách liên kết (Linked List) Ngăn xếp dạng kích cỡ cố định ngăn xếp thay đổi kích cỡ Phần triển khai ngăn xếp sử dụng mảng với việc triển khai ngăn xếp cố định 1.4.2 Các hoạt động cấu trúc liệu ngăn xếp 25 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Các hoạt động ngăn xếp liên quan tới việc khởi tạo ngăn xếp, sử dụng sau xóa Ngồi hoạt động này, ngăn xếp có hai hoạt động nguyên sơ liên quan tới khái niệm, là: Hoạt động push(): lưu giữ phần tử ngăn xếp Hoạt động pop(): xóa phần tử từ ngăn xếp Khi liệu PUSH lên ngăn xếp: Để sử dụng ngăn xếp cách hiệu quả, cần kiểm tra trạng thái ngăn xếp Để phục vụ cho mục đích này, số tính hỗ trợ khác ngăn xếp: Hoạt động peek(): lấy phần tử liệu ngăn xếp, mà khơng xóa phần tử Hoạt động isFull(): kiểm tra xem ngăn xếp đầy hay chưa Hoạt động isEmpty(): kiểm tra xem ngăn xếp trống hay không Tại thời điểm, trì trỏ tới phần tử liệu vừa PUSH cuối vào ngăn xếp Vì trỏ ln biểu diễn vị trí ngăn xếp đặt tên top Con trỏ top cung cấp cho giá trị phần tử ngăn xếp mà khơng cần phải thực hoạt động xóa (hoạt động pop) Phần tìm hiểu phương thức để hỗ trợ tính ngăn xếp Phương thức peek() cấu trúc liệu ngăn xếp Bắt đầu hàm peek return stack[top] kết thúc hàm Phương thức isFull() cấu trúc liệu ngăn xếp Bắt đầu hàm isfull if top MAXSIZE return true else return false 26 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 kết thúc if kết thúc hàm Phương thức isEmpty() cấu trúc liệu ngăn xếp bắt đầu hàm isempty if top nhỏ return true else return false kết thúc if kết thúc hàm Hoạt động PUSH cấu trúc liệu ngăn xếp Tiến trình đặt (thêm) phần tử liệu vào ngăn xếp biết đến với tên Hoạt động PUSH Hoạt động push bao gồm bước sau: Bước 1: kiểm tra xem ngăn xếp đầy hay chưa Bước 2: ngăn xếp đầy, tiến trình bị lỗi Bước 3: ngăn xếp chưa đầy, tăng top để trỏ tới phần nhớ trống Bước 4: thêm phần tử liệu vào vị trí nơi mà top trỏ đến ngăn xếp Bước 5: trả success 27 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Nếu Danh sách liên kết sử dụng để triển khai ngăn xếp, bước cần cấp phát không gian động Hoạt động POP cấu trúc liệu ngăn xếp Việc truy cập nội dung phần tử xóa từ ngăn xếp gọi Hoạt động POP Trong triển khai Mảng hoạt động pop(), phần tử liệu khơng thực bị xóa, thay vào top bị giảm vị trí thấp ngăn xếp để trỏ tới giá trị Nhưng triển khai Danh sách liên kết, hoạt động pop() thực sụ xóa phần tử xữ liệu xóa khỏi khơng gian nhớ Hoạt động POP bao gồm bước sau: Bước 1: kiểm tra xem ngăn xếp trống hay không Bước 2: ngăn xếp trống, tiến trình bị lỗi Bước 3: ngăn xếp không trống, truy cập phần tử liệu top trỏ tới Bước 4: giảm giá trị top Bước 5: trả success 1.5 Cấu trúc liệu hàng đợi – Queue 1.5.1 Khái niệm Hàng đợi (Queue) cấu trúc liệu trừu tượng, tương tự hàng đợi đời sống hàng ngày (xếp hàng) 28 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Khác với ngăn xếp, hàng đợi mở hai đầu Một đầu luôn sử dụng để chèn liệu vào (hay gọi vào hàng) đầu sử dụng để xóa liệu (rời hàng) Cấu trúc liệu hàng đợi tuân theo phương pháp First-In-First-Out, tức liệu nhập vào truy cập Trong đời sống thực có nhiều ví dụ hàng đợi, chẳng hạn hàng xe ô tô đường chiều (đặc biệt tắc xe), xe vào thoát Một vài ví dụ khác xếp hàng học sinh, xếp hàng mua vé, … Giờ có lẽ bạn tưởng tượng hàng đợi Chúng ta truy cập hai đầu hàng đợi Dưới biểu diễn hàng đợi dạng cấu trúc liệu: Tương tự cấu trúc liệu ngăn xếp, cấu trúc liệu hàng đợi triển khai sử dụng Mảng (Array), Danh sách liên kết (Linked List), Con trỏ (Pointer) Cấu trúc (Struct) Để đơn giản, phần tìm hiểu tiếp hàng đợi triển khai sử dụng mảng chiều 1.4.2 Các hoạt động cấu trúc liệu hàng đợi Các hoạt động cấu trúc liệu hàng đợi liên quan tới việc khởi tạo hàng đợi, sử dụng liệu hàng đợi sau xóa liệu khỏi nhớ Danh sách số hoạt động thực cấu trúc liệu hàng đợi: Hoạt động enqueue(): thêm (hay lưu trữ) phần tử vào hàng đợi Hoạt động dequeue(): xóa phần tử từ hàng đợi 29 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Để sử dụng hàng đợi cách hiệu quả, cần kiểm tra trạng thái hàng đợi Để phục vụ cho mục đích này, số tính hỗ trợ khác hàng đợi: Phương thức peek(): lấy phần tử đầu hàng đợi, mà khơng xóa phần tử Phương thức isFull(): kiểm tra xem hàng đợi đầy hay không Phương thức isEmpty(): kiểm tra xem hàng đợi trống hay hay không Trong cấu trúc liệu hàng đợi, ln ln: (1) dequeue (xóa) liệu trỏ trỏ front (2) enqueue (nhập) liệu vào hàng đợi giúp đỡ trỏ rear Phương thức peek() cấu trúc liệu hàng đợi bắt đầu hàm peek return queue[front] kết thúc hàm Phương thức isFull() cấu trúc liệu hàng đợi Nếu sử dụng mảng chiều để triển khai hàng đợi, cần kiểm tra trỏ rear có tiến đến giá trị MAXSIZE hay không để xác định hàng đợi đầy hay không Trong trường hợp triển khai hàng đợi sử dụng Danh sách liên kết vòng (Circular Linked List), giải thuật cho hàm isFull() khác bắt đầu hàm isfull if rear equals to MAXSIZE return true else return false endif kết thúc hàm Phương thức isEmpty() cấu trúc liệu hàng đợi bắt đầu hàm isempty 30 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 if front nhỏ MIN OR front lớn rear return true else return false kết thúc if kết thúc hàm Nếu giá trị front nhỏ MIN tức hàng đợi chưa khởi tạo, hàng đợi trống Hoạt động enqueue cấu trúc liệu hàng đợi Bởi cấu trúc liệu hàng đợi trì hai trỏ liệu: front rear, hoạt động loại cấu trúc liệu phức tạp so sánh với cấu trúc liệu ngăn xếp Dưới bước để enqueue (chèn) liệu vào hàng đợi: Bước 1: kiểm tra xem hàng đợi có đầy khơng Bước 2: hàng đợi đầy, tiến trình bị lỗi bị Bước 3: hàng đợi không đầy, tăng trỏ rear để trỏ tới vị trí nhớ trống Bước 4: thêm phần tử liệu vào vị trí trỏ rear trỏ tới hàng đợi Bước 5: trả success Đôi cần kiểm tra xem hàng đợi khởi tạo hay chưa để xử lý tình khơng mong đợi 31 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Hoạt động dequeue cấu trúc liệu hàng đợi Việc truy cập liệu từ hàng đợi tiến trình gồm hai tác vụ: truy cập liệu nơi trỏ front trỏ tới xóa liệu sau truy cập Dưới bước để thực hoạt động dequeue: Bước 1: kiểm tra xem hàng đợi trống hay không Bước 2: hàng đợi trống, tiến trình bị lỗi bị Bước 3: hàng đợi không trống, truy cập liệu nơi trỏ front trỏ Bước 4: tăng trỏ front để trỏ tới vị trí chứa phần tử Bước 5: trả success 1.6 Cấu trúc liệu đồ thị (Graph) 1.6.1 Khái niệm Một đồ thị (đồ thị) dạng biểu diễn hình ảnh tập đối tượng, cặp đối tượng kết nối link Các đối tượng nối liền biểu diễn điểm gọi đỉnh (vertices), link mà kết nối đỉnh với gọi cạnh (edges) Nói chung, đồ thị cặp tập hợp (V, E), V tập đỉnh E tập cạnh mà kết nối cặp điểm Bạn theo dõi đồ thị sau: 32 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Trong đồ thị trên: V = {a, b, c, d, e} E = {ab, ac, bd, cd, de} 1.6.2 Cấu trúc đồ thị Các hình tốn học biểu diễn cấu trúc liệu Chúng ta biểu diễn hình sử dụng mảng đỉnh mảng hai chiều cạnh Trước tiếp tục, tìm hiểu vài khái niệm quan trọng sau: Đỉnh (Vertex): Mỗi nút hình biểu diễn đỉnh Trong ví dụ đây, hình trịn biểu diễn đỉnh Do đó, điểm từ A tới G đỉnh Chúng ta biểu diễn đỉnh sử dụng mảng, đỉnh A nhận diện mục 0, điểm B mục 1, … hình Cạnh (Edge): Cạnh biểu diễn đường nối hai đỉnh Trong hình dưới, đường nối A B, B C, … cạnh Chúng ta sử dụng mảng hai chiều để biểu diễn cạnh Trong ví dụ dưới, AB biểu diễn hàng 0; BC hàng 1, cột 2, … Kề nhau: Hai đỉnh kề chúng kết nối với thông qua cạnh Trong hình dưới, B kề với A; C kề với B, … Đường: Đường biểu diễn dãy cạnh hai đỉnh Trong hình dưới, ABCD biểu diễn đường từ A tới D 33 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Các thao tác cấu trúc liệu đồ thị Thêm đỉnh: Thêm đỉnh vào đồ thị Thêm cạnh: Thêm cạnh vào hai đỉnh đồ thị Hiển thị đỉnh: Hiển thị đỉnh đồ thị 1.7 Cấu trúc liệu (tree) 1.7.1 Khái niệm Cấu trúc liệu biểu diễn nút (node) kết nối cạnh Chúng ta tìm hiểu Cây nhị phân (Binary Tree) Cây tìm kiếm nhị phân (Binary Search Tree) phần Cây nhị phân cấu trúc liệu đặc biệt sử dụng cho mục đích lưu trữ liệu Một nhị phân có điều kiện đặc biệt nút có tối đa hai nút Một nhị phân tận dụng lợi hai kiểu cấu trúc liệu: mảng thứ tự danh sách liên kết (Linked List), việc tìm kiếm nhanh mảng thứ tự thao tác chèn xóa nhanh Linked List 34 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Dưới số khái niệm quan trọng liên quan tới nhị phân: Đường: dãy nút với cạnh Nút gốc (Root): nút gọi nút gốc Một có nút gốc đường xuất phát từ nút gốc tới nút khác Nút gốc nút khơng có nút cha Nút cha: nút ngoại trừ nút gốc mà có cạnh hướng lên nút khác gọi nút cha Nút con: nút nút cho kết nối cạnh gọi nút nút Nút lá: nút mà khơng có nút gọi nút Cây con: biểu diễn nút Truy cập: kiểm tra giá trị nút điều khiển nút Duyệt: duyệt qua nút theo thứ tự Bậc: bậc nút biểu diễn số nút Nếu nút gốc có bậc 0, nút có bậc 1, nút cháu có bậc 2, … Khóa (Key): biểu diễn giá trị nút dựa mà thao tác tìm kiếm thực nút 1.7.2 Hoạt động tìm kiếm nhị phân Chèn: chèn phần tử vào cây/ tạo Tìm kiếm: tìm kiếm phần tử 35 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Duyệt tiền thứ tự: duyệt theo cách thức duyệt tiền thứ tự (tham khảo chương sau) Duyệt trung thứ tự: duyệt theo cách thức duyệt trung thứ tự (tham khảo chương sau) Duyệt hậu thứ tự: duyệt theo cách thức duyệt hậu thứ tự (tham khảo chương sau) CHƯƠNG 2: THỰC HÀNH 2.1 Đề Viết hàm khai báo cac chương trình cài đặt danh sách mảng Dùng chương trình để: - Chương trình nhận dãy số nguyên nhập từ bàn phím, lưu trữ danh sách thứ tự ngược với thú tự nhập vào 2.2 Phân tích Sử dụng cấu trúc Struct Viết ngôn ngữ C++ Dùng thư viện string để nhập 2.3 Code 36 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 2.4 Giải thích Hàm để nhập dãy phần tử vào danh sách Hàmđể thị danh sách Console 2.5 Kết 37 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 PHẦN KẾT LUẬN Những việc hồn thiện Chương trình chạy ổn định Kết theo đề Những việc chưa hoàn thiện Còn thiếu nhiều trường hợp đặc biệt Chưa tối ưu hoàn toàn 38 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99