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

Please purchase a personal license.CHƯƠNG 3 (tiếp) - DANH SÁCH NỐI ĐƠN

34 353 0

Đ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 34
Dung lượng 503,11 KB

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

Nội dung

KHÁI NIỆM DANH SÁCH NỐI ĐƠN Danh sách được tạo thành từ các phần tử gọi là nút Node Các node có thể nằm bất kỳ đâu trong bộ nhớ Mỗi node là một cấu trúc gồm 2 thành phần infor chứ

Trang 1

Please purchase a personal

license.CHƯƠNG 3 (tiếp)

Trang 2

KHÁI NIỆM DANH SÁCH NỐI ĐƠN

 Danh sách được tạo thành từ các phần tử gọi là nút

(Node)

 Các node có thể nằm bất kỳ đâu trong bộ nhớ

 Mỗi node là một cấu trúc gồm 2 thành phần

 infor chứa thông tin của 1 phần tử của danh sách L

 next là một con trỏ, nó trỏ vào node đứng sau.

A

Một node trong danh sách

Trang 3

KHÁI NIỆM DANH SÁCH NỐI ĐƠN

Một node trong danh sách sinh viên

1089 là địa chỉ vùng nhớ của node đứng sau

Trang 4

KHÁI NIỆM DANH SÁCH NỐI ĐƠN

 Để truy nhập vào các node trong

danh sách ta phải đi từ node đầu tiên

 Cần một con trỏ, trỏ vào node đầu

trong danh sách

A B

Danh sách nối đơn

L trỏ vào node đầu tiên của danh sách khi đó

Để truy xuất vào thông tin của phần tử ta viết

L->infor

Để chỉ ra phần tử đứng sau ta viết

L->next

Trang 5

Vu Lan Anh

32 7.8 2038

Ha Anh Lan

23 8.7 1089

Ta Bach Lan 1547

L=20381089

Vu Hoa Lan

23 8.7 3452

Bui Nhu Lan

23 8.7

NULL 1032

3452

1032

Trang 6

ƯU VÀ NHƯỢC ĐIỂM CỦA DSNĐ

Trang 7

KHAI BÁO CẤU TRÚC DỮ LIỆU

 Khai báo Cấu trúc dữ liệu MẪU

struct Item {

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

Khai báo kiểu dữ liệu phần tử

typedef Node * TRO ;

Khai báo kiểu con trỏ trỏ vào Node

L=NULL -> ds L rỗng

};

struct Node {

Item infor ; Node * next ; };

Khai báo kiểu dữ liệu Node

KB con trỏ trỏ vào Node đầu tiên

TRO L ;

Trang 8

KHAI BÁO CẤU TRÚC DỮ LIỆU

 Khai báo Cấu trúc dữ liệu sinh viên

float diemtb;

};

SINHVIEN infor ; Node * next ;

};

KB con trỏ trỏ vào Node đầu tiên TRO L ;

typedef Node * TRO ;

Khai báo kiểu con trỏ của Node

Trang 9

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

 Kiểm tra danh sách rỗng

 Duyệt danh sách

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

CÁC PHÉP TOÁN TRÊN DANH SÁCH

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

 Bổ sung node mới vào đầu danh sách

 Bổ sung node mới vào sau một node

 Xóa node đầu danh sách

 Xóa node đứng sau một node trong danh sách

 Sắp xếp danh sách

Trang 10

CÁC PHÉP TOÁN TRÊN DANH SÁCH

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

Danh sách nối đơn rỗng

 Kiểm tra danh sách rỗng

Trang 11

L Q

Q Q Q Q

hiện yêu cầu) và chuyển Q

xuống node ngay sau nó:

Q=Q->next;

3 Lặp lại bước 2

Q = NULL

Trang 12

DUYỆT DANH SÁCH

void travel ( TRO L ) {

TRO Q;

if (!empty(L)) {

Q = L;

while (Q != NULL ) {

//Statement

Q = Q->next; }

} }

Trang 13

TÌM KIẾM MỘT NODE TRÊN DANH SÁCH

A B

L Q

Q

Tìm thấy và con

trỏ Q trỏ vào

node tìm được

Trang 14

TÌM KIẾM MỘT NODE TRÊN DANH SÁCH

1 Nếu danh sách không rỗng, cho con trỏ

Q trỏ vào node đầu tiên: Q = L;

2 Nếu (Q != NULL) và (chưa trỏ vào node cần tìm) thì (có thể thực hiện yêu cầu) và chuyển Q xuống node ngay sau nó:

Q=Q->next;

3 Lặp lại bước 2

4 Trả về con trỏ Q: return Q;

Trang 15

TÌM KIẾM MỘT NODE TRÊN DANH SÁCH

A B

L Q

Q Q Q

Hàm Search trả về NULL nếu

không tìm thấy, ngược lại trả

về con trỏ trỏ vào node tìm

được

Trang 16

BỔ SUNG VÀO ĐẦU DANH SÁCH

P

B

L

Danh sách có phần tử đầu tiên

được trỏ bởi con trỏ L

C D E

Khai báo con trỏ P: TRO P;

Cấp phát bộ nhớ cho con trỏ P:

P = new Node;

next của node mới trỏ vào phần tử

đầu của danh sách: P->next = L;

L trỏ vào node mới: L = P;

Đưa dữ liệu vào node mới:

P ->infor = X;

Trang 17

BỔ SUNG VÀO ĐẦU DANH SÁCH

 Hàm thực hiện việc bổ sung

void First_Add ( TRO &L , Item X ) {

Trang 18

BỔ SUNG VÀO SAU MỘT NODE

P Q

Danh sách có phần tử đầu tiên

được trỏ bởi con trỏ L

Dữ liệu lưu trong biến X

Khai báo con trỏ P: TRO P;

A B

L

Q trỏ vào node mà node mới

được bổ sung vào sau nó

P Q

next của node mới trỏ vào node đứng

sau node trỏ bởi Q: P->next = Q->next;

next của node trỏ bởi Q trỏ vào

node mới: Q->next = P;

Đưa dữ liệu vào node mới:

Trang 19

BỔ SUNG VÀO SAU MỘT NODE

 Hàm thực hiện việc bổ sung

void Insert ( TRO &L , TRO Q , Item X ) { TRO P;

Trang 20

XÓA NODE ĐẦU DANH SÁCH

Q

A B

L

1 Khai báo con trỏ Q: TRO Q;

2 Cho Q trỏ vào node đầu tiên:

Q = L;

L

F

C E

3 Chuyển L xuống node thứ 2:

L = L->next;

4 Xóa node trỏ bởi con trỏ Q:

delete Q;

Trang 21

XÓA NODE ĐẦU DANH SÁCH

void First_Delete ( TRO &L ) {

Trang 22

XÓA NODE SAU NODE TRỎ BỞI M

A B

L

1 Khai báo con trỏ Q: TRO Q;

2 Cho Q trỏ vào node ở sau

node trỏ bởi M: Q = M->next;

M

C Q

F

C E

3 next của M trỏ vào node sau

Trang 23

XÓA NODE SAU NODE TRỎ BỞI M

void M_Delete ( TRO &L, TRO M) {

Trang 24

TẠO MỘT DANH SÁCH MỚI

L

1 Khai báo 2 con trỏ P, Q và

biến X: TRO P, Q; Item X;

2 Nhập dữ liệu cho biến X;

4 Nếu L=NULL thì L trỏ vào P

Ngược lại next của node trỏ

bởi Q trỏ vào node mới

A

C

6 Nếu thỏa mãn điều kiện

nhập tiếp thì lặp lại bước 2,

ngược lại kết thúc

5 Cho Q trỏ vào node mới

Trang 25

TẠO MỘT DANH SÁCH MỚI

void input_List( TRO &L)

cout<<“Co nhap nua khong(C/K)?:”; cin>>tieptuc; } while (toupper(tieptuc) == ‘C’); //Bước 6

}

Trang 26

Bài tập

 Chương trình quản lý sinh viên (mã SV, họ tên, năm sinh, điểm tổng kết) bằng danh sách nối đơn với các chức năng

 Tạo mới danh sách

 Xác định chiều dài danh sách

 Hiển thị danh sách

 Hiển thị danh sách

 Tìm kiếm sinh viên theo mã và hiển thị thông tin của sinh viên nếu tìm thấy

 Xóa sinh viên khi biết mã

 Thêm một sinh viên mới vào danh sách theo vị trí

 Sắp xếp danh sách theo chiều tăng dần

Trang 27

DANH SÁCH NỐI VÒNG

Là một danh sách nối đơn

A B

L

Có next của node cuối cùng trỏ

vào node đầu tiên

DS nối vòng có ưu điểm là xuất

phát từ một vị trí bất kỳ có thể

C D E

phát từ một vị trí bất kỳ có thể

duyệt hết danh sách

Về cấu trúc dữ liệu và các phép

toán tương tự như DS nối đơn

Sinh viên tự nghiên cứu trong tài

liệu

Trang 28

DANH SÁCH MÓC NỐI HAI CHIỀU

Là một danh sách móc nối mà mỗi

node có ba thành phần

infor prev

B

Thành phần infor chứa dữ liệu

Con trỏ next trỏ vào node đứng sau

next

Con trỏ prev trỏ vào node đứng trước

B

Trang 29

DANH SÁCH MÓC NỐI HAI CHIỀU

L1 A

B

Hình ảnh danh sách móc nối hai chiều

Để quản lý danh sách trong bộ nhớ

người ta dùng hai con trỏ

C D L2

Con trỏ L1 trỏ vào node đầu của danh

sách

Con trỏ L2 trỏ vào node cuối của danh

sách

Trang 30

KHAI BÁO CẤU TRÚC DỮ LIỆU

 Khai báo Cấu trúc dữ liệu MẪU

struct Item {

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

Khai báo kiểu dữ liệu phần tử

typedef Node * TRO ;

Khai báo kiểu con trỏ trỏ vào Node

L1/L2=NULL -> ds L rỗng

};

struct Node {

Item infor ; Node * next ; Node * prev ; };

Khai báo kiểu dữ liệu Node

KB con trỏ trỏ vào Node đầu tiên

và node cuối

TRO L1, L2 ;

Trang 31

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

 Kiểm tra danh sách rỗng

 Duyệt danh sách

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

 Bổ sung node mới vào đầu danh sách

CÁC PHÉP TOÁN TRÊN DANH SÁCH

 Bổ sung node mới vào đầu danh sách

 Bổ sung node mới vào trước/sau một node

 Xóa node đầu danh sách

 Xóa node đứng trước/sau một node trong danh sách

 Sắp xếp danh sách

Trang 32

Bổ sung node mới vào đầu danh sách

Trang 33

Bổ sung node mới vào đầu danh sách

L1 B

Trang 34

Bổ sung node mới vào đầu danh sách

void first_Add ( TRO &L1, TRO &L1, Item X )

Ngày đăng: 21/04/2016, 18:29

HÌNH ẢNH LIÊN QUAN

Hình ảnh danh sách móc nối hai chiều - Please purchase a personal license.CHƯƠNG 3 (tiếp) - DANH SÁCH NỐI ĐƠN
nh ảnh danh sách móc nối hai chiều (Trang 29)

TỪ KHÓA LIÊN QUAN

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

w