1. Trang chủ
  2. » Công Nghệ Thông Tin

CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 4 DANH SÁCH TUYẾN TÍNH docx

29 3,2K 40

Đ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 29
Dung lượng 518,5 KB

Nội dung

CÁC PHÉP TOÁN TRÊN DSTT Khởi tạo danh sách rỗng creat  Kiểm tra danh sách rỗng empty  Kiểm tra danh sách đầy full  Bổ sung một phần tử vào danh sách add  Loại bỏ một phần tử khỏi da

Trang 1

CHƯƠNG 4

DANH SÁCH TUYẾN TÍNH

Trang 2

MỤC TIÊU

Khái niệm danh sách tuyến tính

Các phép toán với danh sách

Lưu trữ kế tiếp của danh sách tuyến tính

Danh sách móc nối đơn

Danh sách nối đôi

Danh sách móc nối vòng

Ngăn xếp

Hàng đợi

Trang 3

KHÁI NIỆM DSTT

Danh sách là một tập các phần tử thuộc cùng một lớp đối tượng nào đó

Dãy số nguyên, danh sách sinh viên,

Giả sử L là một danh sách có n phần tử

L = { a1, a2, , an }

n gọi là độ dài của danh sách L

n>0 thì a 1 là phần tử đầu tiên, a n là phần tử cuối cùng

Với L, ta nói a i đứng trước a i+1 và đứng sau a i-1 (i=1 n).

Danh sách mà các phần tử có thứ tự “trước-sau” gọi là

“DSTT”

Trang 4

CÁC PHÉP TOÁN TRÊN DSTT

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

Kiểm tra danh sách rỗng (empty)

Kiểm tra danh sách đầy (full)

Bổ sung một phần tử vào danh sách (add)

Loại bỏ một phần tử khỏi danh sách (remove)

Sắp xếp danh sách (sort)

Tìm kiếm trên danh sách (search)

Trang 5

LƯU TRỮ KẾ TIẾP CỦA DSTT

DSTT được lưu trữ trong bộ nhớ bởi một mảng một chiều gọi là lưu trữ kế tiếp.

Mỗi phần tử của mảng lưu trữ một phần tử của danh sách

Ưu điểm

Truy cập nhanh và đồng đều đối với mọi phần tử

Các thao tác được thực hiện khá đơn giản

Nhược điểm

Do kích thước mảng cố định khi khai báo nên có thể dẫn đến

sự lãng phí hoặc thiếu bộ nhớ.

Trang 6

BIỂU DIỄN CẤU TRÚC DỮ LIỆU

Giả sử các phần tử của danh sách có kiểu dữ liệu

là “Item”

Độ dài của danh sách là một số nguyên dương N

Danh sách được biểu diễn bởi một cấu trúc gồm hai thành phần

Thành phần thứ nhất: biến “count” lưu chỉ số phần tử mảng, lưu trữ phần tử cuối cùng của danh sách.

Thành phần thứ hai: mảng một chiều “E” lưu các phần tử của danh sách L, E[i-1] lưu a i

Trang 7

LƯU TRỮ KẾ TIẾP CỦA DSTT

 Biểu diễn danh sách

Trang 8

LƯU TRỮ KẾ TIẾP CỦA DSTT

 Cấu trúc dữ liệu được khai báo như sau

#define Max N

struct Item {

Các thành phần dữ liệu ; };

struct List {

int count ; Item E[Max];

};

List L ; //Khai báo ds L

L.count = -1 -> ds L rỗng L.count = Max-1 -> ds L đầy

Trang 9

LƯU TRỮ KẾ TIẾP CỦA DSTT

 Ví dụ

#define Max 7

struct Sinhvien {

char hoten[30] ; char gioitinh [4];

int tuoi ; };

struct List {

int count ; Sinhvien E[Max];

};

List L ; //Khai báo ds L

Trang 10

LƯU TRỮ KẾ TIẾP CỦA DSTT

 Ví dụ

S1 S2 S3 S4 S5E

Trang 11

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

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

Kiểm tra danh sách rỗng

Kiểm tra danh sách đầy

Phép loại bỏ một phần tử khỏi danh sách

Bổ sung một phần tử vào danh sách

Thống kê danh sách

Tính toán trên danh sách

Tìm kiếm trên danh sách

Sắp xếp danh sách

Trang 12

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

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

void creat(List &L) {

Trang 13

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Kiểm tra danh sách rỗng

int empty (List L) {

return (L.count == -1);

}

Hàm empty trả về giá trị 1 nếu danh sách rỗng, ngược lại trả

về 0

Trang 14

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Kiểm tra danh sách đầy

int full (List L) {

return (L.count == Max-1);

Trang 15

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Thêm một phần tử vào cuối danh sách

14 23 11 25 37Mảng E

Trang 16

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

int Add (List &L, Item X) {

if (full(L)) return 0;

else { L.count++;

L.E[L.count] = X;

return 1;

} }

Thêm một phần tử vào cuối danh sách

Trang 17

LƯU TRỮ KẾ TIẾP CỦA DSTT

CHƯƠNG TRÌNH TẠO

VÀ HiỂN THỊ DANH SÁCH SINH VIÊN

Trang 18

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép loại bỏ phần tử thứ k khỏi danh sách L

14 23 42 11 25Mảng E

for (i=k;i<=L.count; i++)

L.E[i-1] = L.E[i];

L.count = L.count-1;

Trang 19

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép loại bỏ một phần tử khỏi danh sách L

int Remove (int k , List &L)

{

if (k <= L.count+1 && k>0) {

for (int i = k ; i <= L.count; i++)

L.E[i-1] = L.E[i] ; L.count = L.count - 1;

return 1;

}

else return 0;

}

Trang 20

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép loại bỏ một phần tử khỏi danh sách L

Hàm Remove loại bỏ phần tử thứ k trong danh sách L

Phép loại bỏ thành công khi L không rỗng và k là một vị trí nằm trong ds L

Hàm trả về 1 nếu loại bỏ thành công, ngược lại trả về 0

Trang 21

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép bổ sung một phần tử vào vị trí k trong danh sách L

Trang 22

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép bổ sung một phần tử vào vị trí k trong danh sách L

int Insert ( List &L, int k, Item X)

Trang 23

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép bổ sung một phần tử vào danh sách L

Hàm Insert bổ sung X vào vị trí k trong ds L

Phép bổ sung thành công khi L không đầy và k là một

vị trí nằm trong ds L

Hàm trả về giá trị 1 nếu bổ sung thành công, ngược lại trả về 0.

Trang 24

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép bổ sung một phần tử vào cuối danh sách L

Trang 25

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép bổ sung một phần tử vào cuối danh sách L

Bổ sung X=24 vào cuối danh sách L

14 23 42 11 25 24

Mảng E

count = 6

Trang 26

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép bổ sung một phần tử vào cuối danh sách L

Procedure Insert_End (X:Item; Var L:List; Var OK:Boolean); Var i : integer;

Trang 27

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

Phép bổ sung một phần tử vào cuối danh sách L

 Phép bổ sung thành công khi L không đầy

 Biến OK cho biết phép toán có thành công hay

không

 OK = True -> Thành công

 OK = False -> Không thành công

Trang 28

Vẽ hình mô tả quá trình bổ sung phần tử A6 vào đầu danh sách, vào sau phần tử thứ 3 (A3) trong danh sách.

Giả sử danh sách lưu trữ thông tin về các sinh viên, mỗi sinh viên gồm: Mã sinh viên, họ và tên, năm sinh, điểm tổng kết Hãy cài đặt chương trình thực hiện các yêu cầu sau:

Trang 29

CÁC PHÉP TOÁN TRÊN DS KẾ TIẾP

sách

Ngày đăng: 29/03/2014, 00:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w