Professional Documents
Culture Documents
B08 - DanhSachLienKetMoRong - Doi
B08 - DanhSachLienKetMoRong - Doi
A1 A2 An
NULL NULL
struct Nut
{
int data;
struct Nut * prev; trỏ đến nút trước
struct Nut * next; trỏ đến nút sau
};
typedef struct Nut Node;
2. {
4. pHead = NULL;
6. }
NULL NULL
next
data
prev
new_node
Cấu trúc dữ liệu - Khoa CNTT1
CNTT 16
4.3.2 DLL - Bổ sung vào đầu ds
pHead Nút 1 Nút 2 Nút 3
NULL NULL
NULL NULL
NULL
next
data
prev NULL
new_node
Cấu trúc dữ liệu - Khoa CNTT1
CNTT 19
4.3.2 DLL - Bổ sung vào đầu ds
pHead Nút 1 Nút 2 Nút 3
NULL
NULL
prev
data
next
new_node
Cấu trúc dữ liệu - Khoa CNTT1
CNTT 22
4.3.2 DLL - Bổ sung vào cuối ds
Nút 1 Nút 2 pTail Nút 3 NULL
NULL
new_node
Cấu trúc dữ liệu - Khoa CNTT1
CNTT 23
4.3.2 DLL - Bổ sung vào cuối ds
Nút 1 Nút 2 pTail Nút 3 NULL
NULL
new_node
Cấu trúc dữ liệu - Khoa CNTT1
CNTT 24
4.3.2 DLL - Bổ sung vào cuối ds
Nút 1 Nút 2 pTail Nút 3
NULL
Prev
Data
NULL Next
new_node
Cấu trúc dữ liệu - Khoa CNTT1
CNTT 25
4.3.2 DLL - Bổ sung vào cuối ds
Nút 1 Nút 2 pTail Nút 3
NULL
Prev
Data
Next
new_node
Cấu trúc dữ liệu - Khoa CNTT1
CNTT 26
4.3.2 DLL – Bổ sung vào cuối ds
1.void InsertEnd(Node* &pHead, int x)
2. { if (pHead == NULL)
3. addFirst(pHead, x);
4. else
5. { Node *new_node;
6. new_node = creatNode(x);
7. Node *pTail = pHead;
8. while (pTail->next != NULL)
9. pTail = pTail->next;
10. new_node->prev = pTail;
11. pTail->next = new_node;
12. }
13.}
Cấu trúc dữ liệu - Khoa CNTT1 27
4.3.2 DLL - Bổ sung vào sau nút p
InsertAfter: chèn vào sau nút p
new_node new
new_node new
p q
new_node new
p q
new_node new
p q
new_node new
q p
new_node new
q p
new_node new
q p
new_node new
q p
new_node new
q p
pHead
pHead
delete pHead;
pHead = NULL;
NULL NULL
p pHead
NULL NULL
p pHead
NULL NULL
p pHead
NULL NULL
Xoá nút p:
delete p;
p = NULL;
Cấu trúc dữ liệu - Khoa CNTT1 49
4.3.2 DLL - Loại bỏ nút đầu ds
1. void deleteFirst (Node* &pHead)
2. {
3. if (pHead == NULL)
4. return;
5. else if (pHead->prev == pHead->next)
6. {
7. delete pHead;
8. pHead = NULL;
9. }
Cấu trúc dữ liệu - Khoa CNTT1 Cấu trúc dữ liệu - Khoa CNTT 50
4.3.2 DLL - Loại bỏ nút đầu ds
10. else
11. {
12. Node *p; // p tro nut loai bo
13. p = pHead; // p tro nut dau
14. pHead = pHead->next;
15. pHead->prev = NULL;
16. delete p; //giai phong p
17. p = NULL;
18. }
19.}
pHead
pHead
delete pHead;
pHead = NULL;
NULL NULL
NULL NULL
NULL NULL
NULL NULL
Khai báo con trỏ pTail, cho pTail trỏ vào nút trước p:
NULL NULL
Xoá p:
delete p; p = NULL;
Cấu trúc dữ liệu - Khoa CNTT1 57
4.3.2 DLL - Loại bỏ nút cuối
1. void deleteLast (Node* &pHead)
2. { if (pHead == NULL)
3. return;
4. else if (pHead->prev == pHead->next)
5. {
6. delete pHead;
7. pHead = NULL;
8. }
9. else
10. { Node *p;
11. p = pHead;
C. p == NULL
D. p != NULL
- Cài đặt
- Mô tả
- Mô tả
- Cài đặt
DSLK - Cài đặt
- Thao tác
mở
rộng - Thao tác
Circular
Doubly
Doubly
Link List
Link List