Phân tích thiết kế giải thuật và cấu trúc dữ liệu

92 489 0
Phân tích thiết kế giải thuật và cấu trúc dữ liệu

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN TRUYỀN THÔNG KHOA HỆ THỐNG THÔNG TIN KINH TẾ NGUYỄN VĂN HUÂN VŨ XUÂN NAM NGUYỄN VĂN GIÁP ĐỖ VĂN ĐẠI BÀI GIẢNG PHÂN TÍCH THIẾT KẾ GIẢI THUẬT CẤU TRÚC DỮ LIỆU NGÀNH HỆ THỐNG THÔNG TIN QUẢN LÝ THÁI NGUYÊN, NĂM 2012 MỤC LỤC MỤC LỤC Chương 1: CẤU TRÚC DỮ LIỆU CƠ BẢN 1.1 Mảng .6 1.1.1 Khái niệm .6 1.1.2 Mảng chiều 1.1.3 Mảng hai chiều 1.2 Biến động trỏ 1.2.1 Biến động .7 1.2.2 Con trỏ 1.2.3 Sử dụng trỏ .9 1.3 Danh sách (LIST) 13 1.3.1 Khái niệm .13 1.3.2 Danh sách cài đặt mảng 15 1.3.3 Danh sách liên kết .19 1.3.4 Ngăn xếp (stack) 26 1.3.5 Hàng đợi (Queue) 35 Chương 2: THUẬT TOÁN 39 2.1 Thuật toán 39 2.1.1 Khái niệm .39 2.1.2 Yêu cầu 40 2.1.3 Đánh giá thuật toán 41 2.2 Một số thuật toán đơn giản 44 2.2.1 Tìm Ước chung lớn số tự nhiên 44 2.2.2 Kiểm tra số tự nhiên có phải số nguyên tố không .45 Chương 3: ĐỆ QUY GIẢI THUẬT ĐỆ QUY 46 3.1 Khái niệm đệ quy .46 3.2 Giải thuật đệ quy 46 3.3 Một số ứng dụng giải thuật đệ quy 48 3.3.1 Hàm n! 48 3.3.2 Bài toán dãy số FIBONACCI 49 3.3.3 Tìm ước số chung lớn hai số nguyên dương a va b 50 3.3.4 Bài toán “Tháp Hà Nội” 51 3.3.5 Bài toán quân hậu giải thuật đệ qui quay lui 53 Chương 4: CÁC THUẬT TOÁN SẮP XẾP 57 4.1 Các thuật toán xếp 57 4.1.1 Sắp xếp chọn (Selection Sort) 57 4.1.2 Sắp xếp chèn (Insert Sort) 59 4.1.3 Sắp xếp bọt (Bubble Sort) 61 4.2 Sắp xếp nhanh (Quick Sort) 63 4.2.1 Tư tưởng 63 4.2.2 Giải thuật 63 4.3 Sắp xếp (Merge Sort) 68 4.3.1 Tư tưởng 68 4.3.2 Giải thuật 69 Chương 5: CÂY 72 5.1 Các khái niệm 72 5.1.1 Cha, con, đường 73 5.1.2 Cây 74 5.1.3 Độ cao, mức 74 5.1.4 Cây 74 5.2 Các phép toán .75 5.3 Duyệt Cây 76 5.4 Cây nhị phân 82 5.4.1 Định nghĩa 82 5.4.2 Mô tả 83 5.4.3 Cây tìm kiếm nhị phân 84 Chương 6: TÌM KIẾM 86 6.1 Tìm kiếm 86 6.2 Tìm kiếm nhị phân .88 6.3 Tìm kiếm nhị phân 90 6.3.1 Giải thuật đệ qui 90 6.3.2 Giải thuật lặp 90 LỜI NÓI ĐẦU Phân tíchthiết kế giải thuật Cấu trúc liệu môn học sinh viên Công nghệ thông tin nói chung ngành Hệ thống thông tin Kinh tế nói riêng Các cấu trúc liệu giải thuật xem yếu tố quan trọng lập trình, câu nói tiếng Niklaus Wirth: Chương trình = Cấu trúc liệu + Giải thuật (Programs = Data Structures + Algorithms) Nắm vững cấu trúc liệu giải thuật sở để sinh viên tiếp cận với việc thiết kế xây dựng phần mềm sử dụng công cụ lập trình đại Cấu trúc liệu xem phương pháp lưu trữ liệu máy tính nhằm sử dụng cách có hiệu liệu để sử dụng liệu cách hiệu cần phải có thuật toán áp dụng liệu Do vậy, cấu trúc liệu phân tíchthiết kế giải thuật yếu tố tách rời có liên quan chặt chẽ với Việc lựa chọn cấu trúc liệu ảnh hưởng lớn tới việc lựa chọn áp dụng giải thuật Giáo trình gồm sáu chương: Chương tìm hiểu cấu trúc liệu bản; Chương tác giả sâu tìm hiểu thuật toán kinh điển nhằm giúp người đọc nắm ý nghĩa thuật toán; Chương 3, 4, 5, sâu tìm hiểu cách tổ chức liệu thuật toán kiểu liệu Với mục đích cung cấp cho em sinh viên nhìn toàn thể Tác giả kỳ vọng kết thúc môn học người học nắm cách tổ chức cấu trúc liệu Từ áp dụng phần kiến thức vào nghiên cứu mảng khác hiệu quả, tối ưu Mặc cố gắng biên soạn, song giáo trình không tránh khỏi thiếu sót Rất mong nhận ý kiến đóng góp từ phía người đọc Trân trọng cảm ơn! Thái Nguyên, tháng 08 năm 2011 Biên soạn Bộ môn Thương mại điện tử Chương CẤU TRÚC DỮ LIỆU CƠ BẢN 1.1 Mảng 1.1.1 Khái niệm Mảng dãy có thứ tự (về mặt vị trí) phần tử với đặc điểm sau: - Số lượng phần tử cố định - Mọi phần tử có kiểu liệu (dữ liệu sở mảng ) Các đặc trưng : + Cho phép truy cập ngẫu nhiên đến phần tử Thời gian truy cập đến phần tử + Số lượng phần tử mảng cố định Việc bổ sung loại bỏ phần tử khó khăn (mất thời gian) Các phép toán : Tạo mảng, duyệt mảng, tìm kiếm, xếp, trộn mảng, tách mảng … 1.1.2 Mảng chiều Cấu trúc lưu trữ: Các phần tử bố trí sát nhớ theo thứ tự tăng dần số nên dễ dàng tìm địa phần tử biết số: Loc(a[i]) = a0 + (i-1) * l a0 địa phần tử thứ ; l độ dài ô nhớ (byte) 1.1.3 Mảng hai chiều Cấu trúc lưu trữ: Có hai phương pháp lưu trữ + Phương pháp lưu trữ ưu tiên hàng Với mảng Anm (n hàng m cột) Loc(aij ) = L0 + (i-1)*m + (j-1) + Phương pháp lưu trữ ưu tiên cột Với mảng Anm (n hàng m cột) Loc(aij ) = L0 + (j-1)*n + (i-1) 1.2 Biến động trỏ 1.2.1 Biến động Tất biến có kiểu cấu trúc liệu mà ta nghiên cứu Array, Record, Set gọi biến tĩnh chúng xác định cách rõ ràng khai báo, sau chúng dùng thông qua tên Thời gian tồn biến tĩnh thời gian tồn khối chương trình có chứa khai báo biến Chẳng hạn, biến tĩnh khai báo chương trình (biến toàn cục) tồn từ chương trình thực kết thúc chương trình, biến tĩnh khai báo chương trình (biến địa phương) tồn từ chương trình thực kết thúc chương trình Ngoài biến tĩnh xác định trước, người ta tạo biến lúc chạy chương trình, tuỳ theo nhu cầu Việc tạo biến theo kiểu gọi cấp pháp nhớ động, biến tạo gọi biến động Các biến động tên Để tạo biến động, người ta sử dụng kiểu biến đặc biệt, gọi trỏ thủ tục cấp phát nhớ động (NEW) thông qua trỏ Khi không sử dụng biến động nữa, người ta xoá khỏi nhớ, việc gọi thu hồi nhớ động Để thu hồi nhớ dành cho biến động, người ta dùng thủ tục DISPOSE thông qua trỏ sử dụng để tạo biến động So với biến tĩnh, việc sử dụng biến động có ưu điểm tiết kiệm nhớ Bởi vì, cần dùng biến động người ta tạo không cần người ta lại xoá Còn biến tĩnh, chúng xác định cấp phát nhớ biên dịch, chúng chiếm giữ nhớ suốt thời gian chương trình làm việc Chẳng hạn, cần sử dụng mảng ta phải khai báo phần đầu chương trình, lúc ta phải xác định kích thước mảng thường khai báo dôi gây lãng phí nhớ 1.2.2 Con trỏ 1.2.2.1 Kiểu trỏ Kiểu trỏ một kiểu liệu đặc biệt để biểu diễn địa đối tượng (biến, mảng, ghi ) nhớ Có kiểu đối tượng có nhiêu kiểu trỏ tương ứng Các giá trị thuộc kiểu trỏ địa (vị trí) nhớ máy tính để lưu giữ đối tượng thuộc kiểu đối tượng Ví dụ, kiểu trỏ nguyên dùng để biểu thị địa biến nguyên, giá trị thuộc kiểu trỏ nguyên địa nhớ để lưu trữ số nguyên, kiểu trỏ ghi dùng để biểu thị địa ghi, giá trị thuộc kiểu trỏ ghi địa nhớ để lưu trữ ghi v.v Để định nghĩa kiểu trỏ ta dùng mẫu sau: TYPE Kiểu_con_trỏ = ^Kiểu_đối_tượng ; Ví dụ 1: TYPE Tro_nguyen = ^Integer ; Tro_hoc_sinh = ^Hoc_sinh; Hoc_sinh = Record Ho_ten : String[25]; tuoi : Integer; End; Chú ý: Khi định nghĩa kiểu trỏ ghi tiến hành theo hai cách sau: + Cách 1: Định nghĩa kiểu ghi trước, dùng định nghĩa kiểu trỏ ghi tương ứng + Cách 2: (xem ví dụ trên) Định nghĩa kiểu trỏ ghi thông qua kiểu ghi chưa định nghĩa Nhưng sau phải định nghĩa kiểu ghi 1.2.2.2 Biến trỏ Biến trỏ biến dùng để chứa địa biến động nhớ Có thể khai báo biến trỏ thông qua kiểu trỏ định nghĩa trước khai báo cách trực tiếp Ví dụ 2: Var pn1, pn2 : Tro_nguyen; phs : Tro_hoc_sinh; pt1, pt2 : ^real; Trong ví dụ khai báo biến trỏ (hay gọi trỏ), đó: pn1, pn2 trỏ kiểu nguyên phs trỏ kiểu Hoc_sinh (bản ghi) pt trỏ kiểu thực 1.2.3 Sử dụng trỏ Để thâm nhập vào biến động có địa nằm biến trỏ, chẳng hạn trỏ Ptr ta dùng ký hiệu Ptr^ Ví dụ: thông qua trỏ pn1 ta có biến động pn1^, thông qua trỏ phs ta có biến động phs^ Cũng giống biến tĩnh, biến động tạo để chứa liệu Do đó, câu lệnh viết hợp lệ pn1^ := 10; {gán giá trị 10 cho biến động} readln(pn2^); {nhập liệu vào biến động pn2^ từ bàn phím} Readln(phs^.ho_ten); {Nhập họ tên cho học sinh từ bàn phím vào trường Ho_ten biến động phs^} phs^.tuoi := 16; {gán giá trị 16 cho trường tuoi biến động phs^} a Các thao tác với trỏ + Phép gán hai trỏ kiểu Ví dụ: pn1 := pn2; + Phép so sánh hai trỏ kiểu gồm: so sánh = (bằng nhau) phép sánh (khác nhau) b Hằng trỏ NULL NULL trỏ đặc biệt dành cho biến trỏ, dùng để báo trỏ không trỏ vào đâu Hằng NULL đem gán cho biến trỏ Đương nhiên việc thâm nhập vào biến động thông qua trỏ có giá trị NULL vô nghĩa Thực chất NULL trỏ đặc biệt chứa giá trị c Tạo lập giải phóng biến động Trong ngôn ngữ pascal, thủ tục chuẩn NEW dùng để tạo biến động, với tham số biến trỏ, trỏ tới biến động mà ta muốn lập Cách viết: NEW(Biến_con_trỏ); Ví dụ: để tạo biến động phs^ trỏ phs trỏ tới, ta viết: NEW(phs); Như NEW(phs) xếp nhớ cho biến động có kiểu Hoc_sinh Trong chương trình ta dùng thủ tục NEW(phs) nhiều lần, lần tạo biến động phs^, song trỏ phs trỏ vào biến động tạo lần cuối Ví dụ: Nếu chương trình ta viết lần sau: NEW(phs); phs^.Ho_ten := ‘Mot’; phs^.tuoi := 1; NEW(phs); phs^.Ho_ten := ‘Hai’; phs^.tuoi := 2; 10 Sử dụng phép toán định nghĩa đệ qui thứ tự Preorder, dễ dàng viết thủ tục đệ qui qua theo thứ tự Preorder Trong thủ tục, sử dụng thủ tục Visit (x) (thăm đỉnh x) cài đặt tuỳ theo ứng dụng Các biến A, B thủ tục đỉnh (Node) procedure Preorder ( A : Node) ; {Thủ tục đệ qui qua gốc A theo thứ tự Preorder} var B : Node begin Visit (A) ; B : = EldestChild (A) while B < > $ begin Preorder ( B) ; B : = NexSibling (B) end ; end ; Một cách tương tự, ta viết thủ tục đệ qui qua theo thứ tự Inorder Postorder procedure Inorder ( A : Node) ; {Thủ tục đệ qui qua gốc A theo thứ tự Inorder } var B : Node ; begin B := EldestChild (A) ; if B < > $ then begin Inorder (B) : B : = NextSibling (B) end ; Visit (A) ; while B < > $ 78 begin Inorder (B) ; B : = NextSibling (B) end ; end ; procedure Postorder (A : Node) ; {Thủ tục đệ qui qua gốc A theo thứ tự Postorder} var B : Node ; begin B : = EldestChild (A) ; while B < > $ begin Postorder (B) ; B : = NextSibling (B) end ; Visit (A) end ; Chúng ta viết thủ tục không đệ qui qua theo thứ tự Preordor, Inorder Postorder Chúng ta viết ba thủ tục (các thủ tục khác giành lại cho độc giả) Tư tưởng thuật toán không đệ qui qua theo thứ tự Preorder sau Chúng ta sử dụng stack S để lưu giữ đỉnh Nếu thời điểm ta thăm đỉnh x stack lưu giữ đường từ gốc đến x, gốc đáy stack x đỉnh stack Chẳng hạn, với hình 4.1, ta thăm đỉnh i, stack lưu (a, b, e, i) i đỉnh stack procedure Preorder ( A : Node) ; 79 {Thủ tục không đệ qui qua theo thứ tự Preorder} var B : Node ; S : Stack ; begin Intealize (S) ; {khởi tạo stack rỗng} B:=A; while B < > $ begin Visit (B) ; Push (B, S) ; {đẩy B vào stack} B : = EldestChild (B) end ; while not Empty (S) begin Pop (S,B) ;{loại phần tử đỉnh stack gán cho B] B : = NexSibling (B) ; if B < > $ then while B < > $ begin Visit (B) ; Push (B, S) ; B : = EldestChild (B) end ; end ; end ; 80 Sau trình bày thuật toán qua theo bề rộng, sử dụng hàng Q để lưu giữ đỉnh theo thứ tự thăm, đầu hàng đỉnh bên trái mà ta chưa thăm nó, cuối hàng đỉnh ta thăm Chẳng hạn, với hình 4.1, ta thăm đỉnh i hàng chứa đỉnh (f, g, h, i) f đầu hàng i cuối hàng Khi loại phần tử đầu hàng, thăm (nếu có) thăm đỉnh đưa đỉnh vào cuối hàng Chúng ta có thủ tục sau procedure BreadthTraverse ( A : Node) ; {Thủ tục qua gốc A theo bề rộng } var B : node ; Q : Queue ; begin Initialize (Q) ; {khởi tạo hàng rỗng} Visit (A) ; Add (A, Q) ; {đưa gốc A vào hàng Q} while not Empty (Q) begin Delete (Q, B) ; {loại phần tử đầu hàng gán cho B} B : = EldestChild (B) ; while B < > $ begin Visit (B) ; Add (B, Q) ; B : = NextSibling (B) end ; end ; end ; 81 5.4 Cây nhị phân 5.4.1 Định nghĩa Cây nhị phân tập hợp hữu hạn đỉnh xác định đệ qui sau Một tập trống nhị phân Giả sử T1 T2 hai nhị phân không cắt (T1T2 = ) r đỉnh không thuộc T1, T2 Khi ta thành lập nhị phân T với gốc r có T1 bên trái, T2 bên phải gốc Cây nhị phân T biểu diễn hình 5.9 Cần lưu ý rằng, (cây có gốc) nhị phân hai khái niệm khác Cây không trống, luôn chứa đỉnh, đỉnh không có, có hay nhiều Còn nhị phân trống, đỉnh luôn có hai phân biệt bên trái bên phải Chẳng hạn, hình 4.10 minh hoạ hai nhị phân khác Cây nhị phân hình 4.10a có trái gốc gồm đỉnh, phải trống Cây nhị phân hình 5.10b có trái gốc trống, phải gồm đỉnh Song ta có : mà gốc có gồm đỉnh 82 Từ định nghĩa nhị phân, ta suy rằng, đỉnh nhị phân có nhiều hai đỉnh con, đỉnh bên trái (đó gốc trái) đỉnh bên phải (đó gốc phải) 5.4.2 Mô tả Cài đặt nhị phân Phương pháp tự nhiên để biểu diễn nhị phân đỉnh trái đỉnh phải đỉnh Ta sử dụng mảng để lưu giữ đỉnh nhị phân Mỗi đỉnh biểu diễn ghi gồm ba trường : trường infor mô tả thông tin gắn với đỉnh, truờng left đỉnh trái, trường right đỉnh phải Giả sử đỉnh đánh số từ đến max, cấu trúc liệu biểu diễn nhị phân khai báo sau const max = N ; type Node = record infor : Item ; 83 left : max ; right : max end ; Tree = array [1 max] of Node ; 5.4.3 Cây tìm kiếm nhị phân Cây nhị phân sử dụng nhiều mục đích khác Tuy nhiên việc sử dụng nhị phân để lưu giữ tìm kiếm thông tin áp dụng quan trọng nhị phân Trong mục xét lớp nhị phân đặc biệt, phục vụ cho việc tìm kiếm thông tin, tìm kiếm nhị phân Trong thực tiễn, lớp đối tượng mô tả kiểu ghi, trường ghi biểu diễn thuộc tính đối tượng Trong toán tìm kiếm thông tin, thường quan tâm đến nhóm thuộc tính đối tượng hoàn toàn xác định đối tượng Chúng ta gọi thuộc tính khoá Như vậy, khoá nhóm thuộc tính lớp đối tượng cho hai đối tượng khác cần phải có giá trị khác nhóm thuộc tính Từ sau ta giả thiết rằng, thông tin gắn với đỉnh nhị phân khoá đối tượng Do đỉnh nhị phân biểu diễn ghi kiểu Node có cấu trúc sau type pointer = ^Node ; Node = record key : keytype ; left : pointer ; right : pointer ; end ; Giả sử kiểu khoá (keytype) kiểu có thứ tự, chẳng hạn kiểu nguyên, thực, ký tự, xâu ký tự Khi tìm kiếm nhị phân định nghĩa 84 sau Cây tìm kiếm nhị phân nhị phân trống, thoả mãn điều kiện sau Khoá đỉnh thuộc trái nhỏ khoá gốc Khoá gốc nhỏ khoá đỉnh thuộc phải gốc Cây trái phải gốc tìm kiếm nhị phân Hình 5.15 biểu diễn tìm kiếm nhị phân, khoá đỉnh số nguyên 85 Chương TÌM KIẾM 6.1 Tìm kiếm Tìm kiếm thông tin vấn đề quan trọng tin học Cho trước số điện thoại, cần tìm biết người có số điện thoại đó, địa anh ta, thông tin khác gắn với số điện thoại Thông thường thông tin đối tượng biểu diễn dạng ghi, thuộc tính đối tượng trường ghi Trong toán tìm kiếm, tiến hành tìm kiếm đối tượng dựa số thuộc tính biết đối tượng, gọi thuộc tính khoá Như vậy, khoá ghi hiểu trường ghi Với giá trị cho trước khoá, có nhiều ghi có khoá Cũng xảy ra, ghi có giá trị khoá cho Thời gian tìm kiếm phụ thuộc vào cách tổ chức thông tin phương pháp tìm kiếm sử dụng Chúng ta tổ chức đối tượng để tìm kiếm dạng danh sách, tìm kiếm nhị phân, Với cách cài đặt (Chẳng hạn, cài đặt danh sách mảng, danh sách liên kết), có phương pháp tìm kiếm thích hợp Người ta phân biệt hai loại tìm kiếm : tìm kiếm tìm kiếm Nếu khối lượng thông tin lớn cần lưu giữ dạng file nhớ ngoài, đĩa từ băng từ, tìm kiếm gọi tìm kiếm Trong trường hợp thông tin lưu giữ nhớ trong, ta nói đến tìm kiếm Trong chương chương sau, đề cập tìm kiếm Sau nghiên cứu phương pháp tìm kiếm danh sách biểu diễn mảng Giả sử keytype kiểu khoá Trong nhiều trường hợp keytype integer, real, string Các phần tử danh sách có kiểu Item - ghi có chứa trường key kiểu keytype type keytype = ; 86 Item = record key : keytype ; các trường khác end ; List = record element : array 1 max of Item ; count : max ; end ; Tìm kiếm (hay tìm kiếm tuyến tính) phương pháp tìm kiếm đơn giản nhất: xuất phát từ đầu danh sách, danh sách tìm phần tử có khoá cho dừng lại, đến hết danh sách mà không tìm thấy Ta có thủ tục tìm kiếm sau procedure SeqSearch (var L : List ; x : keytype ; var found : boolean ; var p : max) ; begin found : = false ; p:=1; with L while (not found) and ( p = count) if element p key = x then found : = true else p : = p + ; end ; Thủ tục để tìm xem danh sách L có chứa phần tử với khoá x hay không Nếu có giá trị tham biến found true Trong trường hợp có, biến p ghi lại vị trí phần tử có khoá x 87 Phân tích tìm kiếm Giả sử độ dài danh sách n (count = n) Dễ dàng thấy rằng, thời gian thực tìm kiếm thời gian thực lệnh while Mỗi lần lặp cần thực phép so sánh khoá x với khoá phần tử danh sách, số lớn lần lặp n, thời gian tìm kiếm (n) 6.2 Tìm kiếm nhị phân Giả sử L danh sách có độ dài n biểu diễn mảng, phần tử có kiểu Item mô tả mục 3.3.2 Giả sử kiểu khoá keytype kiểu có thứ tự, tức với hai giá trị v1 v2, ta luôn có v1 v2, v1 v2 ;  quan hệ thứ tự xác định keytype Giả sử phần tử danh sách L xếp theo thứ tự khoá không giảm : L element 1 key  L element 2.key   L element n.key Trong trường hợp này, áp dụng phương pháp tìm kiếm khác, hiệu phương pháp tìm kiếm Đó kỹ thuật tìm kiếm nhị phân Tư tưởng tìm kiếm nhị phân sau : Đầu tiên ta so sánh khoá x với khóa phần tử danh sách, tức phần tử vị trí m=(1+n)/2  Nếu chúng x = L.element [m].key, ta tìm thấy Nếu x < L.element [m].key, ta tiếp tục tìm kiếm nửa đầu danh sách từ vị trí đến vị trị m-1 Còn x > L.element [m].key, ta tiếp tục tìm kiếm nửa cuối danh sách từ vị trị m + đến vị trí n Nếu đến thời điểm đó, ta phải tìm x danh sách rỗng, điều có nghĩa danh sách phần tử với khoá x Chúng ta mô tả phương pháp tìm kiếm nhị phân thủ tục sau : procedure BinarySearch (var L : List ; x : key type ; var found : boolean ; p : max) ; var mid , bottom, top : integer ; begin 88 (1) found : = false ; (2) bottom : = 1, (3) top : = L.count ; (4) while (not found) and (bottom p^.info then search (p^.Right, x, p) End; 6.3.2 Giải thuật lặp Trong thủ tục này, ta sử dụng biến địa phương found có kiểu boolean để điều khiển vòng lặp, có giá trị ban đầu false Nếu tìm kiếm thành công found nhận giá trị true, vòng lặp kết thúc đồng thời p trỏ đến nút có trường khoá x Còn không tìm thấy giá trị found false giá trị p NULL 90 Procedure search (Root : Tree; x:keytype; var p : Tree); Var Found : boolean; Begin Found:=False; P:=Root; while (pNULL) and( not Found ) if x > p^.info then p := p^.right else if x < p^.info then p := p^.left else Found = True; End; 91 TÀI LIỆU THAM KHẢO [1] Đỗ Xuân Lôi, (1995), Cấu trúc liệu giải thuật Nhà xuất khoa học kỹ thuật Hà Nội [2] Nguyễn Trung Trực, (1990), Cấu trúc liệu NXB BK HCM, [3] Lê Minh Trung, (1997), Lập trình nâng cao Pascal với cấu trúc liệu NXB Khoa học Kỹ thuật, Hà Nội [6] Ngô Trung Việt, (2000), Ngôn ngữ lập trình C C++ Bài giảng- Bài tập – Lời giải mẫu NXB Giao thông vận tải, Hà Nội [7] Nguyễn Đình Tê, Hoàng Đức Hải, (1998), Giáo trình lý thuyết tập ngôn ngữ C NXB Giáo dục, Hà Nội [8] Lê Xuân Trường, (1999), Giáo trình cấu trúc liệu ngôn ngữ C++ NXB thống kê, Hà Nội [9] Nguyễn Thanh Thủy, Nguyễn Quang Huy, (1999), Bài tập lập trình ngôn ngữ C NXB Khoa học kỹ thuật, Hà Nội 92 ... để sử dụng liệu cách hiệu cần phải có thuật toán áp dụng liệu Do vậy, cấu trúc liệu phân tích – thiết kế giải thuật yếu tố tách rời có liên quan chặt chẽ với Việc lựa chọn cấu trúc liệu ảnh hưởng... .88 6.3 Tìm kiếm nhị phân 90 6.3.1 Giải thuật đệ qui 90 6.3.2 Giải thuật lặp 90 LỜI NÓI ĐẦU Phân tích – thiết kế giải thuật Cấu trúc liệu môn học sinh viên Công... Các cấu trúc liệu giải thuật xem yếu tố quan trọng lập trình, câu nói tiếng Niklaus Wirth: Chương trình = Cấu trúc liệu + Giải thuật (Programs = Data Structures + Algorithms) Nắm vững cấu trúc liệu

Ngày đăng: 13/04/2017, 22:41

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan