
Bài giảng Danh sách liên kết
lượt xem 10
download

Bài giảng Danh sách liên kết trình bày về các kiểu tổ chức liên kết giữa các phần tử trong danh sách như danh sách liên kết đơn; danh sách liên kết kép; danh sách liên kết vòng; cách sắp xếp liên kết đơn; stack; queue; ứng dụng stack để khử đệ quy cho bài toán tháp Hà Nội.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Danh sách liên kết
- Danh sách liên kết (List) a. Danh sách kề : Các phần tử của danh sách gọi là các node, được lưu trữ kề liền nhau trong bộ nhớ. Mỗi node có thể là một giá trị kiểu int, float, char, … hoặc có thể là một struct với nhiều vùng tin. Mảng hay chuỗi là dạng của danh sách kề. Địa chỉ của mỗi node trong danh sách được xác định bằng chỉ số (index). Chỉ số của danh sách là một số nguyên và được đánh từ 0 đến một giá trị tối đa nào đó. Danh sách kề là cấu trúc dữ liệu tĩnh, số node tối đa của danh sách kề cố định sau khi cấp phát nên số node cần dùng có khi thừa hay thiếu. Ngoài ra danh sách kề không phù hợp với các thao tác thường xuyên như thêm hay xóa phần tử trên danh sách, 1
- Danh sách liên kết (List) b. Danh sách liên kết : Các phần tử của danh sách gọi là node, nằm rải rác trong bộ nhớ. Mỗi node, ngoài vùng dữ liệu thông thường, còn có vùng liên kết chứa địc chỉ của node kế tiếp hay node trước nó. Danh sách liên kết là cấu trúc dữ liệu động, có thể thêm hay hủy node của danh sách trong khi chay chương trình. Với cách cài đặt các thao tác thêm hay hủy node ta chỉ cần thay đổi lại vùng liên kết cho phù hợp. Tuy nhiên, việc lưu trữ danh sách liên kết tốn bộ nhớ hơn anh sách kề vì mỗi node của danh sách phải chứa thêm vùng liên kết. Ngoài ra việc truy xuất node thứ I trong danh sách liên kết chậm hơn vì phải duyệt từ đầu danh sách. 2
- Danh sách liên kết (List) Có nhiều kiểu tổ chức liên kết giữa các phần tử trong danh sách như : Danh sách liên kết đơn Danh sách liên kết kép Danh sách liên kết vòng … 3
- Danh sách liên kết (List) Danh sách liên kết đơn: mỗi phần tử liên kết với phần tử đứng sau nó trong danh sách: A B X Z Y Danh sách liên kết kép: mỗi phần tử liên kết với các phần tử đứng trước và sau nó trong danh sách: A B C D 4
- Danh sách liên kết (List) Danh sách liên kết vòng : phần tử cuối danh sách liên kết với phần tử đầu danh sách: A B X Z Y A B C D 5
- Sắp xếp trên danh sách liên kết đơn
- Sắp xếp danh sách Cách tiếp cận: Phương án 1: Hoán vị nội dung các phần tử trong danh sách (thao tác trên vùng data). Phương án 2 : Thay đổi các mối liên kết (thao tác trên vùng link) 7
- Sắp xếp danh sách Hoán vị nội dung các phần tử trong danh sách Cài đặt lại trên danh sách liên kết một trong những thuật toán sắp xếp đã biết trên mảng Điểm khác biệt duy nhất là cách thức truy xuất đến các phần tử trên danh sách liên kết thông qua liên kết thay vì chỉ số như trên mảng. Do thực hiện hoán vị nội dung của các phần tử nên đòi hỏi sử dụng thêm vùng nhớ trung gian chỉ thích hợp với các xâu có các phần tử có thành phần data kích thước nhỏ. Khi kích thước của trường data lớn, việc hoán vị giá trị của hai phân tử sẽ chiếm chi phí đáng kể. 8
- Sắp xếp bằng phương pháp đổi chổ trực tiếp ( Interchange Sort ) void SLL_InterChangeSort ( List &l ) { for ( Node* p=l.first ; p!=l.last ; p=p->link ) for ( Node* q=p->link ; q!=NULL ; q=q->link ) if ( p->data > q->data ) Swap( p->data , q->data ); } 9
- Sắp xếp đổi chổ trực tiếp ( Interchange Sort ) l.last q l.first 12 2 8 1 5 p 10
- Sắp xếp đổi chổ trực tiếp ( Interchange Sort ) l.last q l.first 1 12 8 2 5 p 11
- Sắp xếp đổi chổ trực tiếp ( Interchange Sort ) l.last q l.first 1 2 12 8 5 p 12
- Sắp xếp đổi chổ trực tiếp ( Interchange Sort ) l.last q l.first 1 2 5 12 8 p 13
- Sắp xếp đổi chổ trực tiếp Dừng ( Interchange Sort ) l.last q l.first 1 2 5 8 12 p 14
- Sắp xếp bằng phương pháp chọn trực tiếp ( Selection sort ) void ListSelectionSort (LIST &l) { for ( Node* p = l.first ; p != l.last ; p = p->link ) { Node* min = p; for ( Node* q = p->link ; q != NULL ; q = q->link ) if ( min->data > q->data ) min = q ; Swap(min->data, p->data); } } 15
- Sắp xếp bằng phương pháp chọn trực tiếp ( Selection sort ) l.last min l.first 12 2 8 1 5 p 16
- Sắp xếp bằng phương pháp chọn trực tiếp ( Selection sort ) l.last min l.first 1 2 8 12 5 p 17
- Sắp xếp bằng phương pháp chọn trực tiếp ( Selection sort ) l.last min l.first 1 2 8 12 5 p 18
- Sắp xếp bằng phương pháp chọn trực tiếp ( Selection sort ) l.last min l.first 1 2 5 12 8 p 19
- Sắp xếp bằng phương pháp chọn trực tiếp ( Selection sort ) Dừng l.last min l.first 1 2 5 8 12 p 20

CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 6: Danh sách liên kết
149 p |
406 |
67
-
Bài giảng chương 3: Danh sách liên kết
19 p |
117 |
16
-
Tài liệu hướng dẫn thực hành môn Cấu trúc dữ liệu và giải thuật - Bài 2: Danh sách liên kết
5 p |
189 |
12
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Danh sách liên kết đơn (List)
78 p |
127 |
10
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Danh sách liên kết - TS. Ngô Hữu Dũng
50 p |
115 |
7
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 7: Danh sách liên kết
25 p |
40 |
6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Danh sách liên kết - TS. Đào Nam Anh
33 p |
92 |
5
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Danh sách liên kết - Nguyễn Mạnh Hiển (HKI năm 2020-2021)
35 p |
68 |
4
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 15: Danh sách liên kết
70 p |
64 |
4
-
Bài giảng Ngôn ngữ lập trình - Bài 10: Các kiểu dữ liệu trừu tượng (Danh sách liên kết, ngăn xếp, hàng đợi)
47 p |
62 |
4
-
Bài giảng Nhập môn lập trình - Bài 11: Danh sách liên kết
21 p |
66 |
4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Danh sách liên kết - Phan Mạnh Hiển (2020)
33 p |
52 |
3
-
Bài giảng Cơ sở dữ liệu giải thuật: Bài 5 - Danh sách liên kết
28 p |
66 |
3
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Danh sách liên kết (Ngô Công Thắng)
21 p |
61 |
3
-
Bài giảng Kỹ thuật lập trình: Danh sách liên kết - Nguyễn Minh Huy
19 p |
16 |
3
-
Bài giảng Cấu trúc dữ liệu: Danh sách liên kết - TS. Lê Minh Trung & Th.S Lương Trần Ngọc Khiết
32 p |
24 |
2
-
Bài giảng Kỹ thuật lập trình: Danh sách liên kết - ThS. Đặng Bình Phương
20 p |
16 |
0


Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn
