Tải bản đầy đủ (.pptx) (57 trang)

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4.1 - Trần Minh Thái (2016)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (289.22 KB, 57 trang )

Chương 4. Danh sách liên kết
(Phần 1 – 3 tiết)

Trần Minh Thái
Email:
Website: www.minhthai.edu.vn

Cập nhật: ngày 10 tháng 10 năm 2016


Mục tiêu

 Nắm vững khái niệm về kiểu dữ liệu tĩnh và động
 Nắm vững cách tổ chức dữ liệu động bằng danh sách liên kết và minh họa
được các thao tác xử lý trên danh sách liên kết đơn

 Cài đặt minh họa được các thao tác của danh sách đơn bằng ngôn ngữ C#

2


Vấn đề kiểu dữ liệu tĩnh
6

10
10
1

5
2


5

7
3

6

9
7

3
4

15
15
9

3
5

2

1

2

6

7


? Làm sao để chèn thêm số 6 vào vị trí 5 của mảng

3

8

1


Vấn đề kiểu dữ liệu tĩnh

6

?
10
10
1

6

Giả sử cần thêm tiếp 1 phần tử

5
2

5

7
3


9
7

3
4

3
5

15
15
9

2

1

2

6

7

Bổ sung thêm
4

8

1


9


Bài tập

Hãy cài phương thức (bằng ngôn ngữ C#) chèn một phần tử có giá trị x vào vị trí
vt trong mảng số nguyên arr, theo mẫu như sau:
class CMyIntArray{
int []arr;
public void InsertX(int x, int vt){}
}

5


Vấn đề kiểu dữ liệu tĩnh

10
10
1

5
2

5

7

9
7


3

3
4

3
5

15
15
9

2

1

2

6

7

? Làm sao để xóa phần tử 9
6

8

1



Vấn đề kiểu dữ liệu tĩnh

10
10
1

5
2

5

7
3

9
7

3
4

3
5

15
15
9

2


1

2

6

7

7

8

1


Bài tập
Hãy cài đặt hàm (bằng ngơn ngữ C#) xóa phần tử có giá trị x (nếu có) trong
mảng số nguyên arr, theo mẫu sau:
class CMyIntArray{
int []arr;
public void DeleteX(int x){}
}

8


Vấn đề kiểu dữ liệu tĩnh

i


Độ phức tạp của chèn/ xóa
trên mảng 1 chiều là O(n)

9


Vấn đề kiểu dữ liệu tĩnh

 Giải quyết vấn đề phức tạp khi chèn/ xóa?
 Giải quyết vấn đề giới hạn kích thước vùng nhớ tối đa?
 Giải quyết vấn đề vùng nhớ không liên tục?
 Giải quyết vấn đề giải phóng vùng nhớ khi khơng cần dùng đến?

DÙNG CẤU TRÚC DỮ LIỆU ĐỘNG
10


Danh sách liên kết (DSLK)
1

Các phần tử kết dính với nhau
bằng “sợi dây liên kết”

7
2
6

3
10
8

5
9
4

11


1

7
2
6

3
10
8

Để đơn giản hơn trong

5

việc minh họa

9
4

12


Đặc điểm DSLK


Một dãy tuần tự các nút (Node)
Giữa hai nút có con trỏ liên kết
Các nút khơng cần phải lưu trữ liên tiếp nhau trong bộ nhớ
Có thể mở rộng tuỳ ý (chỉ giới hạn bởi dung lượng bộ nhớ)

13


Đặc điểm DSLK

Thao tác Chèn/Xóa khơng cần phải dịch chuyển phần tử mà chỉ cần thay đổi
mối liên kết

Quản lý phần tử đầu tiên bằng con trỏ pHead
Có thể truy xuất đến các phần tử khác thông qua con trỏ liên kết

14


Cấu tạo của DSLK

Node

List
pHead

pTail

15



Cấu tạo của nút

Tạo lập bằng cách cấp phát bộ nhớ động
Mỗi nút có 2 thơng tin:
Dữ liệu (data)
Con trỏ liên kết đến phần tử kế tiếp trong danh sách (Next pointer link)
Nếu khơng trỏ đến phần tử nào thì con trỏ Next = null

16


Thao tác chèn thêm node vào DSLK

“Kết nối” lại sợi dây liên kết theo trình tự

List
pHead

pTail

17


Thao tác xóa node khỏi DSLK

Cần xóa

List

pHead

pTail

18


Các loại hình DSLK

DSLK đơn: Các phần tử kết nối với nhau theo hướng “chiều đi tới”

19


Các loại hình DSLK

DSLK đơi: Các phần tử kết nối với nhau theo hướng “chiều đi tới và và đi lui”

20


Các loại hình DSLK
Danh sách liên kết vịng: Các phần tử kết nối với nhau theo hướng “chiều đi tới”
và phần tử cuối cùng có “đường đi vịng trở lại tới” phần tử đầu danh sách

21


So sánh Mảng và DSLK


Mảng
Kích thước cố định

Các phần tử lưu trữ tuần tự (địa chỉ tăng
dần) trong bộ nhớ

Danh sách liên kết
Số phần tử thay đổi tùy ý

Các phần tử liên kết với nhau bằng con trỏ

Phải dịch chuyển các phần tử khi Chỉ cần thay đổi con trỏ liên kết khi
Thêm/Xóa

Thêm/Xóa

Truy xuất ngẫu nhiên

Truy xuất tuần tự
22


DSLK đơn

pNext

Data

Cấu trúc 1 node


List
pHead

pTail

Data : Dữ liệu của node
pNext : Con trỏ đến node kế tiếp
pHead: Con trỏ đến node đầu
pTail: Con trỏ đến node cuối

23


Cấu tạo của DSLK

Quản lý toàn bộ danh sách liên kết thông qua con trỏ đầu pHead
pHead không phải là 1 nút, nó chỉ là “con trỏ chỉ đến nút”
Ta cũng có thể quản lý danh sách bằng cách sử dụng thêm con trỏ cuối (pTail)
pTail không phải là 1 nút, nó chỉ là “con trỏ chỉ đến nút”

24


Cấu tạo của nút

Tạo lập bằng cách cấp phát bộ nhớ động
Mỗi nút có 2 thơng tin:
Dữ liệu (data)
Con trỏ liên kết đến phần tử kế tiếp trong danh sách (Next pointer link)
Nếu khơng trỏ đến phần tử nào thì con trỏ Next = null


25


×