1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Extract pages from dc2me21 bai giang cau truc du lieu va giai thuat pdfp1 3815

128 4 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 128
Dung lượng 2,07 MB

Nội dung

-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 - tố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 nguyên 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 khố Độ 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 hồn tồn có nghĩa Sau thực câu lệnh trỏ xau có địa đầu mảng (kiểu char) chứa xâu ký tự bên phải Khi câu lệnh : puts("Ha noi"); puts(xau); có tác dụng cho lên hình dịng chữ Ha noi Mảng kiểu char thường dùng để chứa dãy ký tự đọc vào nhớ Ví dụ, để nạp từ bàn phím tên người ta dùng mảng kiểu char với độ dài 25, ta sử dụng câu lệnh sau : char ten[25]; printf("\n Ho ten :"); gets(ten); Bây ta xem mảng kiểu char trỏ kiểu char có giống khác Để thấy khác chúng, ta đưa so sánh sau : char *xau, ten[15]; ten="Ha noi" gets(xau); Các câu lệnh không hợp lệ Câu lệnh thứ hai sai chỗ : ten địa ta gán địa cho địa khác Câu lệnh thứ ba không thực được, mục đích câu lệnh đọc từ bàn phím dãy ký tự lưu vào vùng nhớ mà trỏ xau trỏ tới Song nội dung trỏ xau chưa xác định Nếu trỏ xau trỏ tới vùng nhớ câu lệnh hồn tồn có ý nghĩa Chẳng hạn sau thực câu lệnh : 113 xau=ten; cách viết : gets(ten) ; gets(xau); có tác dụng 3.2.3 Con trỏ mảng nhiều chiều Việc xử lý mảng nhiều chiều phức tạp so với mảng chiều Không phải qui tắc với mảng chiều áp dụng cho mảng nhiều chiều a) Phép lấy địa : Phép lấy địa phần tử mảng hai chiều áp dụng phần tử mảng hai chiều có kiểu ngun, cịn lại phép lấy địa cho phần tử mảng nhiều chiều khơng thực Ví dụ ta lấy địa &a[1][2] a mảng nguyên Thủ thuật đọc từ bàn phím phần tử mảng hai chiều dùng lệnh scanf : Chương trình đọc vào số liệu cho ma trận hai chiều thực thông qua việc đọc vào biến trung gian, đọc giá trị chứa tạm vào biến trung gian sau ta gán biến cho phần tử mảng: #include "stdio.h" main() { float a[2][3], tg; int i,j; for (i=0;i

Ngày đăng: 28/06/2023, 21:24