Professional Documents
Culture Documents
Nội dung
Sinh viên sẽ được trình bày, hiểu và vận dụng vào lập
Bài 5: Danh sách liên kết trình một số kỹ thuật sau để xử lý trên DSLK đơn:
– Phần 2 1. Chèn thêm một node
2
Cập nhật: ngày 20 tháng 10 năm 2020
1 2
Chèn node vào DSLK đơn Chèn node vào sau node p
list list
first last 3
first last 4
3 4
1
01/09/2021
?
Chèn node vào sau node p Cài đặt phương thức thêm pNew vào sau p
public void InsertAfterP(Node<T> p, Node<T> newNode)
▪ Input: DSLK list, node p và node cần thêm pNew {
▪ Output: list sau khi thêm pNew vào sau p if (p == last)
▪ Algorithm: InsertLast(newNode);
else
Nếu p là last của list thì
{
Thêm pNew vào cuối list: Kết thúc Node<T> pSau = p.Next;
Ngược lại: newNode.Next = pSau;
pSau = p.pNext p.Next = newNode;
}
Nối pNew vào pSau
}
Nối p vào pNew
5 6
5 6
list
7
first last 8
7 8
2
01/09/2021
9 10
9 10
11 12
3
01/09/2021
list
first last 13 14
13 14
▪ TH1: Xóa node đầu của danh sách → Ảnh hưởng first
Viết phương thức chèn node có giá trị x vào
trước node có giá trị nhỏ nhất trong danh sách ▪ TH2: Xóa node cuối của danh sách → Ảnh hưởng last
liên kết đơn số nguyên
▪ TH còn lại: Xoá node bên trong danh sách
15 16
15 16
4
01/09/2021
17 18
list 30 25 41 78
first last
}
19 20
19 20
5
01/09/2021
?
Xoá node cuối trong danh sách Cài đặt phương thức xoá node cuối DSLK
▪ Algorithm: RemoveLast
▪ Input: DSLK list public bool RemoveLast()
▪ Output: list sau khi xoá node cuối (trả về true) {
▪ Algorithm:
▪ B1: Nếu list rỗng thì trả về false: Kết thúc
▪ B2: Nếu first = last thì RemoveFirst()
Ngược lại
pTruoc = node trước last của list
pTruoc.Next=null
last = null
last = pTruoc }
▪ B3: Trả về true 21 22
21 22
23 24
6
01/09/2021
Xoá 1 node pDel bất kỳ của DSLK – ? Cài đặt phương thức xoá 1 node pDel bất kỳ
Cách 1 trong DSLK theo cách 1
▪ Algorithm: DeleteNode1 public bool DeleteNode1(Node<T> pDel)
▪ Input: DSLK list, node pDel {
▪ Output: list sau khi xoá node pDel (trả về true)
▪ Algorithm:
▪ B1: Nếu list rỗng thì trả về false
▪ B2: Nếu pDel là first thì trả về RemoveFirst()
▪ B3: Nếu pDel là last thì trả về RemoveLast()
▪ B4: Ngược lại tìm node pTruoc là node trước pDel
pTruoc nối với node sau của pDel
pDel = null }
Trả về true 25 26
25 26
Xóa một nút trong danh sách Xóa một nút trong danh sách
▪ Xóa nút giữa của danh sách – Cách 2 ▪ Xóa nút giữa của danh sách – Cách 2
Cần Cần
xóa xóa
pDel pSau pDel pSau
list 30 25 41 96 78 list 30 25 96 41 78
first last first last
27 28
27 28
7
01/09/2021
Xóa một nút trong danh sách Xóa một nút trong danh sách
▪ Xóa nút giữa của danh sách – Cách 2 ▪ Xóa nút giữa của danh sách – Cách 2
Cần Cần
xóa xóa
pDel pSau pDel pSau
list 30 25 96 41 78 list 30 25 96 41 78
first last first last
29 30
29 30
31 32
8
01/09/2021
Bài tập
Sắp xếp
Cho DSLK đơn số nguyên, định nghĩa các phương ▪ Algorithm: Sort
thức theo yêu cầu sau: ▪ Input: DSLK list
▪ Output: list có giá trị tăng dần
1. Xóa node có giá trị x xuất hiện đầu tiên trong danh ▪ Algorithm:
sách (nếu có xóa: trả về true; ngược lại trả về false) ▪ B1: p = First
▪ B2: Tìm node pMin có giá trị nhỏ nhất từ p đến
2. Sắp DSLK theo thứ tự tăng dần (dùng phương cuối danh sách
▪ B3: Hoán vị giá trị p và pMin
pháp chọn trực tiếp) ▪ B4: p=p.Next
▪ B5: Nếu p=last thì kết thúc
Ngược lại quay lại B2
33 34
33 34
?
Cài đặt hàm sắp xếp tăng DSLK số nguyên Cài đặt hàm SX theo pp Đổi chỗ TT
public void HoanVi(IntNode a, IntNode b)
{ public void InterchangeSort()
} {
public IntNode TimMin(IntNode p)//Tìm min từ p đến cuối
{
}
}
public void Sort()
{
35 36
35 36
9
01/09/2021
Bài tập
Sử dụng lại lớp DSLK đơn (MyLinkedList), bổ sung các
phương thức:
1. Khi nhập dữ liệu vào danh sách sẽ tìm tự động vị trí thích
hợp để chèn vào nhằm đảm bảo có thứ thự tăng dần dựa
vào khóa so sánh bất kỳ
2. Bổ sung các phương thức xoá node
3. Phương thức sắp xếp theo thứ tự tăng dần dựa vào khoá so
sánh bất kỳ
37
37 38
10