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

Chapter 3.3 Doublelist Cấu Trúc Dữ Liệu Và Giải Thuật

48 133 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 48
Dung lượng 490,23 KB

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 Và Giải Thuật Chapter 3.3 Doublelist Tài Liệu Bao Gồm 6 Chapter Mong các bạn theo dõi đầy đủ để đạt kết quả cao . Để Cập Nhật Thêm Tìm Hiểu Hơn Nữa Về Tài Liệu IT Thì Các Bạn Có Thể Truy Cập : https:123doc.orgtrangcanhan4336953tailieuit.htm CẢM ƠN CÁC BẠN ĐÃ THEO DÕI

Trang 1

Danh sách liên kết đôi

1

Trang 2

2

 Khái niệm DSLK đôi

 Biểu diễn, quản lý DSLK đôi

 Các thao tác trên DSLK đôi

 Sao chép DSLK đôi

 Sắp xếp trên DSLK đôi

Mục tiêu

Trang 3

1 Khái niệm

 Mỗi phần tử có 2 mối liên kết với các phần

tử khác trong danh sách

Trang 4

2 Biểu diễn, quản lý DSLK đôi

Trang 5

5

 Tạo danh sách rỗng

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

 Tìm kiếm một giá trị trên danh sách

 Trích một phần tử ra khỏi danh sách

 Duyệt danh sách

 Hủy toàn bộ danh sách

3 Các thao tác trên DSLK đôi

Trang 6

3.1 Khởi tạo danh sách

6

Thuật toán:

• Đầu vào: Danh sách cần khởi tạo

• Đầu ra: Danh sách sau khi khởi tạo

B1: Gán con trỏ pHead = NULL

B2: Gán con trỏ pTail = NULL

BKT: Kết thúc ;

Cài đặt thuật toán:

void KhoiTao(DList &l) {

l.pHead = NULL;

l.pTail = NULL;

}

Trang 7

3.2 Tạo mới một nút

Thuật toán:

• Đầu vào: Phần tử dữ liệu x

• Đầu ra: Nút p chứa dữ liệu x

B1: p = new DNode ;//cấp phát bộ nhớ cho con trỏ p B2: IF(p == NULL); // cấp phát không thành công

Trang 8

Cài đặt thuật toán:

Trang 9

3.3 Thêm 1 nút vào danh sách

9

 Thêm vào đầu danh sách

 Thêm vào cuối danh sách

 Thêm vào sau một nút q bất kỳ

Trang 10

10

Thêm vào đầu danh sách

3.3 Thêm 1 phần tử vào danh sách

Trang 11

Thuật toán thêm phần tử vào đầu danh sách:

• Đầu vào: Danh sách l; nút cần thêm p

• Đầu ra: Danh sách sau khi đã thêm nút p

B3: Nếu danh sách rỗng thì:

3.1: Đặt pHead = pTail = p;

3.2: Thực hiện BKT;

B4: Nếu danh sách không rỗng thì:

4.1: Điều chỉnh liên kết p ->Next = pHead

Trang 12

Cài đặt thuật toán:

Void ThemDau (DList &l, DNode *p) {

Trang 13

Bài tập 1: Trên ngôn ngữ C, viết chương trình thực hiện các yêu cầu sau:

1) Tạo một cấu trúc danh sách liên kết đôi, với

các thao tác:

 Khởi tạo danh sách

 Tạo mới 1 nút trong danh sách

 Chèn một nút vào đầu danh sách

2) Sử dụng cấu trúc danh sách liên kết đôi vừa

tạo để lưu n số nguyên bất kỳ được nhập từ bàn phím:

13

Bài tập ứng dụng

Trang 14

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

14

3.3 Thêm 1 phần tử vào danh sách

Trang 15

Thuật toán thêm phần tử vào cuối danh sách:

• Đầu vào: Danh sách l; nút cần thêm p

• Đầu ra: Danh sách sau khi đã thêm nút p vào cuối

B3: Nếu danh sách rỗng thì:

3.1: Đặt pHead = pTail = p;

3.2: Thực hiện BKT;

B4: Nếu danh sách không rỗng thì:

4.1: Điều chỉnh liên kết l.pTail ->Next = p

Trang 16

Cài thuật toán:

void ChenCuoi (DList &l, DNode*p){

Trang 17

Bài tập 2: Mở rộng chương trình vừa viết bằng cách:

1) Bổ sung thêm thao tác chèn phần tử vào cuối

danh sách :

2) Tạo danh sách n số nguyên sử dụng thao tác

chèn phần tử vào cuối danh sách

17

Bài tập ứng dụng

Trang 18

Thêm phần tử vào giữa danh sách (sau nút q)

18

3.3 Thêm 1 phần tử vào danh sách

Trang 19

Thuật toán thêm phần tử vào sau phần tử q:

• Đầu vào: Danh sách l; nút q, nút cần thêm p

• Đầu ra: Danh sách sau khi đã thêm nút p sau nút q

B3: Nếu q là nút cuối trong danh sách thì:

3.1: Thực hiện thao tác ChenCuoi();

3.2: Thực hiện BKT;

B4: Nếu danh sách không rỗng thì:

4.1: Điều chỉnh liên kết l.pTail ->Next = p

Trang 20

void ChenSau (DList &l, DNode *q, DNode *p) {

3.3 Thêm 1 phần tử vào danh sách

Cài đặt thuật toán:

Trang 21

Bài tập 3: Mở rộng chương trình vừa viết:

Cho phép người dùng nhập:

+ Tạo nút p chứa giá trị x

+ Chèn nút p vào sau nút q

21

Bài tập ứng dụng

Trang 22

Thuật toán:

Đầu vào: Danh sách cần duyệt l

Đầu ra: Tùy thuộc vào yêu cầu của bài toán

B1 Cho con trỏ p trỏ đến phần tử đầu danh sách;

B2: Bước lặp (thực hiện cho đến khi danh sách rỗng):

2.1: Xử lý phần tử p;

2.2: Cho p trỏ đến phần tử kế tiếp;

BKT: Kết thúc;

22

3.4 Duyệt danh sách

Trang 23

Cài đặt thuật toán:

void DuyetDS (DList l)

Trang 24

Bài tập 4: Mở rộng chương trình vừa viết:

+ Danh sách tạo bằng thao tác chèn đầu

+ Danh sách tạo bằng thao tác chèn cuối

24

Bài tập ứng dụng

Trang 25

3.5 Tìm kiếm phần tử

25

Thuật toán

• Đầu vào: Danh sách l, khóa tìm kiếm x

• Đầu ra: Con trỏ tới nút chứa khóa cần tìm

B1: p=pHead // p trỏ đến đầu danh sách

B2: Trong khi (p!= NULL) và (p->data != x)

Thực hiện p = p->next; // p trỏ tới phần tử kế BKT:

Nếu p!=NULL thi p trỏ tới phần tử cần tìm;

Ngược lại: không có phần tử cần tìm;

Trang 27

Bài tập 5: Mở rộng chương trình vừa viết:

danh sách

xem có tồn tại nút trong danh sách chứa giá trị x Thông báo kết quả ra màn hình

27

Bài tập ứng dụng

Trang 28

3.6 Xóa phần tử trong danh sách

28

Nguyên tắc: Phải cô lập phần tử cần hủy

trước hủy

Các vị trị cần Xóa:

 Xóa phần tử đứng đầu danh sách

 Xóa phần tử có khoá bằng x

 Xóa phần tử đứng sau q trong danh sách

Trang 29

3.6 Xóa phần tử trong danh sách

29

Thuật toán xóa phần tử ở đầu danh sách

• Đầu vào: Danh sách l

• Đầu ra: Danh sách sau khi đã xóa nút đầu

B1: p = l.pHead

B2: + l.pHead = l.pHead->Next;

+ l.pHead->Prev = NULL;

B3: if (l.pHead==NULL) //danh sách rỗng

Đặt lại l.pTail = NULL;

B4: delete p;

BKT: Kết thúc;

Trang 31

Bài tập 6: Mở rộng chương trình vừa viết:

sách

 Tạo danh sách n số nguyên

 Hiển thị danh sách đã tạo ra màn hình

 Xóa phần tử đầu danh sách và hiển thị danh sách sau khi đã xóa ra màn hình

31

Bài tập ứng dụng

Trang 32

3.6 Xóa phần tử trong danh sách

32

Thuật toán xóa phần tử ở cuối danh sách

• Đầu vào: Danh sách l

• Đầu ra: Danh sách sau khi đã xóa nút cuối

B1: p = l.pTail

B2: + l.pTail = l.pTail->Prev;

+ l.pTail->Next = NULL;

B3: if (l.pTail==NULL) //danh sách rỗng

Đặt lại l.pHead = NULL;

B4: delete p;

BKT: Kết thúc;

Trang 34

Bài tập 7: Mở rộng chương trình vừa viết:

sách

 Tạo danh sách n số nguyên

 Hiển thị danh sách đã tạo ra màn hình

 Xóa phần tử cuối danh sách và hiển thị danh sách sau khi đã xóa ra màn hình

34

Bài tập ứng dụng

Trang 35

3.6 Xóa phần tử trong danh sách

35

Thuật toán xóa phần tử có khóa k

• Đầu vào: Danh sách l, khóa k

• Đầu ra: Danh sách sau khi đã phần tử có khóa k

B1: p = TimKiem(l,k);

B2: if p!=NULL then

2.1 if p->Prev == NULL then xóa nút ở đầu ds;

2.2 else if p->Next ==NULL then xóa nút cuối ds; 2.3 else

+ p->Prev->Next = p->Next;

+ p->Next->Prev = p->Prev;

2.4 free (p)

BKT: Kết thúc;

Trang 36

void XoaPhanTu(DList &l, int x){

Trang 37

Bài tập 8: Mở rộng chương trình vừa viết:

kỳ

 Tạo danh sách n số nguyên

 Hiển thị danh sách đã tạo ra màn hình

 Nhập vào 1 giá trị x cần xóa bất kỳ, tìm kiếm xem có tồn tại nút chứa giá trị x trong danh sách Nếu tìm thấy xóa x khỏi danh sách

37

Bài tập ứng dụng

Trang 38

 Thực hiện nhiều lần thao tác hủy một nút

B1: if (l.pHead == NULL) Thực hiện BKT;

Trang 40

Bài tập 10: Mở rộng chương trình vừa viết:

 Tạo danh sách n số nguyên

 Kiểm tra các thao tác thêm 1 phần tử vào sau nút q bất kỳ

 Xóa 1 phần tử có khóa k

 Hủy danh sách sau trước khi kết thúc chương trình

40

Bài tập ứng dụng

Trang 41

3.9 Sao chép danh sách

41

Thuật toán xóa phần tử có khóa k

• Đầu vào: Danh sách l1

• Đầu ra: Danh sách l2 được sao chép từ l1

Trang 42

4.3 Danh sách liên kết đôi (tt)

Trang 43

Bài tập 11: Mở rộng chương trình vừa viết:

Trang 44

Sắp xếp trên DSLK đôi

44

Trang 46

Đánh giá ưu, nhược điểm

46

Trang 47

4 Đánh giá, ưu, nhược

4.1 Ưu nhược điểm của danh sách liên

kết

 Nhược điểm

 Mật độ sử dụng bộ nhớ của danh sách liên

kết không tối ưu tuyệt đối (<100%)

 Việc truy xuất và tìm kiếm các phần tử trong

danh sách liên kết mất nhiều thời gian vì

phải duyệt tuần tự qua các phần tử trong danh sách

 Bộ nhớ cần nhiều vì phải lưu thêm phần tử

liên kết, nếu vùng dữ liệu là lớn thì tỷ lệ mức sử dụng bộ nhớ là cao

47

Trang 48

 Việc thêm, xóa phần tử trong danh sách liên

kết là dễ dàng, chỉ cần thay đổi mối liên kết của các phần tử với nhau

48

Ngày đăng: 11/04/2019, 17:37

TỪ KHÓA LIÊN QUAN

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

w