Tải bản đầy đủ (.ppt) (228 trang)

SLIDE: CẤU TRÚC DỮ LIỆU

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (581.78 KB, 228 trang )

MÔN
MÔN
: CẤU TRÚC DỮ LIỆU
: CẤU TRÚC DỮ LIỆU
BÀI GIẢNG
BÀI GIẢNG
1
Chương 1:
Chương 1:
TỔNG QUAN VỀ CẤU TRÚC
TỔNG QUAN VỀ CẤU TRÚC
DỮ LIỆU VÀ GIẢI THUẬT
DỮ LIỆU VÀ GIẢI THUẬT
2
NỘI DUNG CHƯƠNG 1
1.1. Tầm quan trọng của cấu trúc dữ liệu trong một đề án tin học.
1.2. Các tiêu chuẩn đánh giá cấu trúc dữ liệu.

1.3. Các kiểu dữ liệu

Khái niệm kiểu dữ liệu

Các kiểu dữ liệu cơ sở

Các kiểu dữ liệu có cấu trúc

Kiểu dữ liệu con trỏ

Kiểu tập tin
3
1.1. Tầm quan trọng của CTDL & giải


thuật

Thực hiện một đề án tin học là chuyển bài toán thực tế thành bài toán có thể giải quyết trên máy tính.

Một bài toán thực tế bất kỳ đều bao gồm dữ liệu và các yêu cầu xử lý trên dữ liệu đó để xây dựng một mô hình tin học phản ánh
được bài toán thực tế cần chú trọng đến hai vấn đề:

Tổ chức biểu diễn các đối tượng thực tế: Mô hình tin học của bài toán, cần phải tổ chức sao cho

vừa phản ánh chính xác dữ liệu thực tế,

vừa dễ dàng dùng máy tính để xử lý.
 xây dựng cấu trúc dữ liệu.

Xây dựng các thao tác xử lý dữ liệu : Từ những yêu cầu thực tế, cần tìm ra các giải thuật tương ứng để xác định trình tự các thao
tác máy tính phải thi hành để cho ra kết quả mong muốn

đây là bước xây dựng giải thuật cho bài toán.
4
1.1. Tầm quan trọng của CTDL & giải
thuật
* Mối quan hệ giữa cấu trúc dữ liệu và giải thuật
Cấu trúc dữ liệu + Giải thuật = Chương trình


Khi có cấu trúc dữ liệu tốt và giải thuật phù hợp thì xây dựng chương trình chỉ phụ thuộc thời gian.

Một chương trình máy tính chỉ hoàn thiện khi có đầy đủ cấu trúc dữ liệu và giải thuật.
5
1.2. Các tiêu chuẩn đánh giá CTDL

Một cấu trúc dữ liệu tốt phải thỏa mãn:

Phản ánh đúng thực tế: Cần xem xét kỹ lưỡng cũng như dự trù các trạng thái biến đổi của dữ liệu trong chu trình sống để có
thể chọn CTDL lưu trữ thể hiện chính xác đối tượng thực tế.

Phù hợp với các thao tác trên đó: Tăng tính hiệu quả của đề án, việc phát triển các thuật toán đơn giản, tự nhiên hơn =>
chương trình đạt hiệu quả cao hơn về tốc độ xử lý.

Tiết kiệm tài nguyên hệ thống: CTDL chỉ nên sử dụng tài nguyên hệ thống vừa đủ để đảm nhiệm được chức năng của nó.
Loại tài nguyên cần quan tâm là : CPU và bộ nhớ.
6
1.2. Các tiêu chuẩn đánh giá CTDL
Đánh giá độ phức tạp của thuật toán

Là công việc ước lượng thời gian thực hiện của thuật toán để so sánh tương đối các thuật toán với nhau

Trong thực tế, thời gian thực hiện còn phụ thuộc cấu hình máy, dữ liệu đưa vào, …

Để ước lượng thời gian thực hiện thuật toán xem xét 2 trường hợp

Trường hợp tốt nhất: T
min

Trường hợp xấu nhất: T
max

Với Tmin và Tmax

thời gian thực hiện trung bình của thuật toán Tavg
7

1.3. Các kiểu dữ liệu

Máy tính chỉ có thể lưu trữ dữ liệu ở dạng nhị phân.

Nếu muốn phản ánh được dữ liệu đa dạng, thì cần phải xây dựng những phép ánh xạ, những qui tắc tổ chức phức tạp che
lên tầng dữ liệu nhị phân thô sơ.

Nhằm đưa ra những khái niệm logic về hình thức lưu trữ khác nhau đựoc gọi là kiêu dữ liệu.

Các kiểu dữ liệu cơ sở

Các kiểu dữ liệu có cấu trúc

Kiểu dữ liệu con trỏ

Kiểu tập tin
8
1.3. Các kiểu dữ liệu
Định nghĩa kiểu dữ liệu
Kiểu dữ liệu T được xác định bởi một bộ <V,O>, với:

V: tập các giá trị hợp lệ mà một đối tượng kiểu T có thể lưu trữ.

O: Tập các thao tác xử lý có thể thi hành trên đối tượng kiểu T.
Ví dụ : Giả sử có kiểu dữ liệu mẫu tự=<V
c
,O
c
> với :
V

c
={a-z,A-Z}
O
c
={Lấy mã ASCII của ký tự, đổi ký tự thành ký tự hoa}

Dữ liệu lưu trữ chiếm số bytes trong bộ nhớ gọi là kích thước của kiểu dữ liệu
9
1.3. Các kiểu dữ liệu
Các thuộc tính của một kiểu dữ liệu

Tên kiểu dữ liệu

Miền giá trị của dữ liệu

Kích thước dữ liệu

Tập các toán tử tác động lên kiểu dữ liệu
10
1.3 Các kiểu dữ liệu
Các kiểu dữ liệu cơ sở

Kiểu số nguyên

Kiểu số thực

Kiểu ký tự

Kiểu luận lý
11

1.3. Các kiểu dữ liệu
Các kiểu dữ liệu có cấu trúc
Kiểu chuỗi ký tự: là kiểu dữ liệu có cấu trúc đơn giản nhất và thường các ngôn ngữ lập trình đều dịnh nghĩa nó như một kiểu
cơ bản.
Trong C các hàm xử lý chuỗi được đặt trong thư viện string.lib.
VD: char S[10] ;// chuỗi ký tự S có chiều dài tối đa là 10 (kể cả ký tự kết thúc)
char S[] = ”ABCDEF” ;
char *S = “ABCDEF”;
12
1.3. Các kiểu dữ liệu
Các kiểu dữ liệu có cấu trúc (tt)
Kiểu mảng: là kiểu dữ liệu trong đó mỗi phần tử của nó là một tập hợp có thứ tự các giá trị có cùng cấu trúc được lưu trữ liên
tiếp nhau trong bộ nhớ.
Mảng một chiều :
<Kiểu dữ liệu> <Tên biến> [<Số phần tử>];
Mảng nhiều chiều :
<Kiểu dữ liệu> <Tên biến> [<Số phần tử 1>] [<Số phần tử 2>]….;
13
1.3. Các kiểu dữ liệu
Các kiểu dữ liệu có cấu trúc (tt)
Kiểu mẫu tin: Kiểu mẫu tin cũng tương tự như mảng nhưng mỗi phần tử của nó là tập hợp các giá trị có thể khác cấu trúc.
Kiểu mẫu tin thường được dùng để mô tả những đối tượng có cấu trúc phức tạp.
Ví dụ : struct PERSON
{
char Hoten[];
int NamSinh;
char NoiSinh[];
char GioiTinh; // 0:Nữ, 1: Nam
char DiaChi[];
}

14
1.3. Các kiểu dữ liệu
Kiểu dữ liệu con trỏ
Cho trước kiểu T = <V,O>. Kiểu con trỏ ký hiệu T
p
chỉ đến các phần tử có kiểu T được định nghĩa như sau:
T
p
= <V
p
, O
p
> Trong đó:
T
p
= {{các địa chỉ có thể lưu trữ những đối tượng kiểu T}, NULL}
O
p
= {các thao tác định địa chỉ của một đối tượng kiểu T khi biết con trỏ chỉ đến đối tượng đó}
Kiểu con trỏ là kiểu dữ liệu cơ sở dùng lưu địa chỉ của một đối tượng dữ liệu khác.
Biến thuộc kiểu con trỏ T
p
là biến mà giá trị của nó là địa chỉ của một vùng nhớ ứng với một biến kiểu T, hoặc là giá trị NULL
15
1.3. Các kiểu dữ liệu
Kiểu dữ liệu con trỏ (tt)

Kích thước biến con trỏ tùy thuộc vào quy ước số byte trong từng mô hình bộ nhớ và từng ngôn ngữ lập trình cụ thể.

Biến con trỏ trong C++ có kích thước 2 hoặc 4 bytes tùy vào con trỏ NEAR hay FAR


Cú pháp định nghĩa dữ liệu kiểu con trỏ
typedef <kiểu cơ sở> * <kiểu con trỏ>;
Các thao tác cơ bản trên kiểu con trỏ:

Khi một biến con trỏ ‘p’ lưu trữ địa chỉ của đối tượng x ta nói “p trỏ đến x”

Gán địa chỉ của một vùng nhớ con trỏ p:
p = <địa chỉ>;
p = <địa chỉ> + <giá trị nguyên>

Truy xuất (xem) nội dung của đối tượng p trỏ đến (*p)
16
1.3. Các kiểu dữ liệu
Kiểu dữ liệu tập tin

Tập tin là kiểu dữ liệu đặc biệt, kích thước tối đa của tập tin phụ thuộc không gian đĩa

Việc đọc, ghi dữ liệu trên tập tin là mất thời gian, không an toàn dữ liệu

Thông thường chuyển dữ liệu trong tập tin (một phần hay toàn bộ) vào bộ nhớ trong để xử lý.
17
Bài tập

Xem lại việc sử dụng con trỏ trong C++

Xem lại các thao tác với tập tin

Xem lai việc sử dụng kiểu dữ liệu mẫu tin


Bài tập trong giáo trình chương 1
18
19
Chương 2
Chương 2
:
:
KỸ THUẬT TÌM KIẾM
KỸ THUẬT TÌM KIẾM
(SEARCHING)
(SEARCHING)
20
NỘI DUNG CHƯƠNG 2
2.1. Khái quát về tìm kiếm
2.2. Các giải thuật tìm kiếm nội (Tìm kiếm trên mảng)

Tìm tuyến tính (Linear Search)

Tìm nhị phân (Binary Search)
2.3. Các giải thuật tìm kiếm ngoại (Tìm kiếm trên tập tin)

Tìm tuyến tính (F Linear Search)

Tìm nhị phân (Binary Search)
21
2.1. Khái quát về tìm kiếm

Trong các hệ lưu trữ và quản lý dữ liệu, thao tác tìm kiếm được thực hiện nhiều nhất để khai thác thông tin một các dễ dàng.

Số lượng thông tin trong một hệ thống thông tin là đáng kể nên việc xây dựng các giải thuật tìm kiếm nhanh sẽ có ý nghĩa quan trọng.


Nếu tìm kiếm trong một hệ thống đã tổ chức thì việc tìm kiếm dễ dàng hơn.

Các giải thuật tìm kiếm được xây dựng nhằm mục tiêu hỗ trợ ứng dụng có hiệu quả hơn.

Các giải thuật phụ thuộc vào vào cấu trúc dữ liệu mà nó tác động đến. Dữ liệu được lưu trữ trên bộ nhớ chính và bộ nhớ phụ.
22
2.1. Khái quát về tìm kiếm

Giả sử mỗi phần tử được xem xét có một thành phần khóa (Key) để nhận diện có kiểu dữ liệu T, các thành phần còn lại là thông tin
(Info), như vậy mỗi phần tử có cấu trúc như sau:
typedef struct DataElement
{
T Key;
InfoData Info;
} DataType;

Để đơn giản, quan tâm thành phần dữ liệu chỉ là khóa nhận diện
23
2.2. Các giải thuật tìm kiếm nội
Bài toán đặt ra: Giả sử có một mảng M gồm N phần tử. Cần xác định có hay không phần tử có giá trị bằng X trong mảng M??
Nếu có phần tử X thì phần tử bằng phần tử X là phần tử thứ mấy trong mảng X?
Các giải thuật tìm kiếm nội đưa ra 2 cách tìm kiếm

Tìm kiếm tuần tự hay (Sequential Search) còn gọi tìm kiếm tuyến tính (Linear Search)

Tìm kiếm nhị phân (Binary Search)
24
2.2. Các giải thuật tìm kiếm nội
Tìm tuyến tính (Linear Seach)

Ý tưởng:
So sánh lần lượt các phần tử của mảng M với giá trị X cần tìm bắt đầu từ phần tử đầu tiên cho đến khi tìm ra phần tử có giá
trị X hoặc đã duyệt hết tất cả các phần tử của mảng M thì kết thúc.
Thuật toán
B1: k = 1
B2: Nếu M[k]

X và k<=N
Thì k++
Ngược lại: Lặp lại B2
B3: Nếu k <= N Thì Tìm thấy phần tử có giá trịX ở vị trí k
B4: Nếu không (k<=N): Thì không tìm thấy phần tử có giá trị X
B5: Kết thúc
25
2.2. Các giải thuật tìm kiếm nội
Tìm tuyến tính (tt)
Cài đặt thuật toán:
int LinearSearch (T M[], int N, T X)
{
int k = 0;
while (M[k] != X && k <N) // phần tử mảng M tính từ 0
k++;
if (k < N)
return (k);
return (-1);
}

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×