Mục tiêuGiới thiệu vai trò của tổ chức dữ liệu Mối quan hệ giữa GT & CTDL Các khái niệm và yêu cầu về CTDL Nhắc lại các kiểu dữ liệu trong C++ Tổng quan về đánh giá độ phức tạp GT..
Trang 2Mục tiêu
Giới thiệu vai trò của tổ chức dữ liệu
Mối quan hệ giữa GT & CTDL
Các khái niệm và yêu cầu về CTDL
Nhắc lại các kiểu dữ liệu trong C++
Tổng quan về đánh giá độ phức tạp GT
Trang 3Suy nghĩ
Theo bạn: trước khi viết một chương trình để giải quyết một bài toán nào đó trên máy tính thì cần phải làm những việc gì?
?
Trang 4Xét đoạn chương trình sau
Trang 5Vai trò của CTDL & GT
Chương trình
Cấu trúc dữ liệu
Giải thuật
Trang 6Các tiêu chuẩn đánh giá CTDL
Phản ánh đúng thực tế
Phù hợp với thao tác
Tiết kiệm tài nguyên hệ thống
Trang 7Khái niệm về kiểu dữ liệu
Trang 8Khái niệm về kiểu dữ liệu
Các thuộc tính của một kiểu dữ liệu gồm:
Tên
Miền giá trị
Kích thước lưu trữ
Tập các thao tác tác động lên kiểu dữ liệu đó
Các loại kiểu dữ liệu
Kiểu dữ liệu cơ bản: Cơ sở, mảng, cấu trúc cơ bản
Kiểu dữ liệu có cấu trúc hướng giải quyết vấn đề:
Danh sách liên kết, hàng đợi, ngăn xếp, cây, bảng băm, …
Trang 9Khái niệm về kiểu dữ liệu
• Có thể có giá trị ban đầu
tùy theo từng ngôn ngữ lập
trình.
• Tồn tại đến khi kết thúc
chương trình.
Động
• Được gắn kết với một con
trỏ (tại thời điểm biên dịch chưa có).
Trang 10Nhắc lại các kiểu dữ liệu C++
Kiểu cơ sở: Số nguyên, số thực và kiểu
logic
Kiểu mảng, chuỗi
Kiểu có cấu trúc
Trang 11Kiểu số nguyên
Số nguyên 1 byte
2 unsigned char Số nguyên dương 1 byte
4 unsigned short Số nguyên dương 2 bytes
6 unsigned int Số nguyên dương 4 bytes
8 unsigned long Số nguyên dương 4 bytes
Trang 12Kiểu số thực
1 bool Gồm 2 giá trị: true hoặc false
Kiểu luận lý
Trang 14Kiểu mảng 1 chiều
Phát sinh ngẫu nhiên <time.h>
Khởi tạo phát sinh ngẫu nhiên
Trang 15Bài tập 1
1 Cài đặt hàm nhập mảng số nguyên, n phần tử
2 Cài đặt hàm phát sinh n phần tử ngẫu nhiên
cho mảng số nguyên
3 Cài đặt hàm phát sinh n phần tử ngẫu nhiên có
giá trị tăng dần cho mảng số nguyên
Trang 17Kiểu mảng – Khai báo kiểu con trỏ
Trang 18Kiểu mảng – Khai báo kiểu con trỏ
Lưu ý khi sử dụng phải cấp phát biến con trỏ bằng lệnh new, hủy bằng lệnh delete
Trang 19Bài tập 2
Viết lại các hàm trong Bài tập 1 dùng khai báo kiểu con trỏ
Trang 20Kiểu dữ liệu có cấu trúc
Trang 21Ví dụ kiểu dữ liệu có cấu trúc
struct ttDate
{
char thu[9];
unsigned char ngay;
unsigned char thang;
int nam;
};
typedef struct ttDate DATE ;
Trang 22Truy cập thành phần có cấu trúc
Biến cấu trúc kiểu tĩnh
<tên biến>.thành phần cấu trúc
VD:
DATE d;
d.nam = 2012;
Trang 24Truy cập thành phần có cấu trúc
Biến cấu trúc kiểu con trỏ
<tên biến>->thành phần cấu trúc
VD:
DATE *d;
Trang 25Bài tập 4
Viết lại các hàm trong Bài tập 3 sử dụng khai báo biến kiểu con trỏ cấu trúc
Trang 26Các phương pháp mô tả giải thuật
Lưu đồ
Mã giả
Mã tự nhiên
Trang 28Ký hiệu mã giả
IF <điều kiện> THEN …ENDIF
IF <điều kiện> THEN ELSE ENDIF
WHILE <điều kiện> DO … ENDWHILE
DO … UNTIL <điều kiện>
DISPLAY …
RETURN …
Trang 29Ví dụ mô tả giải thuật
Tìm ước số chung lớn nhất của 2 số nguyên
dương a và b
Đầu vào: 2 số nguyên dương a và b
Đầu ra: ước số chung lớn nhất của a và b
Trang 32Mô tả bằng lưu đồ
Trang 33Đánh giá độ phức tạp giải thuật
Phụ thuộc vào ngôn ngữ lập trình
Phụ thuộc vào người lập trình
Phụ thuộc vào bộ dữ liệu thử
Phụ thuộc vào phần cứng
Trang 34?