Bài giảng cấu trúc dữ liệu và giải thuật

194 3 0
Bài giảng cấu trúc dữ liệu và giải thuật

Đ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

-p[o0pppppp744444444444444444444/ ĐẠI HỌC CÔNG NGHỆ GIAO THÔNG VẬN TẢI CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (Lưu hành nội bộ) Chủ biên: ThS Hoàng Thế Phương Hà Nội, 2019 MỤC LỤC Chương 1: Các khái niệm 1.1 Các thành phần ngôn ngữ lập trình C 1.1.1 Tập ký tự 1.1.2 Từ khóa 1.1.3 Tên 1.1.4 Kiểu liệu 1.1.5 Hằng 1.1.6 Biến: 15 1.2 Các khái niệm giải thuật 16 1.2.1 Khái niệm giải thuật cấu trúc liệu 16 1.2.2 Cấu trúc liệu vấn đề liên quan 17 1.2.3 Diễn đạt giải thuật 19 1.3 Phân tích thiết kế giải thuật 24 1.3.1 Từ tốn đến chương trình 24 1.3.2 Phân tích, thiết kế giải thuật 30 Chương Các thành phần cấu trúc điều khiển chương trình 36 2.1 Các lệnh vào liệu 36 2.1.1 Các hàm vào chuẩn 36 2.1.2 Đưa kết lên hình 38 2.1.3 Vào liệu từ bàn phím 43 2.2 Biểu thức 48 2.2.1 Khái niệm 48 2.2.2 Lệnh gán biểu thức: 48 2.2.3 Các phép toán 49 2.2.4 Chuyển đổi kiểu giá trị : 55 2.3 Cấu trúc chương trình 58 2.3.1 Lời thích 58 2.3.2 Lệnh khối lệnh : 59 2.3.3 Lưu đồ thuật toán 62 2.3.4 Cấu trúc chương trình: 64 2.3.5 Quy tắc viết chương trình 66 2.4 Cấu trúc điều kiện if 67 2.4.1 Lệnh if-else : 67 2.4.2 Lệnh else-if : 70 2.5 Cấu trúc rẽ nhánh switch…case 72 2.6 Cấu trúc lặp for : 76 2.7 Cấu trúc lặp while 81 2.7.1 Cấu trúc while 81 2.7.2 Cấu trúc do-while 84 2.8 Câu lệnh nhảy 86 2.8.1 Lệnh nhảy không điều kiện - toán tử goto: 86 2.8.2 Câu lệnh break: 88 2.8.3 Câu lệnh continue 89 Chương Hàm trỏ 92 3.1 Hàm 92 3.1.1 Khái niệm, khai báo hàm 92 3.1.2 Cách tổ chức hàm 92 3.1.3 Cách truyền tham số gọi hàm 96 3.2 Con trỏ 105 3.2.1 Con trỏ địa 105 3.2.2 Con trỏ mảng chiều 108 3.2.3 Con trỏ mảng nhiều chiều 114 3.2.4 Các phép toán trỏ 117 3.2.5 Mảng trỏ 120 3.2.6 Con trỏ tới hàm 123 Chương Cấu trúc liệu 128 4.1 Mảng danh sách 128 4.1.1 Các khái niệm 128 4.1.2 Cấu trúc lưu trữ mảng 130 4.1.3 Danh sách tuyến tính 132 4.2 Ngăn xếp 139 4.2.1 Định nghĩa ngăn xếp 139 4.2.2 Lưu trữ ngăn xếp 139 4.2.3 Ứng dụng ngăn xếp 144 4.3 Hàng đợi 146 4.3.1 Định nghĩa hàng đợi 146 4.3.2 Lưu trữ hàng đợi 147 4.4 Cây 152 4.4.1 Các khái niệm 152 4.4.2 Cây nhị phân 153 4.4.3 Cây tổng quát 157 4.5 Đồ thị 162 4.5.1 Các khái niệm 162 4.5.2 Biểu diễn đồ thị 164 4.5.3 Phép duyệt đồ thị 167 4.5.4 Áp dụng 171 Chương Giải thuật xếp tìm kiếm 173 5.1 Sắp xếp 173 5.1.1 Đặt vấn đề 173 5.1.2 Sắp xếp chọn trực tiếp 173 5.1.3 Sắp xếp chèn trực tiếp 176 5.1.4 Sắp xếp đổi chỗ trực tiếp 180 5.1.5 Sắp xếp trộn 184 5.2 Tìm kiếm 187 5.2.1 Bài tốn tìm kiếm 187 5.2.2 Tìm kiếm 188 5.2.3 Tìm kiếm nhị phân 191 Chương 1: Các khái niệm 1.1 Các thành phần ngơn ngữ lập trình C 1.1.1 Tập ký tự Mọi ngơn ngữ lập trình xây dựng từ ký tự Các ký tự nhóm lại theo nhiều cách khác để tạo nên từ Các từ lại liên kết với theo qui tắc để tạo nên câu lệnh Một chương trình bao gồm nhiều câu lệnh thể thuật toán để giải tốn Ngơn ngữ C xây dựng ký tự sau : 26 chữ hoa : A B C Z 26 chữ thường : a b c z 10 chữ số : Các ký hiệu toán học : + - * / = ( ) Ký tự gạch nối : _ Các ký tự khác : , : ; [ ] {} ! \ & % # $ Dấu cách (space) dùng để tách từ Ví dụ chữ VIET NAM có ký tự, cịn VIETNAM có ký tự Chú ý : Khi viết chương trình, ta khơng sử dụng ký tự khác ngồi ký tự Ví dụ lập chương trình giải phương trình bậc hai ax2 +bx+c=0 , ta cần tính biệt thức Delta= b2 - 4ac, ngôn ngữ C không cho phép dùng ký tự, ta phải dùng ký hiệu khác để thay 1.1.2 Từ khóa Từ khố từ sử dụng để khai báo kiểu liệu, để viết toán tử câu lệnh Bảng liệt kê từ khoá TURBO C : asm break case cdecl char const continue default double else enum extern far float for goto huge if int interrupt long near pascal register return short signed sizeof static struct switch typedef union unsigned void volatile while Ý nghĩa cách sử dụng từ khoá đề cập sau này, ta cần ý : - Không dùng từ khoá để đặt tên cho hằng, biến, mảng, hàm - Từ khoá phải viết chữ thường, ví dụ : viết từ khố khai báo kiểu ngun int INT 1.1.3 Tên Tên khái niệm quan trọng, dùng để xác định đại lượng khác chương trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên trỏ, tên tệp, tên cấu trúc, tên nhãn, Tên đặt theo qui tắc sau : Tên dãy ký tự bao gồm chữ cái, số gạch nối Ký tự tên phải chữ gạch nối Tên không trùng với khoá Độ dài cực đại tên theo mặc định 32 đặt lại giá trị từ tới 32 nhờ chức : Option-Compiler-Source-Identifier length dùng TURBO C Ví dụ : Các tên : a_1 delta x1 _step GAMA Các tên sai : 3MN Ký tự số m#2 Sử dụng ký tự # f(x) Sử dụng dấu ( ) Trùng với từ khoá te ta Sử dụng dấu trắng Y-3 Sử dụng dấu - Chú ý : Trong TURBO C, tên chữ thường chữ hoa khác ví dụ tên AB khác với ab C, ta thường dùng chữ hoa để đặt tên cho dùng chữ thường để đặt tên cho hầu hết cho đại lượng khác biến, biến mảng, hàm, cấu trúc Tuy nhiên điều bắt buộc 1.1.4 Kiểu liệu Trong C sử dụng các kiểu liệu sau : a Kiểu ký tự (char) : Một giá trị kiểu char chiếm byte ( bit ) biểu diễn ký tự thơng qua bảng mã ASCII Ví dụ : Ký tự Mã ASCII 048 049 050 A 065 B 066 a 097 b 098 Có hai kiểu liệu char : kiểu signed char unsigned char Kiểu Phạm vi biểu diễn Số ký tự Kích thước char (Signed char) -128 đến 127 256 byte đến 255 256 byte unsigned char Ví dụ sau minh hoạ khác hai kiểu liệu : Xét đoạn chương trình sau : char ch1; unsigned char ch2; ch1=200; ch2=200; Khi thực chất : ch1=-56; ch2=200; Nhưng ch1 ch2 biểu diễn ký tự có mã 200 Phân loại ký tự : Có thể chia 256 ký tự làm ba nhóm : Nhóm 1: Nhóm ký tự điều khiển có mã từ đến 31 Chẳng hạn ký tự mã 13 dùng để chuyển trỏ đầu dòng, ký tự 10 chuyển trỏ xuống dòng ( cột ) Các ký tự nhóm nói chung khơng hiển thị hình Nhóm : Nhóm ký tự văn có mã từ 32 đến 126 Các ký tự đưa hình máy in Nhóm : Nhóm ký tự đồ hoạ có mã số từ 127 đến 255 Các ký tự đưa hình khơng in ( lệnh DOS ) b Kiểu nguyên : Trong C cho phép sử dụng số nguyên kiểu int, số nguyên dài kiểu long số nguyên không dấu kiểu unsigned Kích cỡ phạm vi biểu diễn chúng bảng : Kiểu Phạm vi biểu diễn Kích thước int unsigned int long -32768 đến 32767 byte đến 65535 byte -2147483648 đến byte 2147483647 unsigned long đến 4294967295 byte Chú ý : Kiểu ký tự xem dạng kiểu nguyên c Kiểu dấu phảy động : Trong C cho phép sử dụng ba loại liệu dấu phảy động, float, double long double Kích cỡ phạm vi biểu diễn chúng bảng : Kiểu Phạm vi biểu diễn Số chữ số Kích thước có nghĩa Float Double 3.4E-38 đến 3.4E+38 đến byte 1.7E-308 đến 15 đến 16 byte 17 đến 18 10 byte 1.7E+308 long double 3.4E-4932 đến 1.1E4932 Giải thích : Máy tính lưu trữ số kiểu float có giá trị tuyệt đối từ 3.4E-38 đến 3.4E+38 Các số có giá trị tuyệt đối nhỏ hơn3.4E-38 xem Phạm vi biểu diễn số double hiểu theo nghĩa tương tự 1.1.5 Hằng Hằng đại lượng mà giá trị khơng thay đổi q trình tính tốn Bước 2: Chèn phần tử ll vào nửa Dịch chuyển 32 sang phải l vị trí đưa ll vào vị trí trống ll 32 49 98 06 25 53 6l 53 6l Bước 3, 4: Lần lượt chèn phần tử 49, 98 vào nửa ll 32 49 98 06 25 Bước 5: Chèn phần tử 06 vào nửa Dịch chuyển phần tử ll, 32, 49, 98 sang phải l vị trí đưa 06 vào vị trí trống 06 11 32 49 98 25 53 6l Đã Chưa Bước 6: Chèn phần tử 25 vào nửa Dịch chuyển phần tử 32, 49, 98 sang phải vị trí đưa 25 vào vị trí trống 06 17 25 32 49 98 53 - ' > Đã 61 Chưa Bước 7: Chèn phần tử 53 vào nửa Dịch chuyển phần tử 98 sang phải vị trí đưa 53 vào vị trí trống 06 17 25 32 49 Đã 53 98 61 Chưa 179 Bước 8: Chèn phần tử cuối 61 vào nửa Dịch chuyển phần tử 98 sang phải vị trí đưa 61 vào vị trí trống 06 17 25 32 49 53 61 98 5.1.4 Sắp xếp đổi chỗ trực tiếp a) Tư tưởng giải thuật  Tại bước thứ i, xét phần tử thứ a[i].   Với phần tử a[i], xét phần tử a[j] nằm sau (j=i+1,…,n-1) Nếu a[i]>a[j] đổi chỗ a[i] cho a[j] Lặp lại trình dãy xếp Các bước tiến hành sau: Bước 1: i = 0; // phần tử dãy Bước 2: j = i + // Tìm phần tử a[j]br) { c[k]=a[i++]; continue; } if (a[i]ar){ c[k]=a[i++]; 185 continue ; } if (a[i]

Ngày đăng: 23/12/2023, 10:14

Từ khóa liên quan

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

Tài liệu liên quan