Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithms): Giải thuật là gì? tài liệu, giáo án, bài giảng , luận vă...
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 Giải thuật gì? Giải thuật gì? Giải thuật (hay gọi thuật toá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 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 Đặ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 Cách viết giải thuật? Bạn đừng tìm, tiêu chuẩn cho trước để viết giải thuật Như bạn biết, ngôn ngữ lập trình có vòng lặp (do, for, while) lệnh điều khiển luồng (if-else), … Bạn sử dụng lệnh để viết giải thuật Chúng ta viết giải thuật theo cách thức theo bước Viết giải thuật tiến trình thực thi sau bạn định vị rõ ràng vấn đề cần giải Từ việc định vị vấn đề, thiết kế giải pháp để giải vấn đề sau viết giải thuật Ví dụ viết giải thuật Bạn theo dõi ví dụ minh họa để thấy rõ bước cách viết giải thuật Tất nhiên ví dụ đơn giản ví dụ minh họa mở đầu cho cách viết giải thuật thôi, nên nghĩ đơn giản tốt Bài toán: Thiết kế giải thuật để cộng hai số hiển thị kết Bước 1: Bắt đầu Bước 2: Khai báo ba số a, b & c Bước 3: Định nghĩa giá trị a & b Bước 4: Cộng giá trị a & b Bước 5: Lưu trữ kết Bước vào biến c Bước 6: In biến c Bước 7: Kết thúc Các giải thuật nói cho lập trình viên cách để viết code Ngoài ra, bạn viết giải thuật cho toán sau: Bước 1: Bắt đầu Bước 2: Lấy giá trị a & b Bước 3: c ← a + b Bước 4: Hiển thị c Bước 5: Kết thúc Trong thiết kế phân tích giải thuật, thường phương thức thứ hai sử dụng để miêu tả giải thuật Cách thứ hai giúp dễ dàng phân tích giải thuật bỏ qua phần định nghĩa không cần thiết Nhìn vào cách thứ hai này, người ta biết phép tính sử dụng cách tiến trình thực thi Tất nhiên, việc viết tên bước tùy ý Chúng ta viết giải thuật để tìm giải pháp để xử lý toán Một toán giải theo nhiều cách khác Do đó, toán có nhiều lời giải Vậy lời giải thích hợp cho toán Mời bạn tiếp tục theo dõi Phân tích giải thuật Hiệu giải thuật phân tích dựa góc độ: trước triển khai sau triển khai: Phân tích lý thuyết: Có thể coi phân tích dựa lý thuyết Hiệu giải thuật đánh giá việc giả sử tất yếu tố khác (ví dụ: tốc độ vi xử lý, …) số không ảnh hưởng tới triển khai giải thuật Phân tích tiệm cận: Việc phân tích giải thuật tiến hành sau tiến hành ngôn ngữ lập trình Sau chạy kiểm tra đo lường thông số liên quan hiệu giải thuật dựa thông số thời gian chạy, thời gian thực thi, lượng nhớ cần dùng, … Chương tìm hiểu phân tích lý thuyết Còn phân tích tiệm cận tìm hiểu chương Độ phức tạp giải thuật (Algorithm Complexity) Về chất, độ phức tạp giải thuật hàm ước lượng (có thể không xác) số phép tính mà giải thuật cần thực (từ dễ dàng suy thời gian thực giải thuật) liệu đầu vào (Input) có kích thước n Trong đó, n số phần tử mảng trường hợp toán xếp tìm kiếm, độ lớn số toán kiểm tra số nguyên tố, … Giả sử X giải thuật n kích cỡ liệu đầu vào Thời gian lượng nhớ sử dụng giải thuật X hai nhân tố định hiệu giải thuật X: Nhân tố thời gian: Thời gian đánh giá việc tính số phép tính (chẳng hạn phép so sánh thuật toán xếp) Nhân tố nhớ: Lượng nhớ đánh giá việc tính lượng nhớ tối đa mà giải thuật cần sử dụng Độ phức tạp giải thuật (một hàm f(n)) cung cấp mối quan hệ thời gian chạy và/hoặc lượng nhớ cần sử dụng giải thuật Độ phức tạp nhớ (Space complexity) phân tích giải thuật Nhân tố nhớ giải thuật biểu diễn lượng nhớ mà giải thuật cần dùng vòng đời giải thuật Lượng nhớ (giả sử gọi S(P)) mà giải thuật cần sử dụng tổng hai thành phần sau: Phần cố định (giả sử gọi C) lượng nhớ cần thiết để lưu giữ liệu biến (phần độc lập với kích cỡ vấn đề) Ví dụ: biến đơn giản, … Phần biến đổi (giả sử gọi SP(I)) lượng nhớ cần thiết biến, có kích cỡ phụ thuộc vào kích cỡ vấn đề Ví dụ: cấp phát nhớ động, cấp phát nhớ đệ qui, … Từ trên, ta có S(P) = C + SP(I) Bạn theo dõi ví dụ đơn giản sau: Giải thuật: tìm tổng hai số A, B Step - Bắt đầu Step - C ← A + B + 10 Step - Kết thúc Ở có ba biến A, B C số Do đó: S(P) = 1+3 Bây giờ, lượng nhớ phụ thuộc vào kiểu liệu biến cho tích tổng với nhớ cho kiểu ...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 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT DATA STRUCTURE AND ALGORITHMS GV: Phạm Tuấn Hiệp Email: hiep0109@yahoo.com Ôn tập tốt nghiệp Nội dung ôn tập Chương 1: Ôn tập Kỹ thuật lập trình Chương 2: Tìm kiếm, Sắp xếp Chương 3: Danh sách liên kết Chương 4: Cây 2 Ôn tập tốt nghiệp Tài liệu học tập Giáo trình: C & Data Structures, P. S. Deshpande, O. G. Kakde - CHARLES RIVER MEDIA, INC. Hingham, Massachusetts. Tham khảo: Giáo trình Cấu trúc dữ liệu 1, Trần Hạnh Nhi – Dương Anh Đức, Trường ĐHKHTN – ĐHQG TP.HCM. Phần mềm lập trình: C-Free 4.0 Borland C++ … 3 Chương 1: Ôn tập Kỹ thuật lập trình 4 Ôn tập tốt nghiệp Nội dung Con trỏ Mảng 1 chiều Đệ quy 5 Ôn tập tốt nghiệp Con trỏ Cách khai báo con trỏ Các phép toán trên con trỏ 6 void main(){ int x=10, y=20; int *p, *q; p=&x; q=&y; cout<<x<<" "<<y<<endl; cout<<*p<<" "<<*q<<end; } Cho biết kết quả in ra màn hình? x = 10 y = 10 p = 10 q = 10 Ôn tập tốt nghiệp Con trỏ void main(){ int x=10, y=20; int *p, *q; p=&x; q=&y; *p=50; *q=90; cout<<x<<" "<<y<<endl; cout<<*p<<" "<<*q<<end; } Cho biết kết quả in ra màn hình? 7 x = 50 y = 90 p = 50 q = 90 Ôn tập tốt nghiệp Con trỏ void main(){ int x=10, y=20; int *p, *q; p=&x; q=&y; *p=50; *q=90; p=q; cout<<x<<" "<<y<<endl; cout<<*p<<" "<<*q<<end; } Cho biết kết quả in ra màn hình? 8 x = 50 y = 90 p = 90 q = 90 Ôn tập tốt nghiệp Con trỏ Cho biết kết quả của chương trình sau: int Test(int &a, int b, int &c) { a ; a+=b; ++c=a+b; return a+b+c; } int x=5, y=2, z=2011; void main(){ cout<<Test(x,y,z)<<" "<<x<<" "<<y<<" "<<z<<endl; } 9 A. 16 6 2 2011 B. 16 5 2 8 C. 16 5 2 2011 D. 16 6 2 8 Ôn tập tốt nghiệp Nội dung Con trỏ Mảng 1 chiều Đệ quy 10 Ôn tập tốt nghiệp Mảng 1 chiều Khai báo mảng Các phép toán trên mảng 11 void function(char *s1, char *s2){ while (*(s1++)=*(s2++)); } void main(){ char s2[100]; char s1[]="Giao Trinh Ngon Ngu C++"; function(s2,s1); cout<<s2; } Cho biết kết quả in ra màn hình? Giao Trinh Ngon Ngu C++ Ôn tập tốt nghiệp Mảng 1 chiều void main(){ float a[5]={5, 4, 3, 2, 1}; float x; int i; for(i=0; i<5; i++) a[i] += a[0]; x=a[1]+a[4]; cout<<x; } Cho biết kết quả in ra màn hình? 12 A. 125 B. 5 C. 100 D. 25 Ôn tập tốt nghiệp Mảng 1 chiều Cho biết kết quả của chương trình sau: void main(){ int a[]={5,1,12,11,8,20,14,12,7}; for(int i=4;i<=7;i++) for(int j=i+1;j<=8;j++) if(a[i]>a[j]){ int t=a[i]; a[i]=a[j]; a[j]=t; } cout<<a[6]; } 13 A. 7 B. 12 C. 8 D. 20 Ôn tập tốt nghiệp Nội dung Con trỏ Mảng 1 chiều Đệ quy 14 Ôn tập tốt nghiệp Đệ quy Đệ quy là sự gọi lại chính nó khi thực hiện Thường được dùng cho các bài toán truy hồi 15 Cho hàm đệ quy sau: int Func(int n){ if(n == 5) return 5; else return 2 * Func(n+1); } Giá trị của Func(2) là? A. 50 B. 2 C. 5 D. 40 Ôn tập tốt nghiệp Đệ quy void Foo(int x){ if(x>0) Foo(x-3); cout<<x<<" "; } Cho biết kết quả in ra màn hình khi goi hàm Foo(6)? 16 A. 6 3 B. 0 3 6 C. 0 3 D. 6 3 0 Chương 2: Tìm kiếm, Sắp xếp 17 Ôn tập tốt nghiệp Nội dung Tìm kiếm tuyến tính, nhị phân Các thuật toán sắp xếp Đổi chỗ trực tiếp (Interchange sort) Nổi bọt (Bubble sort) Chèn trực tiếp (Insertion sort) Chọn trực tiếp (Selection sort) Dựa trên phân hoạch (Quick sort) 18 Ôn tập tốt nghiệp Tìm kiếm CấU TRÚC Dữ LIệU VÀ GIảI THUẬT DATA STRUCTURE AND ALGORITHMS 1 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nội dung môn học Chương 0: Giới thiệu chung về CTDL và GT Chương 1: Ôn tập C/C++ Chương 2: Đệ quy (Recursion) Chương 3: Tìm kiếm (Searching) Chương 4: Sắp xếp (Sorting) Chương 5: Ngăn xếp - Hàng đợi (Stacks - Queues) Chương 6: Danh sách liên kết (Linked List) Chương 7: Cây (Tree) 2 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Đánh giá kết quả 1. Kiểm tra giữa kỳ: thực hành Điểm Kiểm tra giữa kỳ < 4 không được thi kết thúc môn học lại 2. Kiểm tra cuối kỳ: thực hành Điểm Kiểm tra cuối kỳ < 5 không được thi kết thúc môn học lại 3. Bài tập lớn: làm các bài tập trong module Điểm Đề tài < 5 không được thi kết thúc môn học lại 4. Thi kết thúc môn: trắc nghiệm 5. Kiểm tra thường kỳ 3 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Tài liệu học tập Giáo trình: C & Data Structures, P. S. Deshpande, O. G. Kakde - CHARLES RIVER MEDIA, INC. Hingham, Massachusetts. Tham khảo: Giáo trình Cấu trúc dữ liệu 1, Trần Hạnh Nhi – Dương Anh Đức, Trường ĐHKHTN – ĐHQG TP.HCM. Phần mềm lập trình: C-Free Borland C++ … 4 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nhắc nhở một số quy định Đi học đúng giờ Đeo thẻ SV Không để chuông điện thoại reo trong giờ học Không nghe điện thoại, nhắn tin trong giờ học Không nói chuyện riêng, làm ồn khi nghe giảng Mang đầy đủ tài liệu học tập của môn học (khi học LT và TH): giáo trình, bài tập, tập chép bài (hoặc slide bài giảng), usb để lưu bài tập Phải làm bài tập ở nhà Nếu vi phạm: Nhắc nhở chung Bị mời ra khỏi lớp Xóa tên khỏi môn học 5 Chương 0: Giới thiệu chung 6 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nội dung Cấu trúc dữ liệu Thuật toán Độ phức tạp của thuật toán 7 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Cấu trúc dữ liệu (1) Sự tổ chức hợp lý của các thành phần dữ liệu, (2) Tập các thao tác để truy cập các thành phần dữ liệu. Ví dụ: Mảng (Array) Danh sách liên kết (Linked List) Ngăn xếp (Stack) Hàng đợi (Queue) Cây (Tree) … (1) the logical arrangement of data elements, combined with (2) the set of operations we need to access the elements. 8 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nội dung Cấu trúc dữ liệu Thuật toán Độ phức tạp của thuật toán 9 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Thuật toán Tập các bước có thể tính toán được để đạt được kết quả mong muốn (A computable set of steps to achieve a desired result) Ví dụ: Tính tổng các số nguyên lẻ từ 1 n B1: S=0 B2: i=1 B3: Nếu i>n thì 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 là S 10 [...]... của CTDL và thuật toán 11 CTDL + Thuật toán = Chương trình Chương 1: Ôn tập Nội dung 12 Cấu trúc dữ liệu Thuật toán Độ phức tạp của thuật toán (algorithm complexity) Chương 1: Ôn tập Thời gian thực Cấu trúc liệu giải thuật (Data Structure and Algorithms): Cấu trúc liệu mảng Cấu trúc liệu mảng Cấu trúc liệu mảng gì? 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 • Phần tử: Mỗi mục lưu giữ mảng gọi phần tử • 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ử 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ố Mảng cấu trúc liệu cấp phát lien tục Ưu điểm mảng: • Truy câp phần tử với thời gian số O(1) • Sử dụng nhớ hiệu • Tính cục nhớ Nhược điểm • Không thể thay đổi kích thước mảng chương trình dang thực Mảng động 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 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 Ư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 Nhược điểm: + phải thực them thao tác copy phần tử thay đổi kích thước + số thời gian thực thao tác không số Biểu diễn Cấu trúc liệu mảng 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: Hình minh họa phần tử mục: Dưới số điểm cần ghi nhớ cấu trúc liệu mảng: • Chỉ mục bắt đầu với • Độ dài mảng 10, nghĩa mảng lưu giữ 10 phần tử • 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 Phép toán hỗ trợ mảng Dưới hoạt động hỗ trợ mảng: • Duyệt: In tất phần tử mảng theo cách in phần tử • Chèn: Thêm phần tử vào mảng mục cho • Xóa: Xóa phần tử từ mảng mục cho • Tìm kiếm: Tìm kiếm phần tử sử dụng mục hay giá trị • Cập nhật: Cập nhật giá trị phần tử mục 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: Kiểu liệu Giá trị mặc định bool false char int float 0.0 double 0.0f void wchar_t Hoạt động chèn phần tử vào mảng Hoạt động chèn để chèn nhiều phần tử liệu vào mảng Tùy theo yêu cầu, phần tử chèn vào vị trí đầu, vị trí cuối vị trí mục cho mảng Phần triển khai hoạt động chèn ví dụ thực Trong ví dụ này, chèn liệu vào cuối mảng Ví dụ Giả sử LA mảng tuyến tính thứ tự có N phần tử K số nguyên dương thỏa mãn K = K Gán LA[J+1] = LA[J] Gán J = J-1 Gán LA[K] = ITEM Kết thúc Sau code đầy đủ giải thuật ngôn ngữ C: #include main() { int LA[] = {1,3,5,7,8}; int item = 10, k = 3, n = 5; int i = 0, j = n; printf("Danh sach phan tu mang ban dau:\n"); for(i = 0; i= k){ LA[j+1] = LA[j]; j = j - 1; } LA[k] = item; printf("Danh sach phan tu cua mang sau hoat dong chen:\n"); for(i = 0; i ... dụng giải thuật Độ phức tạp nhớ (Space complexity) phân tích giải thuật Nhân tố nhớ giải thuật biểu diễn lượng nhớ mà giải thuật cần dùng vòng đời giải thuật Lượng nhớ (giả sử gọi S(P)) mà giải thuật. .. tạp giải thuật (Algorithm Complexity) Về chất, độ phức tạp giải thuật hàm ước lượng (có thể không xác) số phép tính mà giải thuật cần thực (từ dễ dàng suy thời gian thực giải thuật) liệu đầu vào... viết giải thuật để tìm giải pháp để xử lý toán Một toán giải theo nhiều cách khác Do đó, toán có nhiều lời giải Vậy lời giải thích hợp cho toán Mời bạn tiếp tục theo dõi Phân tích giải thuật