Giáo trình Cấu trúc dữ liệu và giải thuật được biên soạn gồm có 6 chương với những nội dung chính sau: Chương I: Tổng quan về cấu trúc dữ liệu và giải thuật; Chương II: Đệ quy và giải thuật đệ quy; Chương III: Tìm kiếm; Chương IV: Các phương pháp sắp xếp cơ bản; Chương V: Danh sách; Chương VI: Cây nhị phân. Mời các bạn cùng tham khảo để biết thêm nội dung chi tiết.
TẬP ĐỒN DỆT MAY VIỆT NAM TRƢỜNG CAO ĐẲNG CƠNG NGHỆ THÀNH PHỐ HỒ CHÍ MINH Giáo Trình CẤU TRÚC DỮ LIỆU GIẢI THUẬT Nghề: Công nghệ thông tin Trình độ: Cao Đẳng (Ban hành theo Quyết định số: ngày tháng trường Cao đẳng Công nghệ Tp.HCM) TP.HỒ CHÍ MINH, THÁNG 07 NĂM 2021 năm Tuyên bố quyền Giáo trình sử dụng làm tài liệu giảng dạy lưu hành nội trường Cao đẳng Công nghệ Tp.HCM Cao đẳng Công nghệ Tp.HCM không sử dụng không cho phép cá nhân hay tổ chức sử dụng giáo trình với mục đích kinh doanh Mọi trích dẫn, sử dụng giáo trình với mục đích khác hay nơi khác phải đồng ý văn Cao đẳng Cơng nghệ Tp.HCM LỜI NĨI ĐẦU Tài liệu dùng cho học sinh hệ Trung cấp sinh viên hệ Cao đẳng ngành công nghệ thông tin học tập nghiêm cứu “Cấu trúc liệu giải thuật” Tài liệu gồm nội dung chisng sau: Chương 1: Tổng quan cấu trúc liệu giải thuật, tiêu chuẩn danh gia cấu trúc liệu ,phản ánh thực tếp, phù hợp với thao tác đó, tiết kiệm tài nguyên hệ thống Kiểu liệu, kiểu liệu bản, kiểu liệu có cấu trúc, kiểu chuỗi ký tự, kiểu mảng, kiểu union, kiểu mẫu tin (cấu trúc), kiểu trỏ, kiểu tập tin, mối quan hệ cấu trúc liệu giải thuật Chương 2: ệ quy giải thuật đệ quy, khái niệm đệ quy, thuật toán đệ quy chương trình đệ quy, giải thuật đệ quy, chương trình đệ quy Các tốn đệ quy bản, hàm tính giai thừa, dãy số fibonacci Chương 3: Tìm kiếm, tìm kiếm tuyến tính,tìm kiếm nhị phân, giải thuật, cài đặt, đánh giá giải Chương 4: Các phương pháp xếp bản, định nghĩa toán xếp, phương pháp chọn (Selection Sort), chèn (Insertion Sort), đổi chỗ (Interchange Sort), bọt (Bubble Sort), xếp nhanh Quick Sort, giải thuật phân hoạch dãy al, al+1, , ar thành dãy con, giải thuật phân hoạch dãy xếp dãy al, al+1, , ar, cài đánh giá giải thuật Chương 5: Danh sách, danh sách liên kết (Xâu liên kết), định nghiã, biểu diễn Xâu liên kết, danh sách liên kết đơn (Xâu đơn), khai báo xâu liên kết đơn, thao tác xâu liên kết đơn, loại bỏ phần tủ xâu, duyệt xâu, thứ tự Xâu, thuật Toán QuickSort, ngăn xếp – stack,cài đặt ngăn xếp xâu đơn, cài đặt ngăn xếp mảng thao tác, ứng dụng ngăn xếp xử lý biểu thức hậu tố Hàng đợi – Queue, khái niệm, cài đặt hàng đợi xâu liên kết, cài đặt hàng đợi mảng Chương 6: Cây nhị phân, định nghĩa khái niệm bản, định nghĩa cây, khái niệm khác, nhị phân, định nghĩa, vài tính chất nhị phân, biểu diễn nhị phân, duyệt nhị phân, định nghĩa, thuật toán duyệt nhị phân, cài đặt thuật toán duyệt qua nhị phân LNR, cài đặt nhị phân Cây tìm kiếm nhị phân (Binary Search Trees), định nghĩa, cài đặt tìm kiếm nhị phân, tìm kiếm phần tử BST, chèn phần tử vào BST, xây dựng BST, phương pháp xếp BST, xóa phần tử khỏi BST, hủy nhị phân Tài liệu không đề cập đến vấn đề sở lý luận mà cịn trình bày số kỹ năng, kinh nghiệm cần thiết để thiết kế cài đặt mạng máy tính Hy vọng có ích cho bạn học sinh sinh viên người muốn xây dựng hệ thống tin học ứng dụng phục vụ cho sản xuất, quản lý doanh nghiệp Có thể cịn nhiều thiếu sót trình bày biên soạn khả năng, trình độ, người biên soạn mạnh dạn giới thiệu tài liệu mong nhận góp ý bạn đọc Mục lục MỤC LỤC Chương 1: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 01 I Các tiêu chuẩn danh gia cấu trúc liệu 01 Phản ánh thực tế 01 Phù hợp với thao tác 01 Tiết kiệm tài nguyên hệ thống 02 II Kiểu liệu 02 III Kiểu liệu 03 IV Các kiểu liệu có cấu trúc 04 Kiểu chuỗi ký tự 04 Kiểu mảng 05 Kiểu Union 06 Kiểu mẫu tin (cấu trúc) 07 Kiểu trỏ 12 Kiểu tập tin 26 Mối quan hệ cấu trúc liệu giải thuật 37 Bài tập 38 Chương 2: Ệ QUY V GIẢI THUẬT Ệ QUY 39 I Khái niệm đệ quy 39 II Thuật toán đệ quy chương trình đệ quy 39 Giải thuật đệ quy 39 Các chương trình đệ quy 41 III Các toán đệ quy 46 Hàm tính giai thừa 46 Dãy số Fibonacci 47 Bài tập 48 Chương 3: T M KI M 49 I Tìm kiếm tuyến tính 49 Giải thuật 50 Cài đặt 51 Ðánh giá giải thuật 51 II Tìm kiếm nhị phân 51 Giải thuật 51 Cài đặt 52 Ðánh giá giải thuật 53 Bài tập 54 Mục lục Chương 4: C C PH NG PH P SẮP X P C BẢN 55 I ịnh nghĩa toán xếp 55 II Phương pháp chọn (Selection Sort) 55 Giải thuật 55 Ví dụ 56 Cài đặt 57 Ðánh giá giải thuật 57 III Phương pháp chèn (Insertion Sort) 58 Giải thuật 58 Ví dụ 59 Cài đặt 59 ánh giá giải thuật 60 III Phương pháp đổi chỗ (Interchange Sort) 61 Giải thuật 61 Ví dụ 61 Cài đặt 64 Ðánh giá giải thuật 64 IV Phương pháp bọt (Bubble Sort) 65 Giải thuật 65 Ví dụ 65 Cài đặt 67 Ðánh giá giải thuậ 68 V Phương pháp xếp nhanh Quick Sort 68 Giải thuật phân hoạch dãy al, al+1, , ar thành dãy 69 Giải thuật phân hoạch dãy xếp dãy al, al+1, , ar 69 Cài đặt 71 Ðánh giá giải thuật 72 Bài tập 72 Chương 5: D NH S CH 74 I Danh sách liên kết (Xâu liên kết ) 74 ịnh nghiã 74 Biểu diễn Xâu liên kết 74 II Danh sách liên kết đơn (Xâu đơn) 75 Khai báo xâu liên kết đơn 75 Các thao tác xâu liên kết đơn 76 Loại bỏ phần tủ xâu 81 Duyệt xâu 85 Mục lục Sắp thứ tự Xâu 85 Thuật Toán QuickSort 86 III Ngăn xếp – stack 87 ịnh nghiã 87 Cài đặt ngăn xếp xâu đơn 88 Cài đặt ngăn xếp mảng thao tác 90 Ứng dụng ngăn xếp xử lý biểu thức hậu tố 91 IV Hàng đợi – Queue 94 Khái niệm 94 Cài đặt hàng đợi xâu liên kết 95 Cài đặt hàng đợi mảng 96 Bài tập 99 Chương 6: CÂY NH PHÂN 102 I ịnh nghĩa khái niệm 102 ịnh nghĩa 102 Các khái niệm khác 102 II Cây nhị phân 104 ịnh nghĩa 104 Vài tính chất nhị phân 104 Biểu diễn nhị phân 104 III Duyệt nhị phân 106 ịnh nghĩa 106 Các thuật toán duyệt nhị phân 106 Cài đặt thuật toán duyệt qua nhị phân LNR 107 Cài đặt nhị phân 109 III Cây tìm kiếm nhị phân (Binary Search Trees) 112 ịnh nghĩa 112 Cài đặt tìm kiếm nhị phân 113 Tìm kiếm phần tử BST 113 Chèn phần tử vào BST, xây dựng BST 115 Phương pháp xếp BST 118 Xóa phần tử khỏi BST, hủy nhị phân 118 Bài tập 122 CHƢƠNG TRÌNH MƠN HỌC Tên môn học: Cấu trúc liệu giải thuật Mã môn học: MH 12 Thời gian thực môn học: 45 giờ; (Lý thuyết: 15 giờ; Thực hành, thí nghiệm, thảo luận, tập: 28 giờ; Kiểm tra: giờ) I Vị trí, tính chất mơn học: - Vị trí: mơn học bố trí sau người học học xong mơn học: Lập trình bản, Cơ sở liệu - Tính chất: mơn học sở ngành bắt buộc II Mục tiêu môn học: - Về kiến thức: Hiểu mối quan hệ cấu trúc liệu giải thuật Phân tích kiểu liệu, giải thuật, kết hợp chúng để tạo thành chương trình máy tính Biết cách tổ chức liệu hợp lý, khoa học cho chương trình đơn giản Biết áp dụng thuật toán hợp lý cấu trúc liệu tương thích để giải tốn thực tế Biết áp dụng phương pháp xếp, tìm kiếm đơn giản - Về kỹ năng: ánh giá kỹ thực hành người học: Dùng ngôn ngữ lập trình thể máy tính tốn cần kiểm nghiệm về: đệ qui, danh sách, cây, đồ thị, xếp, tìm kiếm - Về lực tự chủ trách nhiệm: Rèn luyện tư logic để phân tích, tổng hợp Thao tác cẩn thận, tỉ mỉ III Nội dung môn học: Chƣơng I: Tổng quan cấu trúc liệu giải thuật Chương I: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Mục tiêu: Mô tả khái niệm giải thuật, mối quan hệ cấu trúc liệu giải thuật Trình bày tiêu chuẩn để đánh giá độ phức tạp giải thuật Ghi nhớ kiểu liệu bản, kiểu liệu trừu tượng cấu trúc liệu Thực thao tác an tồn với máy tính Nội dung chính: Chương trình bày tổng quan cấu trúc liệu giải thuật, tiêu chuẩn danh gia cấu trúc liệu ,phản ánh thực tếp, phù hợp với thao tác đó, tiết kiệm tài nguyên hệ thống Kiểu liệu, kiểu liệu bản, kiểu liệu có cấu trúc, kiểu chuỗi ký tự, kiểu mảng, kiểu union, kiểu mẫu tin (cấu trúc), kiểu trỏ, kiểu tập tin, mối quan hệ cấu trúc liệu giải thuật I KHÁI NIỆM THUẬT GIẢI VÀ ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA GIẢI THUẬT Khái niệm thuật giải 1.1 Thuật giải Tập bước tính tốn để đạt kết mong muốn Khi có mơ hình thích hợp cho tốn ta cần cố gắng tìm cách giải tốn mơ hình Khởi đầu tìm giải thuật, chuỗi hữu hạn thị (instruction) mà thị có ý nghĩa rõ ràng thực lượng thời gian hữu hạn Knuth (1973) định nghĩa giải thuật chuỗi hữu hạn thao tác để giải tốn Các tính chất quan trọng giải thuật là: - Hữu hạn (finiteness): giải thuật phải luôn kết thúc sau số hữu hạn bước - Xác định (definiteness): bước giải thuật phải xác định rõ ràng phải thực xác, quán - Hiệu (effectiveness): thao tác giải thuật phải thực lượng thời gian hữu hạn Mỗi thuật tốn có liệu vào (Input) liệu (Output); Nói tóm lại, giải thuật phải giải xong công việc ta cho liệu vào Có nhiều cách để thể giải thuật: dùng lời, dùng lưu đồ, Và lối dùng Chƣơng I: Tổng quan cấu trúc liệu giải thuật phổ biến dùng ngôn ngữ giả, kết hợp ngơn ngữ tự nhiên cấu trúc ngơn ngữ lập trình Ví dụ: Tính tổng số nguyên lẻ từ 1n B1: S=0 B2: i=1 B3: Nếu i>n sang B7, ngược lại sang B4 B4: S=S+i B5: i=i+2 B6: Quay lại B3 B7: Tổng cần tìm S 1.2 Đặc trưng thuật giải - Tính đắn: Thuật tốn cần phải đảm bảo cho kết sau thực liệu đầu vào ây nói đặc trưng quan trọng thuật toán: Thuật toán cần phải đảm bảo dừng sau số hữu hạn bước - Tính xác định: Các bước thuật tốn phải phát biểu rõ ràng, cụ thể, tránh gây nhập nhằng nhầm lẫn người đọc hiểu, cài đặt thuật tốn - Tính hiệu quả: Thuật tốn xem hiệu có khả giải hiệu toán đặt thời gian điều kiện cho phép thực tế đáp ứng yêu cầu người dùng - Tính phổ qt: Thuật tốn gọi có tính phố quát (phổ biến) giải lớp toán tương tự 1.3 Biểu diễn thuật giải - Cách 1: Mô tả bước thực thuật giải - Cách 2: Sử dụng sơ đồ giải thuật Ví dụ: mơ tả thuật tốn giải phương trình bậc ax+b=0 (a,b số thực) Cách 1: Mô tả bước thực thuật toán Chƣơng I: Tổng quan cấu trúc liệu giải thuật Cách 2: Sử dụng sơ đồ giải thuật Sử dụng ký hiệu hình khối để tạo thành mơ tả mang tính hình thức Hình 3.1 ký hiệu hình khối Chƣơng VI : Cây nhị phân 105 + Duyệt qua theo thứ tự cuối (LRN) đó: L : quét trái nút R : quét phải nút N : xử lý nút Các thuật toán duyệt nhị phân * Thuật toán duyệt qua theo thứ tự (LNR: Trái - Gốc - Phải) : + Duyệt qua trái theo thứ tự giữa; + Duyệt qua gốc; + Duyệt qua phải theo thứ tự * Thuật toán duyệt qua theo thứ tự đầu (NLR: Gốc - Trái - Phải): + Duyệt qua gốc; + Duyệt qua trái theo thứ tự đầu; + Duyệt qua phải thứ tự đầu Thuật toán NLR duyệt theo chiều sâu * Thuật toán duyệt qua theo thứ tự cuối (LRN: Trái - Phải - Gốc): + Duyệt qua trái theo thứ tự cuối; + Duyệt qua phải theo thứ tự cuối; + Duyệt qua gốc * Ví dụ: Biểu diễn biểu thức: A - B * C + D lên nhị phân: Duyệt theo thứ tự khác nhau: LNR: A - B * C + D ( biểu thức trung tố ) NLR: + - A * B C D ( biểu thức tiền tố ) LRN: A B C * - D + ( biểu thức hậu tố ) Với cách biểu diễn biểu thức số học dạng nhị phân, dựa cách duyệt LRN ta tính giá trị biểu thức (Bài tập) Do định nghĩa đệ quy nhị phân, thuật toán duyệt qua theo kiểu đệ quy thích hợp Cài đặt thuật tốn duyệt qua nhị phân LNR Chƣơng VI : Cây nhị phân 106 3.1 Cài đặt thuật toán LNR dư i dạng đệ qui : /* Input: - Root : trỏ đến nút gốc nhị phân Output: - Duyệt qua xử lý nút nhị phân theo thứ tự LNR */ void LNRĐệQuy (TreePointer Root) { if (Root != NULL) { LNR ệQuy (Root->LChild); Xử lý (Root); //Xử lý theo yêu cầu cụ thể, chẳng hạn: Xuất(Root->Data); LNR ệQuy (Root->RChild) ; } return; } Thuật toán duyệt nhị phân theo thứ tự (LNR) viết lại dạng lặp, cách sử dụng stack để lưu lại địa nút gốc trước đến trái Trước hết, ta khai báo cấu trúc nút stack trên: typedef struct NS { TreePointer Data; struct NS * Next; } NodeStack; typedef NodeStack * StackType; 3.2 Cài đặt thuật toán LNR dư i dạng lặp : /* Input: - Root : trỏ đến nút gốc nhị phân Output: - Duyệt qua xử lý nút nhị phân theo thứ tự LNR */ void LNRLap(TreePointer Root) { TreePointer p; int TiepTuc = 1; StackType S; p = Root; S = CreateEmptyStack(); // Khởi tạo ngăn xếp rỗng { while (p != NULL) { Push(S,p); // ẩy p vào stack S p = p->LChild; } if (!EmptyStack(S)) // Nếu stack S khác rỗng { Chƣơng VI : Cây nhị phân 107 Pop(S,p); // Lấy phần tử p đỉnh stack S XuLy(p); p = p->RChild; } else TiepTuc = 0; } while (TiepTuc); return ; } Với hai trường hợp duyệt lại (NLR LRN), ta cài đặt chúng dạng đệ quy lặp (bài tập) Một cách tổng quát, ta viết lại ba thuật tốn duyệt dạng lặp (bài tập) Cài đặt nhị phân Tương tự tổng quát, ta cài đặt nhị phân trỏ cách thiết kế nút có hai trỏ, trỏ trỏ nút trái, trỏ trỏ nút phải, trường Data chứa nhãn nút typedef … TData; typedef struct Tnode { TData Data; TNode* left,right; }; typedef TNode* TTree; Với cách khai báo ta thiết kế phép tốn nhị phân sau : Tạo rỗng Cây rỗng không chứa nút Như tạo rỗng ta cần cho trỏ tới giá trị NULL void MakeNullTree(TTree *T) { (*T)=NULL; } Kiểm tra rỗng int EmptyTree(TTree T) { return T==NULL; } Chƣơng VI : Cây nhị phân 108 Xác định trái nút TTree LeftChild(TTree n) { if (n!=NULL) return n->left; else return NULL; } Xác định phải nút TTree RightChild(TTree n) { if (n!=NULL) return n->right; else return NULL; } Kiểm tra nút lá: Nếu nút nút khơng có nên trái phải NULL int IsLeaf(TTree n) { if(n!=NULL) return(LeftChild(n)==NULL)&&(RightChild(n)==NULL); else return NULL; } Xác định số nút int nb_nodes(TTree T) { if(EmptyTree(T)) return 0; else return 1+nb_nodes(LeftChild(T))+ nb_nodes(RightChild(T)); } Các thủ tục duyệt cây: tiền tự, trung tự, hậu tự Thủ tục duyệt tiền tự void PreOrder(TTree T) { coutData) return TìmBSTĐệQuy (Root->RChild,Item); else return TìmBSTĐệQuy (Root->LChild,Item); } else return(NULL); } * Thủ tục viết dạng đệ qui thích hợp với lối tư tự nhiên giải thuật định nghĩa đệ qui nhị phân Song trường hợp thủ tục viết dạng lặp lại tỏ hiệu Thuật tốn tìm kiếm dạng lặp: /* Input: - Root: trỏ đến nút gốc BST - Item: giá trị khóa phần tử cần tìm Output: - Trả trỏ LocPtr đến nút BST chứa Item trỏ Parent đến nút cha nút chứa Item tìm thấy Item BST - Trả trị NULL ngược lại */ TreePointer TìmBSTLặp(TreePointer Root, ElementType Item, TreePointer &Parent) { TreePointer LocPtr = Root; Parent = NULL; while (LocPtr != NULL) if (Item==LocPtr->Data) return (LocPtr); else {Parent = LocPtr; if (Item > LocPtr->Data) LocPtr = LocPtr->RChild; else LocPtr = LocPtr->LChild; } return(NULL); } Với cấu trúc cây, việc tìm kiếm theo khóa nhanh nhiều so với cấu trúc danh sách liên kết Chi phí tìm kiếm (độ phức tạp) trung bình nhị phân có n nút khoảng log2 n 5.4 Chèn phần t vào BST, xây dựng BST Việc chèn thêm phần tử Item vào BST cần phải thỏa ràng buộc định nghĩa BST Trước chèn Item, ta cần tìm khóa Item có BST hay khơng, có khỏi chèn (do BST ta chứa phần tử có khóa Chƣơng VI : Cây nhị phân 112 khác nhau); ngược lại, chấm dứt thao tác tìm kiếm ta biết vị trí chèn (ở nút lá) * Ví dụ: Giả sử ta có BST (với nút có khóa khác nhau): Ta cần thêm phần tử „R‟: Yêu cầu “vào – ra” thao tác chèn: /* Input: - Root: trỏ đến nút gốc BST - Item: giá trị liệu nút cần chèn Output: - Trả trị trỏ Root đến nút gốc BST chèn - Trả trị -1 Item có - Trả trị gặp lỗi cấp phát nhớ cho nút */ Thao tác chèn nút Item vào BST (dạng lặp): int ChènBSTLặp(TreePointer &Root, ElementType Item) { TreePointer LocPtr, Parent; if (TìmBSTLặp(Root, Item, Parent)) { cout RChild = NULL; Chƣơng VI : Cây nhị phân 113 if (Parent == NULL) Root = LocPtr; // rỗng else if (Item < Parent->Data) Parent->LChild = LocPtr; else Parent->RChild = LocPtr; return 1; } } Thủ tục chèn nút Item vào BST (dạng đệ qui): int ChènBSTĐệQui(TreePointer &Root, ElementType Item) { TreePointer LocPtr; if (Root == (TreePointer) NULL) // chèn nút vào rỗng { if ((Root = CấpPhát ()) == NULL) return 0; Root ->Data = Item; Root ->LChild = NULL; Root ->RChild = NULL; } else if (Item < Root->Data) ChènBSTĐệQui (Root->LChild,Item); else if (Item > Root->Data) ChènBSTĐệQui(Root->RChild,Item); else { cout LChild; if (SubTree == NULL ) SubTree = x->RChild; //SubTree khác rỗng (nếu có) x if (Parent == NULL) Root = SubTree; // xoá nút gốc else if (Parent->LChild == x) Parent->LChild = SubTree ; else Parent->RChild = SubTree; delete x; Xố nút có hai nút con: Giả sử ta cần xố nút E có nút BST sau : ưa trường hợp đầu cách sau: Thay trị nút mà x trỏ đến trị nút theo thứ tự (nút nút cực trái xa theo nhánh phải x, nút nhỏ (tất nhiên theo trường khóa) số nút lớn x->Data) Sau xố nút (nút nút có tối đa nút ) Chƣơng VI : Cây nhị phân 116 * Sau ta xây dựng thủ tục XóaBST để xóa nút Item BST Trong thủ tục có dùng đến thủ tục TìmBSTLặp Thủ tục XốBST tìm nút có khóa Item xố khỏi BST Gọi: - x: trỏ đến nút chứa Item - xSucc: phần tử x theo thứ tự (nếu x có con) - Parent: trỏ đến cha x hay xSucc - SubTree: trỏ đến x /* Input: - Root: trỏ đến nút gốc BST - Item: giá trị liệu nút cần xóa Output: - Trả trị trỏ Root đến nút gốc BST tìm thấy nút chứa Item xoá - Trả trị ngược lại */ int XóaBST (TreePointer &Root, ElementType Item) { TreePointer x,Parent, xSucc,SubTree; if ((x = TìmBSTLặp(Root,Item,Parent)) ==NULL) return 0;//không thấy Item else { if ((x->LChild != NULL) && (x->RChild != NULL)) // nút có Chƣơng VI : Cây nhị phân 117 { xSucc = x->RChild; Parent = x; while (xSucc->LChild != NULL) { Parent = xSucc; xSucc = xSucc->LChild; } x->Data = xSucc->Data; x = xSucc; } //đã đưa nút có nút có tối đa SubTree = x->LChild; if (SubTree == NULL) SubTree = x->RChild; if (Parent == NULL) Root = SubTree; // xoá nút gốc else if (Parent->LChild == x) Parent->LChild = SubTree; else Parent->RChild = SubTree; delete x; return 1; } } Ta hủy tồn BST cách sử dụng ý tưởng duyệt theo thứ tự cuối LRN: hủy trái, hủy phải hủy nút gốc void HủyCâyNhịPhân (PointerType &Root) { if (Root) { HủyCâyNhịPhân (Root->LChild); HủyCâyNhịPhân (Root->RChild); delete Root; } return ; } Chƣơng VI : Cây nhị phân 118 BÀI TẬP Hãy vẽ tất nhị phân có nút, nút Viết chương trình nhập vào nhịp phân Hãy cài đặt tác vụ sau: a Xác định số nút cậy b Xác định số c Xác định số nút có d Xác định số nút có hai e Xác định chiều sâu f Xác định số nút mức Tài liệu tham khỏa 119 TÀI LIỆU THAM KHẢO Trần hạnh Nhi, Dƣơng Anh Đức, “Giáo trình cấu trúc liệu giải thật”NXB ại học Quốc gia Tp.HCM, 2010 Đỗ Xuân Lôi, “Giáo trình Cấu trúc liệu giải thuật”- NXB Khoa học Kỹ thuật, 1996 Nguyễn Hồng Chƣơng, “Cấu trúc liệu - Ứng dung cài đặt C”, NXB Tp.HCM, 1999 N.Wirtyh, “Algorithms + data Structure = Programs”, Prentise Hall, 1976 R.F.Gilberg & B.A Forouzan, “Data Strutures: A Pseudocode Approach with C, Second Edition” Thomson Leaning, 2005 ... quan cấu trúc liệu giải thuật Hình 3.2 Sơ đồ giải thuật Đánh giá độ phức tạp giải thuật 2.1 Các tiêu chuẩn đánh giá cấu trúc liệu ể đánh giá cấu trúc liệu thường dựa vào số tiêu chí sau: - Cấu trúc. .. CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Mục tiêu: Mô tả khái niệm giải thuật, mối quan hệ cấu trúc liệu giải thuật Trình bày tiêu chuẩn để đánh giá độ phức tạp giải thuật Ghi nhớ kiểu liệu bản, kiểu liệu. .. đẳng ngành công nghệ thông tin học tập nghiêm cứu ? ?Cấu trúc liệu giải thuật? ?? Tài liệu gồm nội dung chisng sau: Chương 1: Tổng quan cấu trúc liệu giải thuật, tiêu chuẩn danh gia cấu trúc liệu ,phản