Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
60
Dung lượng
1,79 MB
Nội dung
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ừ toà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 Hoà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 UI. TỪ BÀI TOÁN ĐẾN CHƯƠNG TRÌNH .9 1. Mô hình hóa bài toá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. KIỂU DỮ LIỆU TRỪU TƯỢNG DANH SÁCH (LIST) .24 1. Khái niệm danh sách 24 2. Các phép toán trên danh sách TRƯỜNG CAO ĐẲNG NGHỀ ĐẮK LẮK KHOA ĐIỆN TỬ - TIN HỌC GIÁO TRÌNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NGHỀ: CƠNG NGHỆ THƠNG TIN TRÌNH ĐỘ: CAO ĐẲNG NGHỀ - TRUNG CẤP NGHỀ Người biên soạn: Lưu hành nội - 2014 Nguyễn Thị Thu Hà Lời nói đầu Hiện nay, Trường chưa có giáo trình Cấu trúc liệu & giải thuật Đặc biệt thị trường khơng có tài liệu học tập, tham khảo phù hợp với chương trình khung Cao đẳng nghề, trung cấp nghề thuộc nghề Công nghệ thông tin (CNTT) q trình đào tạo nghề Nhóm tác giả biên soạn giáo trình lập trình nhằm mục đích giúp học sinh, sinh viên (HSSV) sử dụng giáo trình làm tài liệu nghiên cứu học tập cách thuận tiện Chương trình mơn học sử dụng để giảng dạy cho sinh viên cao đẳng nghề Công nghệ thông tin (ứng dụng phần mềm) làm tài liệu tham khảo cho nghề thuộc ngành nghề kỹ thuật Vậy, mong góp ý bạn đọc để tài liệu ngày hoàn thiện hơn, xin chân thành cảm ơn Đắk Lắk, ngày 02 tháng 09 năm 2014 Tham gia biên soạn Chủ biên: Nguyễn Thị Thu Hà ThS Lê Văn Tùng CHƯƠNG TRÌNH MƠN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Mã số môn học: MH 12; Thời gian môn học: 75 giờ; (Lý thuyết: 24 giờ; Thực hành: 51 giờ) I VỊ TRÍ, TÍNH CHẤT CỦA MÔN HỌC: Cấu trúc liệu giải thuật môn sở nghề bắt buộc, học sau mơn học Tin học, Lập trình II MỤC TIÊU CỦA MÔN HỌC: - Hiểu mối quan hệ cấu trúc liệu giải thuật việc xây dựng chương trình; - Hiểu ý nghĩa, cấu trúc, cách khai báo, thao tác loại cấu trúc liệu: mảng, danh sách liên kết, giải thuật xử lý cấu trúc liệu đó; - Xây dựng cấu trúc liệu mô tả tường minh giải thuật cho số toán ứng dụng cụ thể; - Cài đặt số giải thuật ngôn ngữ lập trình C; Coi việc học mơn tảng cho môn học chuyên môn tiếp theo, nghiêm túc tích cực việc học lý thuyết làm tập, chủ động tìm kiếm nguồn tài liệu liên quan đến môn học III NỘI DUNG MÔN HỌC: Nội dung tổng quát phân bổ thời gian: Số TT I II III IV V VI Tên chương, mục Thiết kế phân tích giải thuật Các kiểu liệu sở Mảng, danh sách kiểu liệu trừu tượng Cây Sắp xếp Tìm kiếm Tổng cộng Thời gian Thực hành, Bài tập 11 Kiểm tra* (LT TH) 0 20 13 15 10 75 22 10 49 0 Tổng số Lý thuyết 15 Chương 1: Thiết kế phân tích giải thuật Mở đầu: Có thể nói khơng có chương trình máy tính mà khơng có liệu để xử lý Dữ liệu liệu đưa vào (input data), liệu trung gian liệu đưa (output data) Do vậy, việc tổ chức để lưu trữ liệu phục vụ cho chương trình có ý nghĩa quan trọng toàn hệ thống chương trình Việc xây dựng cấu trúc liệu định lớn đến chất lượng công sức người lập trình việc thiết kế, cài đặt chương trình Thiết kế giải thuật: Khái niệm giải thuật hay thuật giải mà nhiều gọi thuật toán dùng để phương pháp hay cách thức (method) để giải vần đề Giải thuật minh họa ngôn ngữ tự nhiên (natural language), sơ đồ (flow chart) mã giả (pseudo code) Trong thực tế, giải thuật thường minh họa hay thể mã giả tựa hay số ngơn ngữ lập trình (thường ngơn ngữ mà người lập trình chọn để cài đặt thuật toán), chẳng hạn C, Pascal, ? Khi xác định cấu trúc liệu thích hợp, người lập trình bắt đầu tiến hành xây dựng thuật giải tương ứng theo yêu cầu toán đặt sở cấu trúc liệu chọn Để giải vấn đề có nhiều phương pháp, lựa chọn phương pháp phù hợp việc mà người lập trình phải cân nhắc tính tốn Sự lựa chọn góp phần đáng kể việc giảm bớt cơng việc người lập trình phần cài đặt thuật tốn ngơn ngữ cụ thể Phân tích giải thuật: Mối quan hệ cấu trúc liệu Giải thuật minh họa đẳng thức: Cấu trúc liệu + Giải thuật = Chương trình Như vậy, có cấu trúc liệu tốt, nắm vững giải thuật thực việc thể chương trình ngơn ngữ cụ thể vấn đề thời gian Khi có cấu trúc liệu mà chưa tìm thuật giải khơng thể có chương trình ngược lại khơng thể có Thuật giải chưa có cấu trúc liệu Một chương trình máy tính hồn thiện có đầy đủ Cấu trúc liệu để lưu trữ liệu Giải thuật xử lý liệu theo yêu cầu toán đặt 3.1 Đánh giá cấu trúc liệu giải thuật 3.1.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 liệu phải tiết kiệm tài nguyên (bộ nhớ trong), - Cấu trúc liệu phải phản ảnh thực tế toán, - Cấu trúc liệu phải dễ dàng việc thao tác liệu 3.2 Đánh giá độ phức tạp thuật toán Việc đánh giá độ phức tạp thuật tốn khơng dễ dàng chút Ở dây, muốn ước lượng thời gian thực thuận tốn T(n) để có so sánh tương đối thuật toán với Trong thực tế, thời gian thực thuật tốn phụ thuộc nhiều vào điều kiện khác cấu tạo máy tính, liệu đưa vào, xem xét mức độ lượng liệu đưa vào ban đầu cho thuật toán thực Để ước lượng thời gian thực thuật tốn xem xét thời gian thực thuật toán hai trường hợp: - Trong trường hợp tốt nhất: Tmin - Trong trường hợp xấu nhất: Tmax Từ ước lượng thời gian thực trung bình thuật toán: Tavg Một số giải thuật bản: 4.1: Thuật tốn đơn giản Có thể nói khơng có chương trình máy tính mà khơng có liệu để xử lý Dữ liệu liệu đưa vào (input data), liệu trung gian liệu (output data) Ví dụ: Nhập vào số chữ số, in tổng chữ số #include int n, dv, ch, tr, tong; void main() { printf(“Nhap vao mot so chu so:”); scanf(“%d”, &n); dv = n mod 10; ch = (n div 10) mod 10; tr = (n div 100) mod 10; tong = dv+ ch+ tr; ...Mục lục Giáo trình Cấu trúc dữ liệu và Giải thuật iMỤC LỤC Phần 1 – PHẦN MƠÛ ĐẦU Chương 1 – GIỚI THIỆU 1.1. Về phương pháp phân tích thiết kế hướng đối tượng .1 1.2. Giới thiệu môn học Cấu trúc dữ liệu (CTDL) và giải thuật .1 1.3. Cách tiếp cận trong quá trình tìm hiểu các lớp CTDL 4 1.3.1. Các bước trong quá trình phân tích thiết kế hướng đối tượng .4 1.3.2. Quá trình xây dựng các lớp CTDL 5 1.4. Một số đònh nghóa cơ bản .6 1.4.1. Đònh nghóa kiểu dữ liệu .6 1.4.2. Kiểu nguyên tố và các kiểu có cấu trúc .6 1.4.3. Chuỗi nối tiếp và danh sách 6 1.4.4. Các kiểu dữ liệu trừu tượng 7 1.5. Một số nguyên tắc và phương pháp để học tốt môn CTDL và giải thuật 8 1.5.1. Cách tiếp cận và phương hướng suy nghó tích cực 8 1.5.2. Các nguyên tắc 9 1.5.3. Phong cách lập trình (style of programming) và các kỹ năng: .10 1.6. Giới thiệu về ngôn ngữ giả: 14 Phần 2 – CÁC CẤU TRÚC DỮ LIỆU Chương 2 – NGĂN XẾP 2.1. Đònh nghóa ngăn xếp .17 2.2. Đặc tả ngăn xếp .18 2.3. Các phương án hiện thực ngăn xếp 22 2.4. Hiện thực ngăn xếp .22 2.4.1. Hiện thực ngăn xếp liên tục 22 2.4.2. Hiện thực ngăn xếp liên kết 25 2.4.3. Ngăn xếp liên kết với sự an toàn 29 2.4.4. Đặc tả ngăn xếp liên kết đã hiệu chỉnh .34
Mục lục Giáo trình Cấu trúc dữ liệu và Giải thuật ii Chương 3 – HÀNG ĐI 3.1. Đònh nghóa hàng . 37 3.2. Đặc tả hàng . 38 3.3. Các phương án hiện thực hàng 41 3.3.1. Các phương án hiện thực hàng liên tục . 41 3.3.2. Phương án hiện thực hàng liên kết 45 3.4. Hiện thực hàng 46 3.4.1. Hiện thực hàng liên tục . 46 3.4.2. Hiện thực hàng liên kết 48 3.4.3. Hàng liên kết mở rộng 50 Chương 4 – DANH SÁCH 4.1. Đònh nghóa danh sách 51 4.2. Đặc tả các phương thức cho danh sách . 51 4.3. Hiện thực danh sách . 54 4.3.1. Hiện thực danh sách liên tục 54 4.3.2. Hiện thực danh sách liên kết đơn giản . 56 4.3.3. Lưu lại vò trí hiện tại . 61 4.3.4. Danh sách liên kết kép . 63 4.4. So sánh các cách hiện thực của danh sách . 66 4.5. Danh sách liên kết trong mảng liên tục . 67 4.5.1. Phương pháp . 67 4.5.2. Các tác vụ quản lý vùng nhớ . 70 4.5.3. Các tác vụ khác TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA TOÁN - TIN HỌC Y Z TRƯƠNG CHÍ TÍN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1 (Giáo Trình) -- Lưu hành nội bộ -- Y Đà Lạt 2008 Z
LỜI MỞ ĐẦU Giáo trình này nhằm cung cấp cho sinh viên các kiến thức căn bản về các cấu trúc dữ liệu cơ sở có cấu trúc tuyến tính tĩnh, động (danh sách liên kết), cấu trúc cây và các giải thuật cơ bản liên quan đến chúng như sắp xếp, tìm kiếm ở bộ nhớ trong, cũng như so sánh độ phức tạp của các giải thuật này. Để có thể nắm bắt các kiến thức trình bày học phần này, sinh viên cần nắm được các kiến thức về tin học đại cương, nhập môn lập trình. Ngôn ngữ lập trình được chọn để minh họa các kiến thức trên là C++. Các kiến thức này sẽ tạo điều kiện cho học viên tiếp tục dễ dàng nắm bắt các kiến thức các học phần tin học về sau như: cấu trúc dữ liệu và giải thuật nâng cao, phân tích và thiết kế giải thuật, đồ hoạ, hệ điều hành, trí tuệ nhân tạo, . Nội dung giáo trình gồm 4 chương: - Chương 1: Giới thiệu các khái niệm ban đầu về mối liên hệ mật thiết giữa cấu trúc dữ liệu và giải thuật, kiểu dữ liệu, thiết kế và phân tích giải thuật, độ phức tạp giải thuật, . - Chương 2: Giới thiệu các phương pháp cơ bản về tìm kiếm và sắp xếp trong trên kiểu dữ liệu tuyến tính mảng. Thông qua đó, trình bày một số ý tưởng và kỹ thuật cơ bản nhằm cải tiến các giải thuật. - Chương 3: Trình bày kiểu dữ liệu con trỏ. Trên cơ sở đó, trình bày các kiểu dữ liệu động tuyến tính và có nhiều ứng dụng trong tin học là các kiểu danh sách liên kết khác nhau, ngăn xếp, hàng đợi, cũng như một số ứng dụng của chúng. - Chương 4: Giới thiệu một loại cấu trúc dữ liệu động khác là cây và các thao tác cơ bản trên cây nhị phân, cây nhị phân tìm kiếm, cây cân bằng AVL. Nhằm mục đích dành thời gian nhiều hơn cho sinh viên để làm các bài tập lớn, nên trong một số phần tác giả đã trình bày khá chi tiết các dạng cài đặt biến thể khác nhau cho các giải thuật. Các phần thứ yếu hoặc khá phức tạp sẽ được in cỡ chữ nhỏ dành cho sinh viên đọc thêm. Chắn chắn rằng trong giáo trình sẽ còn nhiều khiếm khuyết, tác giả mong muốn nhận được và rất biết ơn các ý kiến quí báu đóng góp của đồng nghiệp cũng như bạn đọc để giáo trình này có thể hoàn thiện hơn nữa về mặt nội dung cũng như hình thức trong lần tái bản sau. Đà lạt, 04/2008 Tác giả
MỤC LỤC Chương I. GIỚI THIỆU CẤU TRÚC DỮ LIỆU, PHÂN TÍCH GIẢI THUẬT Trang I.1. Quan hệ giữa cấu trúc dữ liệu và giải thuật, kiểu dữ liệu I.1 I.1.1. Biểu diễn dữ liệu I.1 I.1.2. Quan hệ giữa cấu trúc dữ liệu và giải thuật, kiểu dữ liệu I.1 I.1.3. Các bước chính để giải một bài toán trên máy tính I.2 I.2. Thiết kế và phân tích giải thuật I.4 I.2.1. Thiết kế giải thuật theo phương pháp Top-Down I.4 I.2.2. Các chiến lược khác để thiết kế giải thuật I.5 I.2.3. Phân tích CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬTGiới thiệu môn học
Gi i thi u môn h cớ ệ ọ 2Giới thiệuMôn học giới thiệuCác cấu trúc dữ liệu cơ bảnCác giải thuật điển hình trên các cấu trúc dữ liệu đóDùng phương pháp hướng thủ tục. Ngôn ngữ lập trình minh hoạMã giả (pseudocode)C++
Gi i thi u môn h cớ ệ ọ 3Nội dungChương 0: GIỚI THIỆU CHUNG Chương 1: DANH SÁCH (LIST) Chương 2: STACK-QUEUEChương 3: ĐỆ QUYChương 4: KỸ THUẬT TÌM KIẾM (SEARCHING) Chương 5: KỸ THUẬT SẮP XẾP (SORTING)Chương 6: CÂY (TREE) ÔN TẬP - KIỂM TRA (REVIEW – TEST)
Gi i thi u môn h cớ ệ ọ 4Tài liệu[1] C_and_DataStructure - P. S. Deshpande, O. G. Kakde (Bắt buộc mỗi SV phải có)[2] Bài giảng & Bài thực hành CTDL - Trường ĐHCN.[3] Giáo trình Cấu trúc dữ liệu 1, Trần Hạnh Nhi – Dương Anh Đức, Trường DHKHTN – DHQG TP.HCM.[4] Cấu trúc dữ liệu, Nguyễn Trung Trực, Trường DHBK – DHQG TP.HCM.
Gi i thi u môn h cớ ệ ọ 5Vấn đề ngôn ngữ lập trìnhDùng C++ để diễn đạt => Có vấn đề?Mã giả (pseudo code)Giả lập, thường là dễ hiểu, không chi tiết đến các kỹ thuật lập trìnhỞ cấp độ hết sức tổng quát: gần ngôn ngữ tự nhiênHoặc rất chi tiết: như dùng ngôn ngữ tựa Pascal, tựa C++
Gi i thi u môn h cớ ệ ọ 6Giải thuật bằng mã giảVí dụ: Mã giả của bubble sortGiải thuật 1 Giải thuật 2Algorithm Bubble sort Input: The list A of n elements is given Output: The list A is sorted1. loop for n time 1.1. for each pair in the list 1.1.1. if it is not in ordered 1.1.1.1. exchange them End Bubble sortAlgorithm Bubble sort Input: The list A of n elements is given Output: The list A is sorted 1. for outter in 0 (n-2) 1.1. for inner in 0 (n-2- outter) 1.1.1. if Ainner+1 < Ainner 1.1.1.1. swap Ainner, Ainner+1 End Bubble sort
Gi i thi u môn h cớ ệ ọ 7Giải thuật bằng ngôn ngữ lập trìnhVí dụ: Lập trình cụ thể Bubble sortGiải thuật 1: Pascal Giải thuật 2: C++procedure BubbleSort(var A: list); var i,j: int; begin for i := 1 to n-1 do for j := 1 to (n-1-i) do if A[j+1] < A[j] then begin tmp := A[j]; A[j] := A[j+1]; A[j+1] := tmp; end; end; void BubbleSort(list A) { int i, j; for (i=0; i < n-2; i++) for (j=0; j<(n-2-i); j++) if (A[j+1] < A[j]) { tmp := A[j]; A[j] := A[j+1]; A[j+1] := tmp; } }
Gi i thi u môn h cớ ệ ọ 8So sánh mã giả và NNLTNhận xét: Mã giả 1: gần với cách trao đổi của con người nhất nhưng khó lập trình nhấtMã giả 2: dễ lập trình hơnPhương pháp:Đầu tiên: cách giải quyết vấn đề bằng máy tính số (giải thuật bằng mã giả)Sau đó: ngôn ngữ lập trình cụ thểHọc:Nhớ giải thuật (mã giả)Dùng NNLT cụ thể để minh chứng
Gi i thi u môn h cớ ệ ọ 9Cấu trúc môn họcCấu trúc:Lý thuyết: 45 tiếtThực hành: 60 tiếtĐồ án môn họcTỉ lệ điểm:Kiểm tra giữa kỳ : 20%Thực hành và bài tập lớn: 30%Thi cuối kỳ: 50%
Gi i thi u môn h cớ ệ ọ 10Bài tập thực hànhĐề bài tập: Bài tập cho I HC NNG TRNG CAO NG CễNG NGH THễNG TIN BI GING CU TRC D LIU V GII THT NGUYN ặẽC HIỉN Aè NễNG 2007
4 Cấu trúc dữ liệu và Giải thuật http://www.ebook.edu.vn TRUỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN MỤC LỤC MỤC LỤC .4 TỔNG QUAN VỀ THUẬT TOÁN VÀ CẤU TRÚC DỮ LIỆU 6 I. CÁC BƯỚC CƠ BẢN KHI GIẢI QUYẾT BÀI TOÁN TIN HỌC 6 I.1. Xác định bài toán . 6 I.2. Xác đinh cấu trúc dữ liệu . 6 I.3. Tìm thuật toán 7 I.4. Lập trình . 8 I.5. Kiểm thử . 9 I.6. Tối ưu hoá chương trình 10 II. DIỄN TẢ THUẬT TOÁN 11 II.1. Dùng lưu đồ 11 II.2. Dùng ngôn ngữ lập trình cụ thể . 12 II.3. Dùng ngôn ngữ giả . 13 III. THUẬT TOÁN ĐỆ QUI . 16 III.1. Khái niệm đệ qui 16 III.2. Thuật toán đệ qui . 16 III.3. Hiệu lực của đệ qui 18 III.4. Thuật toán quay lui 19 IV. ĐÁNH GIÁ THUẬT TOÁN .20 IV.1. Phân tích thuật toán . 20 IV.2. Xác đinh độ phức tạp tính toán của thuật toán 22 DANH SÁCH 26 I. KHÁI NIỆM DANH SÁCH . 26 II. BIỂU DIỄN DANH SÁCH TRÊN MÁY TÍNH 27 III. MẢNG VÀ DANH SÁCH ĐẶC .27 III.1. Cài đặt mảng 27 III.2. Các thao tác trên danh sách .27 IV. DANH SÁCH LIÊN KẾT . 30 IV.1. Danh sách nối đơn . 31 IV.2. Danh sách nối vòng 34 IV.3. Danh sách nối kép 37 IV.4. Đa danh sách 39 V. NGĂN XẾP .39 V.1. Định nghĩa ngăn xếp 39 V.2. Cài đặt ngăn xếp bằng mảng 40 V.3. Cài đặt ngăn xếp bằng danh sách liên kết đơn 42 V.4. Ứng dụng ngăn xếp để khử đệ qui 43 VI. HÀNG ĐỢI .45 VI.1. Định nghĩa hàng đợi 45 VI.2. Cài đặt hàng đợi bằng mảng 46 VI.3. Cài đặt hàng đợi bằng danh sách liên kết đơn ... đệ quy giaithua Ví dụ giá trị truyền vào hàm giaithua qua biến in = • Thứ tự gọi thực hàm giaithua giaithua(in) return(in * giaithua(in – 1)) * giaithua(4) = * ? * giaithua(3) = * ? * giaithua(2)... theo thứ tự ngược lại giaithua(in) return(in * giaithua(in – 1)) * giaithua(0) = * = * giaithua(1) = * = * giaithua(2) = * = * giaithua(3) = * = 24 * giaithua(4) = * 24 = 120 Kết sau ta có 5! =... /* Ham tinh giai thua */ #include #include void main(void) { int in; long giaithua(int); printf("Nhap vao so n: "); scanf("%d", &in); printf("%d! = %ld.
", in, giaithua(in));