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

CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 3 (tiếp) DANH SÁCH NỐI ĐƠN pdf

34 1,9K 5

Đ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 đề Danh Sách Nối Đơn Chapter 3 (tiếp)
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Chương
Định dạng
Số trang 34
Dung lượng 825,5 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 Nguyên tắc tạo thành danh sách  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ộ

Trang 1

DANH SÁCH NỐI ĐƠN

CHƯƠNG 3 (tiếp)

Trang 2

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

Nguyên tắc tạo thành danh sách

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

Phần tử cuối cùng của danh sách có

next =NULL

A B C D

E

Giá trị NULL

Danh sách nối đơn

Node đầu tiê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

L

Trang 5

Vu Lan Anh

32 7.8

2038

Ha Anh Lan

23 8.7

1089

Ta Bach Lan

23 8.7

1547

Vu Hoa Lan

23 8.7

3452

L= 2038

Bui Nhu Lan

23 8.7

NULL 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

L=NULL -> ds L rỗng

struct Item {

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

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

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 ; typedef Node * TRO ;

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

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

struct SINHVIEN {

char hoten[30] ; int tuoi;

};

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

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

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

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

Trang 10

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

L

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

Giá trị NULL

Kiểm tra danh sách rỗng

void creat ( TRO &L )

{

L = NULL ; }

int empty ( TRO L )

Trang 11

L Q

Q Q Q Q

2 Nếu Q != NULL 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

Q

Q = NULL

Trang 12

DUYỆT DANH SÁCH

Hàm duyệt danh sách như sau

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

F

B C E

L Q

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

F

B C E

L Q

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 C D E

L

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

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

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;

L

A

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

E

X

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

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 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:

P ->infor = X;

A

H

B C F

L

E C

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

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

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

F

B C E

L

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

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

Trang 21

XÓA NODE ĐẦU DANH SÁCH

Hàm xóa node đầu danh sách

void First_Delete ( TRO &L ) {

Trang 22

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;

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

Trang 23

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

Hàm xóa node sau con trỏ M

void M_Delete ( TRO &L, TRO M) {

Trang 24

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

Q

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;

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

và đưa dữ liệu vào chỗ nhớ đó,

đồng thời P->next=NULL;

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

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 )

{

TRO P, Q; Item X; char tieptuc; //Bước 1

L = NULL ; do{

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

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 C D E

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ể

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

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

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

infor

next prev

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 C D

L2

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ỏ

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

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

struct Item {

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

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

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 ; typedef Node * TRO ;

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

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

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

CÁC PHÉP TOÁN TRÊN 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 C D E

Trang 34

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

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

if (L2== NULL ) //Trường hợp danh sách rỗng

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

HÌNH ẢNH LIÊN QUAN

Hình ảnh danh sách móc nối hai chiều - CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 3 (tiếp) DANH SÁCH NỐI ĐƠN pdf
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