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

Slide bài giảng Cấu trúc dữ liệu

74 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Cấu trúc dữ liệu 1
Chuyên ngành Cấu trúc dữ liệu
Thể loại Slide bài giảng
Định dạng
Số trang 74
Dung lượng 871,55 KB

Nội dung

Slide bài giảng Cấu trúc dữ liệu: Chương 1: Giới thiệu tổng quan về Cấu trúc dữ liệu Chương 2: Các giải thuật tìm kiếm và sắp thứ tự

Trang 1

CẤU TRÚC DỮ LIỆU 1

Trang 2

ĐỀ CƯƠNG CHI TIẾT

Chương 1 : Giới thiệu tổng quan

về Cấu trúc dữ liệu

1.1.Giới thiệu 1.2.Cấu trúc dữ liệu cơ bản

Trang 3

ĐỀ CƯƠNG CHI TIẾT

Chương 2 : Các giải thuật tìm

kiếm và sắp thứ tự

2.1.Giới thiệu chung

2.2.Các giải thuật tìm kiếm 2.3.Các giải thuật sắp thứ tự

Trang 4

ĐỀ CƯƠNG CHI TIẾT

Chương 3 : Danh sách đặc(mảng)

3.1.Định nghĩa 3.2.Các phép toán trên mảng 3.3.Ưu điểm và khuyết điểm của mảng

3.4.Stack và Queue

Trang 5

ĐỀ CƯƠNG CHI TIẾT

Chương 4 : Danh sách liên kết

4.1.Định nghĩa

4.2.Các phép toán trên danh sách liên kết

4.3.Danh sách liên kết kiểu FIFO và

LIFO

4.4.Một số ứng dụng của danh sách liên kết

4.5.Stack và Queue

4.6.Sắp thứ tự trên danh sách liên kết

4.7.Danh sách đa liên kết

Trang 6

ĐỀ CƯƠNG CHI TIẾT

Chương 5 : Cấu trúc cây

5.1.Cây nhị phân tìm kiếm5.2.Cây cân bằng

Trang 7

CÁC TÍNH ĐIỂM

- Bài tập lớn miễn thi

- Điểm thi cuối môn

Trang 8

TÀI LIỆU THAM KHẢO

1 N.Wirth , Algorithms + Data Structure = Programs

Trang 9

CHƯƠNG 1

□ Vai trò của cấu trúc dữ liệu

CTDL + Thuật toán = Chương trình

(Data Structures + Algorithms = Program)

Trang 10

Các cấu trúc dữ liệu đơn giản

Trang 12

Ví dụ

Xây dựng một cấu trúc dữ liệu lưu trữ cho chương trình: Nhập vào toạ độ của 3 điểm của một tam giác và một điểm P, xác định điểm

P nằm trong hay ngoài tam giác

Trang 13

typedef struct TAMGIÁC

Trang 14

Chương 2

Sắp xếp và tìm kiếm

Trang 15

Tìm kiếm

- Tìm kiếm tuần tự

- Tìm kiếm nhị phân

Trang 16

Sắp xếp

1 Thuật toán sắp xếp nội

+ Sắp xếp chọn trực tiếp (Selection sort)

+ Sắp xếp chèn trực tiếp (Insertion Sort) + Sắp xếp nổi bọt (Bubble Sort)

+ Shake sort (cải tiến của Bubble Sort) + Sắp xếp trộn (Merge Sort)

Trang 17

Tìm kiếm

- Tìm kiếm tuần tự

- Tìm kiếm nhị phân

Trang 18

Tìm kiếm tuần tự

Ý tưởng:

- Nếu tìm thấy thì dừng

Ngược lại, nếu duyệt đến cuối

mảng thì cho kết quả không tìm thấy

Trang 24

Thuật toán

Bước 2: Nếu a[i] == x thì dừng chương

trình, xuất kết quả tìm thấy

Tăng i lên một đơn vịBước 4: Lặp lại bước 2 và 3 đến khi i >= n thì

qua bước 5

Trang 25

Cài đặt

Input:

a: mảngn: số phần tử mảngx: phần tử cần tìmOutput:

i : vị trí x trong mảng-1: nếu không tìm thấy x

Trang 26

int Sequence_Search(int a[],int n, int x) {

Trang 27

Độ phức tạp

Độ phức tạp là của phép tìm kiếm tuần tự là : O(n)

Trang 32

Bài tập

Tìm vị trí của giá trị x = 1

Trang 33

Thuật toán

Bước 2: m = (L + R) /2

Bước 4: Nếu a[m] < x thì tăng L lên m+ 1Bước 5: Ngược lại giảm R xuống m- 1

Bước 6: Lặp lại bước 2, 3,4,5,

cho đến khi L > R thì qua bước 7

Trang 34

int Binary_Search (int a[], int n, int x)

}

Trang 35

Độ phức tạp

Độ phức tạp là của phép tìm kiếm nhị phân là : O(log2n)

Trang 36

Sắp xếp

Sắp xếp chọn trực tiếp

Trang 37

Ví dụ

Sắp xếp một hàng ngang 7

em sinh viên theo thứ tự

tăng dần theo chiều cao

Trang 38

Nêu ý tưởng (sx tăng)

Từ một mảng n phần tử

- Chọn phần tử nhỏ nhất , đổi chổ với phần tử thứ nhất

- Từ n – 1 phần tử còn lại, ta cũng chọn phần tử nhỏ nhất và đổi chổ với phần tử thứ 2

- Cứ tiếp tục như vậy cho đến hết mảng

Trang 39

if x[min]>x[j] then min = j

t = x[i]

x[i] = x[min]

x[min] = t }

}

Trang 40

Cài đặt

□ Mời một bạn lên bảng viết lại chương trình sắp xếp theo giải thuật chọn trực tiếp

(selection sort) bằng ngôn ngữ C++

□ Các bạn lớp tự viết vào giấy nháp rồi so

sánh với bạn

Trang 41

Bài tập Selection sort

□ Sắp xếp theo thứ tự giảm dần mảng sau:

Trang 42

Sắp xếp

Sắp xếp chèn trực tiếp

(Insertion Sort)

Trang 43

Nêu ý tưởng (sx tăng)

Từ một mảng n phần tử

- Chọn phần tử đầu tiên coi như là một mảng mới có 1 ptử đã có thứ tự

- Chèn phần tử thứ 2 vào vị trí thích hợp của mảng mới để có 1 mảng 2 ptử

đã có thứ tự.

- Chèn phần tử thứ 3 vào vị trí thích hợp của mảng mới.

- Cứ tiếp tục như vậy cho đến hết Khi

đó ta có được một mảng đã có thứ tự

Trang 44

Mã giảHàm InsertionSort()

Trang 45

Cài đặt

□ Mời một bạn lên bảng viết lại chương trình sắp xếp theo giải thuật chọn chèn trực tiếp

(Insertion Sort) bằng ngôn ngữ C++

□ Các bạn lớp tự viết vào giấy nháp rồi so

sánh với bạn

Trang 46

Bài tập Insertion Sort

□ Sắp xếp theo thứ tự giảm dần mảng sau:

Trang 47

Sắp xếp

Sắp xếp nổi bọt (Bubble Sort)

Trang 48

Nêu ý tưởng (sx tăng)

Từ một mảng n phần tử

- Xét từ cặp phần tử từ cuối danh sách lên đầu mảng, và đổi chổ chúng với nhau để phần tử luôn nhỏ đứng trước (vật nhẹ luôn được nổi lên trên)

- Lặp lại cho đến khi không còn việc đổi chổ 2 phần tử nữa, khi đó ta sẽ được mảng có thứ tự

Trang 49

t = a[j]

a[j] = a[j-1]

a[j-1] = t }

}

Kiểm tra phần tử

nhỏ có được nổi

lên chưa

Trang 50

Cài đặt

□ Mời một bạn lên bảng viết lại chương trình sắp xếp theo giải thuật chọn chèn trực tiếp

(Bubble Sort) bằng ngôn ngữ C++

□ Các bạn lớp tự viết vào giấy nháp rồi so

sánh với bạn

Trang 51

Nhận xét Bubble Sort

□ Những phần tử nhỏ sau mỗi lần duyệt đều

sẽ di chuyển đến đúng vị trí của nó, trong khi các phần tử lớn nhất chỉ được hạ 1

Trang 52

Bài tập Bubble Sort

□ Sắp xếp theo thứ tự giảm dần mảng sau:

Trang 53

Sắp xếp

Sắp xếp Shake Sort

( Cải tiến của Bubble Sort )

Trang 54

Nêu ý tưởng (sx tăng)

Trong mỗi lần duyệt, ta chia 2 hướng ngược nhau:

- Chiều đi: Duyệt danh sách từ dưới lên, đẩy phần tử có giá trị nhỏ về đầu danh sách

- Chiều về: Duyệt danh sách từ trên xuống, đẩy phần tử có giá trị lớn về cuối danh sách

*Lưu ý: sau mỗi lần duyệt thì ta lưu lại những vị trí đã đúng thứ tự, để các lần duyệt sau được thu hẹp lại, tránh những phép so sánh không cần thiết

Trang 55

Mã giả

ShakeSort()

{

top = 1 ; //Đầu danh sách

bottom = n - 1; //Cuối danh sách

top = k+1

//Lượt về

for i = top to bottom

if a[ i – 1 ]> a [ i ] {

bottom = k - 1 }

while (top <= bottom) }

Trang 56

Cài đặt

□ Mời một bạn lên bảng viết lại chương trình sắp xếp theo giải thuật chọn chèn trực tiếp

□ Các bạn lớp tự viết vào giấy nháp rồi so

sánh với bạn

Trang 57

Bài tập Shake Sort

□ Sắp xếp theo thứ tự giảm dần mảng sau:

□ 4 2 1 10 6 8 4

Trang 59

Sắp xếp

Sắp xếp Trộn

( MergeSort )

Trang 60

Nêu ý tưởng (sx tăng)

Trong mỗi lần duyệt, ta chia 2 hướng ngược nhau:

- Chiều đi: Duyệt danh sách từ dưới lên, đẩy phần tử có giá trị nhỏ về đầu danh sách

- Chiều về: Duyệt danh sách từ trên xuống, đẩy phần tử có giá trị lớn về cuối danh sách

*Lưu ý: sau mỗi lần duyệt thì ta lưu lại những vị trí đã đúng thứ tự, để các lần duyệt sau được thu hẹp lại, tránh những phép so sánh không cần thiết

Trang 61

Mã giả

ShakeSort()

{

top = 1 ; //Đầu danh sách

bottom = n - 1; //Cuối danh sách

top = k+1

//Lượt về

for i = top to bottom

if a[ i – 1 ]> a [ i ] {

bottom = k - 1 }

while (top <= bottom) }

Trang 62

Cài đặt

□ Mời một bạn lên bảng viết lại chương trình sắp xếp theo giải thuật chọn chèn trực tiếp

□ Các bạn lớp tự viết vào giấy nháp rồi so

sánh với bạn

Trang 63

Bài tập Shake Sort

□ Sắp xếp theo thứ tự giảm dần mảng sau:

□ 4 2 1 10 6 8 4

Trang 64

Chương 3

Danh sách đặc

(mảng)

Trang 65

Định nghĩa mảng

Là một danh sách mà

cách phần tử được sắp xếp kế nhau trong bộ

nhớ

Trang 66

Cách khai báo mảng

mảng 1 chiều: int a[10]

mảng 2 chiều: int a[10][10]

C++:

Kiểu_dữ_liệu tên_mảng[spt][spt]…;

Trang 69

Chèn một pt vào mảng

Giải thuật:

+ Khi thêm một phần tử x vào vị trí

i (0<=i<n) thì các phần tử từ a[i] đến a[n-1] được di chuyển ra

phía sau một vị trí

+ Gán a[i] = x

+ Tăng spt lên một đơn vị

Trang 72

Cài đặtvoid Chèn()

for (int i=n-1 ; i>=k ; i ) a[i+1] = a[ i]

a[k] = x;

n++;

}

Trang 73

Xoá một phần tử của

mảng

Giải thuật:

+ Khi xoá phần tử i, các phần

tử từ a[i+1] đến a[n-1] được

di chuyển ra phía trước một vị trí

+ giảm spt đi một đơn vị

Trang 74

Cài đặtvoid Xoá_1_pt()

Ngày đăng: 11/08/2024, 16:28

w