1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng học môn cấu trúc dữ liệu

299 1,5K 1

Đ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 299
Dung lượng 4,45 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cấu trúc dữ liệu là môn học căn bản nhưng là ác mộng của hơn 80% sinh viên học chuyên ngành công nghệ thông tin. Bài giảng trên lớp nhanh, ít ví dụ minh họa, ít thực hành. Sinh viên tự phải xoay sở lập trình bài tập để nộp.Đây là toàn bộ bài giảng về môn cấu trúc dữ liệu. Gồm 299 slide giúp hiểu hết về môn Cấu trúc dữ liệu, có cả bài tập để sinh viên thực hànhH

Trang 1

CẤU TRÚC DỮ LIỆU

Nội dung gồm 6 chương:

Trang 2

KHOA KHOA HỌC MÁY TÍNH – BỘ MÔN LẬP TRÌNH

Trang 3

1 Ý nghĩa cấu trúc dữ liệu

2 Cấu trúc dữ liệu và các vấn đề liên quan

3 Thuật toán

NỘI DUNG TRÌNH BÀY

Trang 4

1 Ý nghĩa cấu trúc dữ liệu

DATA STRUCTURE + ALGORITHM = PROGRAM

Niklaus wirth

• Để giải bài toán trên máy tính: cần thuật toán

• Thuật toán phản ánh các phép xử lý

• Đối tượng để xử lý (trên máy tính) là dữ liệu

• Dữ liệu biểu diễn thông tin cần thiết của bài toán

• vd:

•Cấu trúc dữ liệu thay đổi thuật toán thay đổi theo

Trang 5

a Dữ liệu và lưu trữ dữ liệu

b Các kiểu dữ liệu đơn giản

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

2 Cấu trúc dữ liệu và các vấn đề liên quan

Trang 6

a Dữ liệu và lưu trữ dữ liệu

2 Cấu trúc dữ liệu và các vấn đề liên quan

Dữ liệu là vật mang thông tin đã được chuẩn hóa Cần phân biệt dữ liệu với thông tin:

- Dữ liệu tồn tại khách quan

- Thông tin có ý nghĩa chủ quan.

Trang 7

a Dữ liệu và lưu trữ dữ liệu

2 Cấu trúc dữ liệu và các vấn đề liên quan

Trong một bài toán, dữ liệu gồm một tập các phần

tử cơ sở, gọi là dữ liệu nguyên tử Nó có thể là

một chữ số, một ký tự, một từ,…tùy vào bài toán

cụ thể.

Trên cơ sở các dữ liệu nguyên tử, các cung cách liên kết chúng với nhau sẽ dẫn tới các cấu trúc dữ liệu khác nhau

Trang 8

a Dữ liệu và lưu trữ dữ liệu

2 Cấu trúc dữ liệu và các vấn đề liên quan

- Khi chọn một cấu trúc dữ liệu phải nghĩ ngay tới các phép toán tác động lên cấu trúc ấy và ngược lại

- Cách biểu diễn một cấu trúc dữ liệu trong bộ nhớ

được gọi là cấu trúc lưu trữ (storage structure)

- Có thể có nhiều CTLT khác nhau cho cùng một CTDL, cũng có thể có nhiều CTDL khác nhau mà được cài đặt trong bộ nhớ bởi cùng một kiểu cấu trúc lưu trữ

- CTDL trong và CTDL ngoài

Trang 9

a Dữ liệu và lưu trữ dữ liệu

b Các kiểu dữ liệu đơn giản

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

2 Cấu trúc dữ liệu và các vấn đề liên quan

Trang 10

2 Cấu trúc dữ liệu và các vấn đề liên quan

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

Kiểu int Kiểu float

Kiểu char Kiểu lôgic

b Các kiểu dữ liệu đơn giản

Kích thước: 2Byte PVBD: -32768 -> 32767 Kích thước: 4Byte

PVBD: 3.4E-38 ->3.4E+38

Kích thước: 1Byte PVBD: -128 ->127 Kích thước: 1Byte PVBD: True, False

Trang 11

a Dữ liệu và lưu trữ dữ liệu

b Các kiểu dữ liệu đơn giản

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

2 Cấu trúc dữ liệu và các vấn đề liên quan

Trang 12

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

2 Cấu trúc dữ liệu và các vấn đề liên quan

Các kiểu dữ liệu

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

Kiểu mảng (array) Kiểu chuỗi (string) Kiểu bản ghi (record) Kiểu tập hợp (set) Kiểu tập tin (file) Kiểu con trỏ (pointer)

Trang 13

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

2 Cấu trúc dữ liệu và các vấn đề liên quan

Trang 15

Các tính chất cơ bản của thuật toán:

Trang 23

Tổng kết

1.Người ta chia dữ liệu ra làm mấy loại? Kể tên?

2.Phân biệt sự khác nhau giữa CTDL và CTLT?

3.Theo bạn học CTDL để làm gì?vì sao phải học nó? 4.Để học tốt học phần CTDL bạn phải học ntn?

Trang 24

Chúc các bạn thành công !

KHOA KHOA HỌC MÁY TÍNH – BỘ MÔN LẬP TRÌNH

Lê Tân – Bộ môn lập trình – Khoa CNTT

Mail: tanleddt @yahoo.com

Trang 25

4 Viết một hàm thay thế một chuỗi con trong một

chuỗi bằng một chuỗi con khác.

5 Dúng cấu trúc mảng Viết

chương trình quản lý danh sách sinh viên (gồm

họ tên, mã sinh viên) Chương trình có khả năng thêm, bớt, tìm kiếm.

BÀI TẬP

Trang 26

1 Viết chương trình giải phương trình bậc nhất ax + b = 0

/* Bai tap1 - Giai phuong trinh bac nhat AX + B = 0 */

#include <stdio.h>

void main()

{

float a, b;

printf("\nGiai phuong trinh bac nhat AX + B = 0");

printf("\nCho biet cac he so A B : ");

scanf("%f%f", &a, &b);

Trang 27

printf("\nNhap hai vao so nguyen duong : ");

scanf("%u%u", &n, &m);

printf("\nUCLN cua %u va %u = %u", n, m, UCLN(n,m));

printf("\nBCNN cua %u va %u = %u", n, m, BCNN(n,m));

getch();

}

Trang 28

printf("\nMa tran %c : ", id);

for (i=0; i<n; i++)

Trang 29

{ int A[MAX][MAX], B[MAX][MAX], C[MAX][MAX], n, m, p, i, j, k;

nhap_so_nguyen(&n, 2, MAX, 'n'); nhap_so_nguyen(&m, 2, MAX, 'm'); nhap_so_nguyen(&p, 2, MAX, ‘p'); printf("\nNhap ma tran A : ");

for (i=0; i<n; i++)

{ printf("B[%d,%d] = ", i, j); scanf("%d", &(B[i][j])); }

in_ma_tran(A, n, m, 'A'); in_ma_tran(B, n, m, 'B');

for (i=0; i<n; i++)

Trang 30

char *tim_thay(char *source, char *substr, char *replace)

{ char *found, *temp, *stemp; int pos = 0;

stemp = strdup(source); found = strstr(stemp + pos, substr); while (found)

{ pos = found - stemp + strlen(replace) - strlen(substr) + 1;

temp = (char *) malloc(sizeof(stemp) + strlen(replace) -

strlen(substr) + 1);

strncpy(temp, stemp, found - stemp);

temp[found-stemp] = 0; strcat(temp, replace);

strcat(temp, found + strlen(substr));

free(stemp); stemp = (char *)malloc(sizeof(temp) + 1);

strcpy(stemp, temp); free(temp);

found = strstr(stemp + pos, substr);

} return stemp;

}

Trang 31

char source[255], substr[50], replace[50], *result;

printf("\nNhap chuoi nguon : ");

result = tim_thay(source, substr, replace);

printf("\nKet qua = %s", result);

getch();

}

Trang 32

5 Dúng cấu trúc mảng Viết chương trình quản lý danh sách sinh viên (gồm

họ tên, mã sinh viên) Chương trình có khả năng thêm, bớt, tìm kiếm.

char hoten[35];

float diem[3];

} danhsach[MAX];

int n = 0;

Trang 33

5 Dúng cấu trúc mảng Viết chương trình quản lý danh sách sinh viên (gồm

họ tên, mã sinh viên) Chương trình có khả năng thêm, bớt, tìm kiếm.

void nhapmoi() { char masv[5], tmp[3];

int i; float diem[3];

do { printf("\nCho biet ma sinh vien: ");

gets(masv);

if (strlen(masv)) { strcpy(danhsach[n].masv, masv);

printf("\nCho biet ho ten : ");

gets(danhsach[n].hoten);

printf("\nCho biet diem so : ");

for (i=0; i<3; i++) { scanf("%f", &diem[i]);

danhsach[n].diem[i] = diem[i];

} gets(tmp);

n++;

} } while (strlen(masv));

}

Trang 34

5 Dúng cấu trúc mảng Viết chương trình quản lý danh sách sinh viên (gồm

họ tên, mã sinh viên) Chương trình có khả năng thêm, bớt, tìm kiếm.

void timkiem()

{ char masv[5]; int i = 0, found = 0;

printf("\nCho biet ma so lop : ");

gets(masv);

if (strlen(masv))

while (i<n)

if (stricmp(danhsach[i].masv, masv) == 0)

{ printf("\nMa so lop : %s", danhsach[i].masv);

printf("\nHo va ten : %s", danhsach[i].hoten);

printf("\nDiem Toan : %f", danhsach[i].diem[TOAN]);

Trang 35

5 Dúng cấu trúc mảng Viết chương trình quản lý danh sách sinh viên (gồm

họ tên, mã sinh viên) Chương trình có khả năng thêm, bớt, tìm kiếm.

void xoa()

{ char masv[5], traloi; int i = 0, j;

printf("\nCho biet ma sinh vien : "); gets(masv);

if (strlen(masv))

while (i<n)

if (stricmp(danhsach[i].masv, masv) == 0)

{ printf("\nMa so lop : %s", danhsach[i].masv);

printf("\nHo va ten : %s", danhsach[i].hoten);

printf("\nDiem Toan : %f", danhsach[i].diem[TOAN]);

printf("\nDiem Ly : %f", danhsach[i].diem[LY]);

printf("\nDiem Hoa : %f", danhsach[i].diem[HOA]);

printf("\nCo muon xoa khong (C/K)? ");

Trang 36

5 Dúng cấu trúc mảng Viết chương trình quản lý danh sách sinh viên (gồm

họ tên, mã sinh viên) Chương trình có khả năng thêm, bớt, tìm kiếm.

void menu()

{ printf("\n***************"); printf("\n* 1 Them *");

printf("\n* 2 Xoa *"); printf("\n* 3 Tim kiem *");

printf("\n* 0 Thoat *"); printf("\n***************");

{ case '1' : nhapmoi(); break;

case '2' : xoa(); break;

case '3' : timkiem(); break;

}

} while (traloi != '0');

}

Trang 38

CẤU TRÚC DỮ LIỆU

BÀI GIẢNG

KHOA KHOA HỌC MÁY TÍNH – BỘ MÔN LẬP TRÌNH

Trang 42

1 Danh sách

Phép duyệt danh sách: là phép thăm tất cả các

phần tử của danh sách thỏa mãn <điều kiện> nào

đó để thực hiện công việc <xử lý>

Ví dụ: Duyệt danh sách sinh viên để xác định

học bổng

Phép tìm kiếm: là thao tác tìm phần tử trong danh

sách thỏa mãn điều kiện nào đó

Ví dụ: Tìm các sinh viên có học bổng trong danh sách

b Các phép toán trên danh sách

Trang 43

1 Danh sách

Thêm phần tử vào danh sách: là thao tác thêm

phần tử mới vào danh sách Phần tử có thể được thêm vào cuối, đầu hoặc giữa danh sách.

Chú ý danh sách đầy

Ví dụ: Thêm sinh viên mới vào lớp

b Các phép toán trên danh sách

Trang 44

1 Danh sách

Loại bỏ phần tử khỏi danh sách: là thao tác loại

bỏ phần tử khỏi danh sách Trước khi loại bỏ phải xác định phần tử cần loại bỏ (tìm kiếm).

Chú ý: sau khi loại bỏ, số phần tử của danh sách giảm đi 1 đơn vị

Ví dụ: Sinh viên chuyển lớp

b Các phép toán trên danh sách

Trang 45

1 Danh sách

Sửa đổi phần tử trong danh sách: là thao tác

hiệu chỉnh phần tử trong danh sách Trước khi

hiệu chỉnh cần phải xác định phần tử cần hiệu

chỉnh (tìm kiếm)

Ví dụ: Hiệu chỉnh học bổng sau mỗi học kỳ

Sắp xếp thứ tự danh sách: là thao tác sắp lại thứ

tự các phần tử trong danh sách theo một quy tắc nào đó

Ví dụ: Sắp xếp sinh viên giảm dần theo điểm

b Các phép toán trên danh sách

Trang 46

Ghép nhiều danh sách thành danh sách mới: là

thao tác ngược lại của quá trình tách.

Trộn nhiều danh sách thành danh sách mới

b Các phép toán trên danh sách

Trang 48

2 Danh sách đặc

Danh sách đặc là danh sách mà các phần tử được sắp xếp kế tiếp nhau trong bộ nhớ, phần tử ai+1 đứng sau phần tử ai.

a Định nghĩa

a1 a2 … ai ai+1 … an-1 an

add[i] = add[1] + (i-1)*d

Trang 49

2 Danh sách đặc

#define MaxLength 50 //độ dài tối đa của danh sách

typedef int ElementType ; //kiểu phần tử trong danh sách

ElementType DS[ MaxLength ]; //mảng các phần tử

int n;

b Khai báo

Trang 50

2 Danh sách đặc

1 Danh sách A để quản lý các số thực

2 Danh sách F để quản lý các kí tự

3 Danh sách B để quản lý họ và tên sinh viên

4 Danh sách C để quản lý các sinh viên gồm mã sinh viên, họ tên, điểm trung bình

5 Danh sách D để quản lý các phân số

6 Danh sách E để quản lý sinh viên giống câu 4 nhưng trường điểm là danh sách điểm các môn học

b Khai báo cấu trúc dữ liệu

Trang 51

2 Danh sách đặc

Cho danh sách A có cấu trúc như sau:

b Khai báo cấu trúc dữ liệu

Tran Xuan Anh

0909509735

Nguyen Ngoc Hai 01215586270

Hoang Tuan Vu 0905323114

Hãy khai báo CTDL theo cấu trúc danh sách đặc

để quản lý danh sách trên

Trang 52

2 Danh sách đặc

Cho danh sách A có cấu trúc như sau:

b Khai báo cấu trúc dữ liệu

Trang 53

2 Danh sách đặc

i Tìm kiếm phần tử trong danh sách

ii Chèn phần tử vào danh sách

iii Loại bỏ phần tử khỏi danh sách

c Các phép toán

Trang 54

2 Danh sách đặc

v Tìm kiếm phần tử trong danh sách

Trường hợp danh sách không thứ tự

int Search_List (int x, ElementType DS[],int n){ int i=1;

while (i<=n){

if(DS[i]==x) return i;

i++;

} return -1;

}

Trang 55

Minh Họa Thuật Toán Tìm Kiếm

Trang 57

2 3 4 5 6 7 1

X=10

i

i=8, không tìm thấy

Minh Họa Thuật Toán Tìm Kiếm

Trang 59

2 Danh sách đặc

ii Loại bỏ phần tử khỏi danh sách

Để loại bỏ phần tử vị trí p ra khỏi danh sách L ta dời các phần tử từ vị trí p+1 đến cuối danh sách sang trái

1 vị trí.

Lưu ý: độ dài của danh sách giảm đi 1 đơn vị

c Các phép toán

Trang 60

2 Danh sách đặc

i Giải thuật Chèn phần tử vào danh sách

void Insert_List ( ElementType X, int p, ElementType DS[], int

Trang 61

2 4 1 5 1

2 8

Trang 62

2 Danh sách đặc

ii Loại bỏ phần tử khỏi danh sách

void Delete_List (int p ,ElementType DS[],int &n ){

if ((p<0) || (p>n)) printf("Vi tri khong hop le"); else{

for(int i=p;i<n;i++) DS[i] = DS[i+1];

n=n - 1;

} }

Trang 63

2 Danh sách đặc

i Ưu điểm

d Đặc điểm của danh sách đặc

 Sử dụng 100% ô nhớ để lưu trữ thông tin

 Truy xuất trực tiếp phần tử Elements[i]

 Dễ dàng tìm kiếm phần tử bằng phương pháp nhị phân, nếu danh sách có thứ tự.

Trang 64

2 Danh sách đặc

ii Nhược điểm

d Đặc điểm của danh sách đặc

 Không phù hợp với phép chèn và loại bỏ Số lần

di chuyển trung bình cho một phép chèn hoặc loại bỏ là n/2.

Trang 65

2 Danh sách đặc

1 Cho dãy số n nguyên và số nguyên x Kiểm tra

xem x có thuộc dãy đã cho hay không Nếu có cho biết vị trí của x Xóa tất cả các số lớn hơn x.

2 Cho n số nguyên dương Xóa các số trong dãy nhỏ

hơn 10 Chèn số 20 vào vị trí thứ 10.

3 Cho n số nguyên Tìm phần tử nhỏ nhất của dãy.

4 Nhập vào một dãy n số nguyên Kiểm tra xem dãy

đã cho có tăng hay không.

5 Cho 2 dãy A, B Viết chương trình trộn 2 dãy A, B

thành dãy C.

Bài tập

Trang 66

Chúc các bạn thành công !

KHOA KHOA HỌC MÁY TÍNH – BỘ MÔN LẬP TRÌNH

Trang 67

3 Danh sách liên kết

a Định nghĩa và khai báo

b Các phép toán

Trang 68

+ và phần kết nối (chứa địa chỉ của nút kế tiếp).

a Định nghĩa và khai báo

Trang 69

3 Danh sách liên kết

typedef int ElementType ; //kiểu của phần tử trong danh sách

struct List {

ElementType Element ; //Chứa nội dung của phần tử

List * link ; /*con trỏ đến phần tử kế tiếp trong danh sách*/

};

List *First ;

a Định nghĩa và khai báo

Trang 70

2 Danh sách liên kết

1 Danh sách A để quản lý các số thực

2 Danh sách F để quản lý các kí tự

3 Danh sách B để quản lý họ và tên sinh viên

4 Danh sách C để quản lý các sinh viên gồm mã sinh viên, họ tên, điểm trung bình

5 Danh sách D để quản lý các phân số

6 Danh sách E để quản lý sinh viên giống câu 4 nhưng trường điểm là danh sách điểm các môn học

a Khai báo cấu trúc dữ liệu

Trang 71

3 Danh sách liên kết

i Khởi tạo danh sách rỗng

ii Kiểm tra danh sách rỗng

iii Xác định vị trí của phần tử trong DS

iv Chèn phần tử vào danh sách

v Loại bỏ phần tử khỏi danh sách

vi Ghép danh sách

vii Trộn danh sách

b Các phép toán

Trang 72

3 Danh sách liên kết

i.Khởi tạo danh sách rỗng

void Make_List ( List *& First ) {

First = NULL;

}

b Các phép toán

Trang 73

3 Danh sách liên kết

ii Kiểm tra danh sách rỗng

Danh sách rỗng nếu First == NULL int Empty_List ( List * First )

{

return First ==NULL;

}

b Các phép toán

Trang 74

3 Danh sách liên kết

iii Xác định vị trí n trong danh sách

List * Locate (int n , List * T )

{ List * P ; int count = 1; P = T ;

while (( P !=NULL)&&( count < n ))

Trang 76

5

q 5f

5f

N

p->link=q->link q->link=p

3 Danh sách liên kết (chèn vào vị trí khác)

Trang 77

3 Danh sách liên kết

iv Chèn phần tử vào danh sách

void in_sert ( ElementType x , List *& T , int k) { List * p , * q ;

p =new List ; p -> Element = x ;

Trang 78

3 Danh sách liên kết (xóa đầu DS)

Trang 79

2f

Trang 80

3 Danh sách liên kết

v Xóa phần tử khỏi danh sách

void Delete (int k, List *& T ){

if(( q ==NULL)||( q -> link ==NULL))

printf(“ Vi tri khong hop le ”);

Trang 81

3 Danh sách liên kết

i Ưu điểm

- Thích hợp phép chèn, loại bỏ, trộn, ghép danh sách

- Rất phù hợp với các loại danh sách có nhiều biến động

c Đặc điểm của danh sách liên kết

Trang 82

3 Danh sách liên kết

ii Nhược điểm

- Tốn vùng nhớ cho chỉ điểm liên kết

- Không thích hợp cho tìm kiếm

c Đặc điểm của danh sách liên kết

Trang 83

3 Danh sách liên kết

1 Viết thuật toán tạo danh sách liên kết chứa các số

nguyên nhập từ bàn phím, sau đó hiển thị danh sách vừa tạo

2 Viết thuật toán chèn phần tử vào danh sách liên kết sau

vị trí n được nhập từ bàn phím

3 Viết thuật toán xóa phần tử sau vị trí m trong danh sách liên kết

4 Viết thuật toán đếm số nút trong danh sách liên kết

5 Viết thuật toán tính giá trị trung bình của các phần tử trong danh sách

6 Viết thuật toán đảo ngược một danh sách liên kết

7 Viết thuật toán trộn 2 danh sách liên kết cho trước

Bài tập

Ngày đăng: 25/06/2017, 10:07

HÌNH ẢNH LIÊN QUAN

Chương 6: ĐỒ THỊ ĐỒ THỊ - Bài giảng học môn cấu trúc dữ liệu
h ương 6: ĐỒ THỊ ĐỒ THỊ (Trang 273)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w