SlideShare a Scribd company logo
1 of 45
TP. HỒ CHÍ MINH, NĂM 2021
Giảng viên: ThS. Phan Tiến Dũng
Email: tdphan1901@gmail.com
Phone: 0906.609.942
Nội dung chính
1. Khái niệm
2. Cấu trúc danh sách
3. Phương pháp cài đặt danh sách
4. Hiện thực danh sách kề
5. Hiện thực danh sách liên kết đơn
6. Các loại danh sách liên kết khác
1. KHÁI NIỆM
- Danh sách (List) là một trong những cấu trúc cơ bản
nhất được cài đặt trong hầu hết các chương trình ứng
dụng. Danh sách là một kiểu dữ liệu trừu tượng gồm
nhiều Node (nút) cùng kiểu dữ liệu, các nút trong danh
sách có thứ tự.
- Có 2 cách cài đặt danh sách:
 Cài đặt theo kiểu kế tiếp => Danh sách kề
 Cài đặt theo kiểu liên kết => Danh sách liên kết
Ví dụ: Xe lửa được liên kết theo một thứ tự cụ thể để có
thể được tải, dỡ, chuyển, thả và nhặt theo cách hiệu
quả nhất có thể.
2. CẤU TRÚC DANH SÁCH
- Tác vụ Init: Khởi tạo danh sách
- Tác vụ IsEmpty: Kiểm tra danh sách rỗng
- Tác vụ IsFull: Kiểm tra danh sách có bị đầy không
- Tác vụ ListSize: Kiểm tra số nút có trong danh sách
- Tác vụ Retrieve: Truy xuất nút tại vị trí pos
- Tác vụ Insert: Thêm nút vào vị trí pos
Mô tả các tác vụ
2. CẤU TRÚC DANH SÁCH
- Tác vụ Remove: Xóa nút tại vị trí pos
- Tác vụ Replace: Thay thế nút tại vị trí pos
- Tác vụ ShowList: Duyệt danh sách
- Tác vụ Sort: Sắp xếp danh sách theo một khóa sắp xếp
- Tác vụ Search: Tìm kiếm nút trong danh sách theo một
khóa
- Tác vụ ClearList: Xóa danh sách
Mô tả các tác vụ
3. Phương pháp cài đặt danh sách
Cài đặt theo kiểu kế
tiếp
- Các nút trong danh sách được bố trí kế cận nhau trong bộ
nhớ  mảng, chuỗi ký tự, Stack, Queue.
- Ví dụ: Danh sách kề dùng mảng 1 chiều
7
6 Nút 6
5 Nút 5
4 Nút 4
3 Nút 3
2 Nút 2
1 Nút 1
0 Nút 0
3. Phương pháp cài đặt danh sách
Cài đặt theo kiểu kế
tiếp
• Mảng 1 chiều
– Kích thước cố định (fixed size)
– Các phần tử tuần tự theo chỉ số 0  n-1
– Truy cập ngẫu nhiên (random access)
– Chèn 1 phần tử vào mảng rất khó
0 1 2 3 4 n-2 n-1
chèn
…
3. Phương pháp cài đặt danh sách
Cài đặt theo kiểu liên
kết
 Danh sách liên kết đơn
typedef struct node
{
DataType Info;
struct Node *pNext;
} Node;
typedef struct List
{
Node *pHead;
Node *pTail;
} LIST;
A B C D E
pHead
pTail
3. Phương pháp cài đặt danh sách
 Danh sách liên kết đơn
A B C D E
pHead
pTail
• Cấp phát động lúc chạy chương trình
• Các phần tử nằm rải rác ở nhiều nơi trong bộ nhớ
• Kích thước danh sách chỉ bị giới hạn do RAM
• Thao tác thêm xoá đơn giản
Insert,
Delete
3. Phương pháp cài đặt danh sách
So sánh MẢNG và DANH SÁCH LIÊN KẾT
 Cấu trúc:
- Mảng được xây dựng dựa trên chỉ mục, ở đó mỗi phần tử
trong mảng được gắn với một chỉ mục (index) cố định.
Trước khi truy xuất 1 phần tử cần biết được index của nó.
- Các phần tử của danh sách liên kết được liên kết theo thứ
tự, chúng liên kết với phần tử đứng trước và đứng sau nó,
khi muốn truy xuất một phần tử trong danh sách liên kết ta
cần truy xuất các phần tử liền kề nó trước.
3. Phương pháp cài đặt danh sách
So sánh MẢNG và DANH SÁCH LIÊN KẾT
 Kích thước:
- Mảng yêu cầu một kích thước cố định trong quá trình khai
báo, khi số lượng phần tử vượt quá kích thước đó mảng
cần được resize.
- Danh sách liên kết thì linh hoạt trong việc thay đổi kích
thước và việc này diễn ra ngay trong quá trình chương
trình thực thi.
3. Phương pháp cài đặt danh sách
So sánh MẢNG và DANH SÁCH LIÊN KẾT
 Bộ nhớ:
- Danh sách liên kết yêu cầu lượng bộ nhớ nhiều hơn so với
mảng do thêm một lượng bộ nhớ cho việc tạo liên kết/tham
chiếu đến phần tử liền kề.
- Mảng yêu cầu bộ nhớ trong quá trình biên dịch còn danh
sách liên kết yêu cầu bộ nhớ trong quá trình chạy chương
trình.
- Các phần tử của mảng được lưu trữ tại các vị trí kề nhau
trong vùng nhớ Stack. Trong khi đó các phần tử trong DSLK
lưu trữ tại các vị trí ngẫu nhiên trong vùng nhớ Heap.
3. Phương pháp cài đặt danh sách
So sánh MẢNG và DANH SÁCH LIÊN KẾT
 Thời gian truy xuất phần tử:
- Đối với mảng, truy xuất trực tiếp phần tử, ví dụ khi truy xuất
phần tử thứ 4 của một mảng trong ngôn ngữ C  array[3].
- Với danh sách liên kết phải truy xuất tuần tự và phải bắt đầu
truy xuất từ nút đầu tiên.
3. Phương pháp cài đặt danh sách
So sánh MẢNG và DANH SÁCH LIÊN KẾT
 Thao tác thêm/xóa phần tử:
- Việc thêm hay xóa phần tử trong mảng phức tạp hơn so với
danh sách liên kết, khi thêm một phần tử vào mảng cần dịch
chuyển các phần tử sau nó để tạo vị trí trống. Ví dụ thêm số
4 vào vị trí thứ 5 trong mảng {0,1,2,3,5,6,7, null}, cần dịch
5,6,7 ra sau 1 chỉ số để tạo khoảng trống cho số 4
 {0,1,2,3,4,5,6,7, null}.
- Với danh sách liên kết muốn thêm hay xóa một phần tử chỉ
cần thay đổi liên kết của phần tử đứng trước và đứng sau vị
trí muốn thêm hay xóa.
3. Phương pháp cài đặt danh sách
So sánh MẢNG và DANH SÁCH LIÊN KẾT
 Ưu điểm của danh sách liên kết so với mảng: kích thước linh
hoạt, dễ thêm và xóa phần tử, không yêu cầu cấp phát trước
bộ nhớ.
 Ưu điểm của mảng so với danh sách liên kết: truy xuất ngẫu
nhiên, bộ nhớ yêu cầu thấp, dễ thực thi và sử dụng.
4. Hiện thực danh sách kề
Khai báo cấu trúc danh sách
4. Hiện thực danh sách kề
Các tác vụ trên danh sách kề
4. Hiện thực danh sách kề
Các tác vụ trên danh sách kề
4. Hiện thực danh sách kề
Các tác vụ trên danh sách kề
4. Hiện thực danh sách kề
Các tác vụ trên danh sách kề
4. Hiện thực danh sách kề
Các tác vụ trên danh sách kề
4. Hiện thực danh sách kề
5
18
chèn?
30 24 15 28 12
0 1 2 3 4
5
30 24 15 28
0 1 2 3 4
12
18
4. Hiện thực danh sách kề
Các tác vụ trên danh sách kề
4. Hiện thực danh sách kề
5
18
xóa?
30 24 15 28 12
0 1 2 3 4
5
30 24 15 28
0 1 2 3 4
12
12
4. Hiện thực danh sách kề
Các tác vụ trên danh sách kề
Sinh viên nghiên cứu các tác vụ:
 Thay thế (Replace)
 Duyệt danh sách (ShowList)
 Tìm kiếm (Search)
 Sắp xếp (Sort)
5. Hiện thực Danh sách liên kết
đơn
Giới thiệu
• DSLK đơn là một danh sách các node, mỗi node
gồm 2 thành phần:
– Phần chứa dữ liệu - Info
– Phần chỉ vị trí (địa chỉ) của phần tử tiếp theo trong
danh sách – Next
Info Next
Node
A B C D E
pHead
NULL
pTail
5. Hiện thực Danh sách liên kết
đơn
Khai báo cấu trúc
Info Next
Node
5. Hiện thực Danh sách liên kết
đơn
Khai báo cấu trúc
Info Next
Node
5. Hiện thực Danh sách liên kết
đơn
Các tác vụ trên danh sách liên
kết
?
?
pHead
pTail
NULL?
pHead
pTail
NULL
NULL
5. Hiện thực Danh sách liên kết
đơn
Các tác vụ trên danh sách liên
kết
?
?
X
VC
&
BB
Danh sách liên kết đơn
Chèn một nút vào đầu danh sách
 Danh sách rỗng
 Danh sách không rỗng
X
A B C D E
pHead
pTail
X
pHead
pTail
5. Hiện thực Danh sách liên kết
đơn
Chèn một nút vào đầu danh sách
VC
&
BB
Danh sách liên kết đơn
Thêm một nút vào cuối danh sách
 Danh sách rỗng
 Danh sách không rỗng
X
A B C D E
pHead
pTail
X
pHead
pTail
5. Hiện thực Danh sách liên kết
đơn
Các tác vụ trên danh sách liên
kết
VC
&
BB
Danh sách liên kết đơn
Thêm một nút p vào sau nút q
 q == NULL  chèn vào đầu danh sách
 q != NULL
X
A B C D E
pHead
q
pTail
p
5. Hiện thực Danh sách liên kết
đơn
=>Thao tác thêm node p trước node
q???
VC
&
BB
Danh sách liên kết đơn
Xóa một nút đầu danh sách
 Danh sách rỗng  không làm gì cả
 Danh sách không rỗng (nếu sau khi xóa mà
pHead = NULL thì pTail = NULL)
A B C D E
pHead
pTail
p = pHead
5. Hiện thực Danh sách liên kết
đơn
VC
&
BB
Danh sách liên kết đơn
Xóa một nút sau nút p
 p == NULL || p->pNext == NULL
 p ->pNext != NULL
A B C D E
pHead
pTail
q = p->pNext
p
5. Hiện thực Danh sách liên kết
đơn
5. Hiện thực Danh sách liên kết
đơn
Xóa Node sau nhiều Node p
VC
&
BB
Danh sách liên kết đơn
Hủy một nút cuối danh sách
 Nút cuối p (p = pTail)
 Tìm nút q trước nút p (nếu có)
 Hủy nút sau nút q
Hủy một nút có khóa k (Info = k)
 Tìm nút p có khóa k và hủy nút q trước đó.
 Hủy nút sau nút q (nếu có)
Hủy toàn bộ danh sách
Duyệt danh sách để in/tìm/đếm các nút
VC
&
BB
Danh sách liên kết đơn vòng (Circular Linked List)
typedef struct CNode
{
Data Info;
struct CNode *pNext;
} CNODE;
typedef struct CList
{
NODE *pHead;
NODE *pTail;
} CLIST;
Các loại danh sách liên kết
pHead pTail
A B C D E
VC
&
BB
Danh sách liên kết kép (Doubly Linked List)
typedef struct DNode
{
Data Info;
struct DNode *pNext, *pPrev;
} DNODE;
typedef struct DList
{
NODE *pHead;
NODE *pTail;
} DLIST;
Các loại danh sách liên kết khác
B
pHead pTail
A C D
BÀI TẬP THỰC HÀNH
Câu hỏi ôn tập trong giáo trình trang
31-32

More Related Content

Similar to Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp các dữ liệu

Cấu trúc dữ liệu cơ bản 2
Cấu trúc dữ liệu cơ bản 2Cấu trúc dữ liệu cơ bản 2
Cấu trúc dữ liệu cơ bản 2Hồ Lợi
 
Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepNguyễn Ngọc Hà
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Hồ Lợi
 
02 stack queue
02 stack queue02 stack queue
02 stack queuelanheo04
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Hồ Lợi
 
ctdl&gt 04-list_don
ctdl&gt 04-list_donctdl&gt 04-list_don
ctdl&gt 04-list_donkikihoho
 
Chuong 4-Thiet ke du lieu.pdf
Chuong 4-Thiet ke du lieu.pdfChuong 4-Thiet ke du lieu.pdf
Chuong 4-Thiet ke du lieu.pdfEcCrm
 
Chuong 5 toi_uu_hoa_van_tin
Chuong 5 toi_uu_hoa_van_tinChuong 5 toi_uu_hoa_van_tin
Chuong 5 toi_uu_hoa_van_tinMasterCode.vn
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTMasterCode.vn
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02kikihoho
 
TỰ HỌC EXCEL CĂN BẢN 2013
TỰ HỌC EXCEL CĂN BẢN 2013TỰ HỌC EXCEL CĂN BẢN 2013
TỰ HỌC EXCEL CĂN BẢN 2013Phan Minh Tân
 
Ctdl C08
Ctdl C08Ctdl C08
Ctdl C08giang
 
CTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfCTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfLmTrn286060
 
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615clbinternet.info
 
Cau trucdulieu
Cau trucdulieuCau trucdulieu
Cau trucdulieuanhtuan196
 

Similar to Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp các dữ liệu (20)

Cấu trúc dữ liệu cơ bản 2
Cấu trúc dữ liệu cơ bản 2Cấu trúc dữ liệu cơ bản 2
Cấu trúc dữ liệu cơ bản 2
 
Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xep
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
 
02 stack queue
02 stack queue02 stack queue
02 stack queue
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
Thuc hanh access
Thuc hanh accessThuc hanh access
Thuc hanh access
 
ctdl&gt 04-list_don
ctdl&gt 04-list_donctdl&gt 04-list_don
ctdl&gt 04-list_don
 
Chuong 4-Thiet ke du lieu.pdf
Chuong 4-Thiet ke du lieu.pdfChuong 4-Thiet ke du lieu.pdf
Chuong 4-Thiet ke du lieu.pdf
 
Lin Q .NET
Lin Q .NETLin Q .NET
Lin Q .NET
 
Chuong 5 toi_uu_hoa_van_tin
Chuong 5 toi_uu_hoa_van_tinChuong 5 toi_uu_hoa_van_tin
Chuong 5 toi_uu_hoa_van_tin
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02
 
TỰ HỌC EXCEL CĂN BẢN 2013
TỰ HỌC EXCEL CĂN BẢN 2013TỰ HỌC EXCEL CĂN BẢN 2013
TỰ HỌC EXCEL CĂN BẢN 2013
 
Ctdl C08
Ctdl C08Ctdl C08
Ctdl C08
 
CTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfCTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdf
 
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
 
02. baigiangquery
02. baigiangquery02. baigiangquery
02. baigiangquery
 
Cau trucdulieu
Cau trucdulieuCau trucdulieu
Cau trucdulieu
 
NhomX.docx
NhomX.docxNhomX.docx
NhomX.docx
 
Chg2 danh sach
Chg2 danh sachChg2 danh sach
Chg2 danh sach
 

Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp các dữ liệu

  • 1. TP. HỒ CHÍ MINH, NĂM 2021 Giảng viên: ThS. Phan Tiến Dũng Email: tdphan1901@gmail.com Phone: 0906.609.942
  • 2. Nội dung chính 1. Khái niệm 2. Cấu trúc danh sách 3. Phương pháp cài đặt danh sách 4. Hiện thực danh sách kề 5. Hiện thực danh sách liên kết đơn 6. Các loại danh sách liên kết khác
  • 3. 1. KHÁI NIỆM - Danh sách (List) là một trong những cấu trúc cơ bản nhất được cài đặt trong hầu hết các chương trình ứng dụng. Danh sách là một kiểu dữ liệu trừu tượng gồm nhiều Node (nút) cùng kiểu dữ liệu, các nút trong danh sách có thứ tự. - Có 2 cách cài đặt danh sách:  Cài đặt theo kiểu kế tiếp => Danh sách kề  Cài đặt theo kiểu liên kết => Danh sách liên kết Ví dụ: Xe lửa được liên kết theo một thứ tự cụ thể để có thể được tải, dỡ, chuyển, thả và nhặt theo cách hiệu quả nhất có thể.
  • 4. 2. CẤU TRÚC DANH SÁCH - Tác vụ Init: Khởi tạo danh sách - Tác vụ IsEmpty: Kiểm tra danh sách rỗng - Tác vụ IsFull: Kiểm tra danh sách có bị đầy không - Tác vụ ListSize: Kiểm tra số nút có trong danh sách - Tác vụ Retrieve: Truy xuất nút tại vị trí pos - Tác vụ Insert: Thêm nút vào vị trí pos Mô tả các tác vụ
  • 5. 2. CẤU TRÚC DANH SÁCH - Tác vụ Remove: Xóa nút tại vị trí pos - Tác vụ Replace: Thay thế nút tại vị trí pos - Tác vụ ShowList: Duyệt danh sách - Tác vụ Sort: Sắp xếp danh sách theo một khóa sắp xếp - Tác vụ Search: Tìm kiếm nút trong danh sách theo một khóa - Tác vụ ClearList: Xóa danh sách Mô tả các tác vụ
  • 6. 3. Phương pháp cài đặt danh sách Cài đặt theo kiểu kế tiếp - Các nút trong danh sách được bố trí kế cận nhau trong bộ nhớ  mảng, chuỗi ký tự, Stack, Queue. - Ví dụ: Danh sách kề dùng mảng 1 chiều 7 6 Nút 6 5 Nút 5 4 Nút 4 3 Nút 3 2 Nút 2 1 Nút 1 0 Nút 0
  • 7. 3. Phương pháp cài đặt danh sách Cài đặt theo kiểu kế tiếp • Mảng 1 chiều – Kích thước cố định (fixed size) – Các phần tử tuần tự theo chỉ số 0  n-1 – Truy cập ngẫu nhiên (random access) – Chèn 1 phần tử vào mảng rất khó 0 1 2 3 4 n-2 n-1 chèn …
  • 8. 3. Phương pháp cài đặt danh sách Cài đặt theo kiểu liên kết  Danh sách liên kết đơn typedef struct node { DataType Info; struct Node *pNext; } Node; typedef struct List { Node *pHead; Node *pTail; } LIST; A B C D E pHead pTail
  • 9. 3. Phương pháp cài đặt danh sách  Danh sách liên kết đơn A B C D E pHead pTail • Cấp phát động lúc chạy chương trình • Các phần tử nằm rải rác ở nhiều nơi trong bộ nhớ • Kích thước danh sách chỉ bị giới hạn do RAM • Thao tác thêm xoá đơn giản Insert, Delete
  • 10. 3. Phương pháp cài đặt danh sách So sánh MẢNG và DANH SÁCH LIÊN KẾT  Cấu trúc: - Mảng được xây dựng dựa trên chỉ mục, ở đó mỗi phần tử trong mảng được gắn với một chỉ mục (index) cố định. Trước khi truy xuất 1 phần tử cần biết được index của nó. - Các phần tử của danh sách liên kết được liên kết theo thứ tự, chúng liên kết với phần tử đứng trước và đứng sau nó, khi muốn truy xuất một phần tử trong danh sách liên kết ta cần truy xuất các phần tử liền kề nó trước.
  • 11. 3. Phương pháp cài đặt danh sách So sánh MẢNG và DANH SÁCH LIÊN KẾT  Kích thước: - Mảng yêu cầu một kích thước cố định trong quá trình khai báo, khi số lượng phần tử vượt quá kích thước đó mảng cần được resize. - Danh sách liên kết thì linh hoạt trong việc thay đổi kích thước và việc này diễn ra ngay trong quá trình chương trình thực thi.
  • 12. 3. Phương pháp cài đặt danh sách So sánh MẢNG và DANH SÁCH LIÊN KẾT  Bộ nhớ: - Danh sách liên kết yêu cầu lượng bộ nhớ nhiều hơn so với mảng do thêm một lượng bộ nhớ cho việc tạo liên kết/tham chiếu đến phần tử liền kề. - Mảng yêu cầu bộ nhớ trong quá trình biên dịch còn danh sách liên kết yêu cầu bộ nhớ trong quá trình chạy chương trình. - Các phần tử của mảng được lưu trữ tại các vị trí kề nhau trong vùng nhớ Stack. Trong khi đó các phần tử trong DSLK lưu trữ tại các vị trí ngẫu nhiên trong vùng nhớ Heap.
  • 13. 3. Phương pháp cài đặt danh sách So sánh MẢNG và DANH SÁCH LIÊN KẾT  Thời gian truy xuất phần tử: - Đối với mảng, truy xuất trực tiếp phần tử, ví dụ khi truy xuất phần tử thứ 4 của một mảng trong ngôn ngữ C  array[3]. - Với danh sách liên kết phải truy xuất tuần tự và phải bắt đầu truy xuất từ nút đầu tiên.
  • 14. 3. Phương pháp cài đặt danh sách So sánh MẢNG và DANH SÁCH LIÊN KẾT  Thao tác thêm/xóa phần tử: - Việc thêm hay xóa phần tử trong mảng phức tạp hơn so với danh sách liên kết, khi thêm một phần tử vào mảng cần dịch chuyển các phần tử sau nó để tạo vị trí trống. Ví dụ thêm số 4 vào vị trí thứ 5 trong mảng {0,1,2,3,5,6,7, null}, cần dịch 5,6,7 ra sau 1 chỉ số để tạo khoảng trống cho số 4  {0,1,2,3,4,5,6,7, null}. - Với danh sách liên kết muốn thêm hay xóa một phần tử chỉ cần thay đổi liên kết của phần tử đứng trước và đứng sau vị trí muốn thêm hay xóa.
  • 15. 3. Phương pháp cài đặt danh sách So sánh MẢNG và DANH SÁCH LIÊN KẾT  Ưu điểm của danh sách liên kết so với mảng: kích thước linh hoạt, dễ thêm và xóa phần tử, không yêu cầu cấp phát trước bộ nhớ.  Ưu điểm của mảng so với danh sách liên kết: truy xuất ngẫu nhiên, bộ nhớ yêu cầu thấp, dễ thực thi và sử dụng.
  • 16. 4. Hiện thực danh sách kề Khai báo cấu trúc danh sách
  • 17. 4. Hiện thực danh sách kề Các tác vụ trên danh sách kề
  • 18. 4. Hiện thực danh sách kề Các tác vụ trên danh sách kề
  • 19. 4. Hiện thực danh sách kề Các tác vụ trên danh sách kề
  • 20. 4. Hiện thực danh sách kề Các tác vụ trên danh sách kề
  • 21. 4. Hiện thực danh sách kề Các tác vụ trên danh sách kề
  • 22. 4. Hiện thực danh sách kề 5 18 chèn? 30 24 15 28 12 0 1 2 3 4 5 30 24 15 28 0 1 2 3 4 12 18
  • 23. 4. Hiện thực danh sách kề Các tác vụ trên danh sách kề
  • 24. 4. Hiện thực danh sách kề 5 18 xóa? 30 24 15 28 12 0 1 2 3 4 5 30 24 15 28 0 1 2 3 4 12 12
  • 25. 4. Hiện thực danh sách kề Các tác vụ trên danh sách kề Sinh viên nghiên cứu các tác vụ:  Thay thế (Replace)  Duyệt danh sách (ShowList)  Tìm kiếm (Search)  Sắp xếp (Sort)
  • 26. 5. Hiện thực Danh sách liên kết đơn Giới thiệu • DSLK đơn là một danh sách các node, mỗi node gồm 2 thành phần: – Phần chứa dữ liệu - Info – Phần chỉ vị trí (địa chỉ) của phần tử tiếp theo trong danh sách – Next Info Next Node A B C D E pHead NULL pTail
  • 27. 5. Hiện thực Danh sách liên kết đơn Khai báo cấu trúc Info Next Node
  • 28. 5. Hiện thực Danh sách liên kết đơn Khai báo cấu trúc Info Next Node
  • 29. 5. Hiện thực Danh sách liên kết đơn Các tác vụ trên danh sách liên kết ? ? pHead pTail NULL? pHead pTail NULL NULL
  • 30. 5. Hiện thực Danh sách liên kết đơn Các tác vụ trên danh sách liên kết ? ? X
  • 31. VC & BB Danh sách liên kết đơn Chèn một nút vào đầu danh sách  Danh sách rỗng  Danh sách không rỗng X A B C D E pHead pTail X pHead pTail
  • 32. 5. Hiện thực Danh sách liên kết đơn Chèn một nút vào đầu danh sách
  • 33. VC & BB Danh sách liên kết đơn Thêm một nút vào cuối danh sách  Danh sách rỗng  Danh sách không rỗng X A B C D E pHead pTail X pHead pTail
  • 34. 5. Hiện thực Danh sách liên kết đơn Các tác vụ trên danh sách liên kết
  • 35. VC & BB Danh sách liên kết đơn Thêm một nút p vào sau nút q  q == NULL  chèn vào đầu danh sách  q != NULL X A B C D E pHead q pTail p
  • 36. 5. Hiện thực Danh sách liên kết đơn =>Thao tác thêm node p trước node q???
  • 37. VC & BB Danh sách liên kết đơn Xóa một nút đầu danh sách  Danh sách rỗng  không làm gì cả  Danh sách không rỗng (nếu sau khi xóa mà pHead = NULL thì pTail = NULL) A B C D E pHead pTail p = pHead
  • 38. 5. Hiện thực Danh sách liên kết đơn
  • 39. VC & BB Danh sách liên kết đơn Xóa một nút sau nút p  p == NULL || p->pNext == NULL  p ->pNext != NULL A B C D E pHead pTail q = p->pNext p
  • 40. 5. Hiện thực Danh sách liên kết đơn
  • 41. 5. Hiện thực Danh sách liên kết đơn Xóa Node sau nhiều Node p
  • 42. VC & BB Danh sách liên kết đơn Hủy một nút cuối danh sách  Nút cuối p (p = pTail)  Tìm nút q trước nút p (nếu có)  Hủy nút sau nút q Hủy một nút có khóa k (Info = k)  Tìm nút p có khóa k và hủy nút q trước đó.  Hủy nút sau nút q (nếu có) Hủy toàn bộ danh sách Duyệt danh sách để in/tìm/đếm các nút
  • 43. VC & BB Danh sách liên kết đơn vòng (Circular Linked List) typedef struct CNode { Data Info; struct CNode *pNext; } CNODE; typedef struct CList { NODE *pHead; NODE *pTail; } CLIST; Các loại danh sách liên kết pHead pTail A B C D E
  • 44. VC & BB Danh sách liên kết kép (Doubly Linked List) typedef struct DNode { Data Info; struct DNode *pNext, *pPrev; } DNODE; typedef struct DList { NODE *pHead; NODE *pTail; } DLIST; Các loại danh sách liên kết khác B pHead pTail A C D
  • 45. BÀI TẬP THỰC HÀNH Câu hỏi ôn tập trong giáo trình trang 31-32