Professional Documents
Culture Documents
c5 Danhsachlienket
c5 Danhsachlienket
c5 Danhsachlienket
(LINKED LISTS)
Ni dung
2
Gii thiu
Danh sch lin kt n (Single Linked List)
Danh sch lin kt i (Double Linked List)
Danh sch lin kt vng (Circular Linked List)
Gii thiu
3
Gii thiu
4
Mt s hn ch ca CTDL tnh
Gii thiu
5
chn
n-2
n-1
Gii thiu
6
Insert,
Delete
Gii thiu
7
Thm mt phn t mi
Xa mt phn t
Tm kim
Gii thiu
9
Gii thiu
10
Ni dung
21
Gii thiu
Danh sch lin kt n (Single Linked List)
Danh sch lin kt kp (Doule Linked List)
Danh sch lin kt vng (Circular Linked List)
Khai bo
Cc thao tc c bn trn DSLK n
Sp xp trn DSLK n
DSLK n Khai bo
23
Khai bo node
Data
struct Node
{
DataType data; // DataType l kiu nh ngha trc
Node *pNext; // con tr ch n cu trc Node
};
Chng 6: Danh sch lin kt
DSLK n Khai bo
24
V d 1: Khai bo node lu s
nguyn:
struct Node
{
int data;
Node *pNext;
};
V d 2: nh ngha mt phn
t trong danh sch n lu
tr h s sinh vin:
struct SinhVien {
char Ten[30];
int MaSV;
};
struct SVNode {
SinhVien data;
SVNode *pNext;
};
DSLK n Khai bo
25
T chc, qun l:
Node *pHead;
Node *pTail;
pTail
pHead
A
DSLK n Khai bo
26
struct Node
{
int
data;
Node* pNext;
};
// kiu danh sch lin kt
struct List
{
Node* pHead;
Node* pTail;
};
Chng 6: Danh sch lin kt
DSLK n Khai bo
27
To mt node mi
Gi
hm??
}
Chng 6: Danh sch lin kt
Khai bo
Cc thao tc c bn trn DSLK n
Sp xp trn DSLK n
DSLK n
30
Cc thao tc c bn
DSLK n Cc thao tc c s
31
DSLK n
32
Cc thao tc c bn
DSLK n Cc thao tc c s
33
Gn vo u danh sch
DSLK n Cc thao tc c s
34
Thm mt phn t
new_node
DSLK n Cc thao tc c s
35
Thm mt phn t
pTail
pHead
X
new_node
new_node->pNext = pHead;
pHead = new_node;
DSLK n Cc thao tc c s
36
Thut ton: Gn nt vo u DS
// input: danh sch, phn t mi new_node
// output: danh sch vi new_node u DS
Nu DS rng th
Ngc li
new_node->pNext = pHead;
pHead = new_node;
DSLK n Cc thao tc c s
37
Ci t: Gn nt vo u DS
void addHead(List &l, Node* new_node)
{
if (l.pHead == NULL) // DS rng
{
l.pHead = l.pTail = new_node;
}
else
{
new_node->pNext = l.pHead;
l.pHead = new_node;
}
}
Chng 6: Danh sch lin kt
DSLK n Cc thao tc c s
38
DSLK n Cc thao tc c s
39
DSLK n Cc thao tc c s
40
Gn vo u danh sch
DSLK n Cc thao tc c s
41
Thm mt phn t
X
new_node
10
DSLK n Cc thao tc c s
42
Thm mt phn t
pTail
pHead
pTail->pNext = new_node;
pTail = new_node;
X
new_node
DSLK n Cc thao tc c s
43
Nu DS rng th
Ngc li
pTail->pNext = new_node ;
pTail = new_node;
DSLK n Cc thao tc c s
44
Ci t: Gn nt vo cui DS
void addTail(List &l, Node *new_node)
{
if (l.pHead == NULL)
{
l.pHead = l.pTail = new_node;
}
else
{
l.pTail->pNext = new_node;
l.pTail = new_node ;
}
}
Chng 6: Danh sch lin kt
11
DSLK n Cc thao tc c s
45
DSLK n Cc thao tc c s
46
DSLK n Cc thao tc c s
47
Gn vo u danh sch
12
DSLK n Cc thao tc c s
48
Thm mt phn t
new_node
DSLK n Cc thao tc c s
49
Thm mt phn t
pTail
pHead
A
X
new_node
Chng 6: Danh sch lin kt
DSLK n Cc thao tc c s
50
13
DSLK n Cc thao tc c s
51
DSLK n Cc thao tc c s
52
Gn nt mi vo sau nt q (???)
Ngc li th bo li
DSLK n
53
Cc thao tc c bn
14
DSLK n Cc thao tc c s
54
DSLK n Cc thao tc c s
55
B2.1 : X l phn t p
B2.2 : p=p->pNext;
// Cho p tr ti phn t k
DSLK n Cc thao tc c s
56
15
DSLK n
59
Cc thao tc c bn
DSLK n Cc thao tc c s
60
Gi hm???
DSLK n
61
Cc thao tc c bn
16
DSLK n Cc thao tc c s
62
Xa node c kho k
DSLK n Cc thao tc c s
63
DSLK n Cc thao tc c s
64
l.pHead = p->pNext;
delete p;
Chng 6: Danh sch lin kt
17
DSLK n Cc thao tc c s
65
DSLK n Cc thao tc c s
66
Xa node c kho k
DSLK n Cc thao tc c s
67
C cc thao tc:
Gi p l node sau q
18
DSLK n Cc thao tc c s
68
last
first
A
q->pNext = p->pNext;
delete p;
DSLK n Cc thao tc c s
69
DSLK n Cc thao tc c s
70
Xa node c kho k
19
DSLK n Cc thao tc c s
71
Bc 1:
Bc 2:
// tm thy k
Ngc li
Bo khng c k
DSLK n Cc thao tc c s
72
{
Node *p = l.pHead;
Tm phn t p c kha k v
phn t q ng trc n
Node *q = NULL;
while (p != NULL)
{
if (p->data == k) break;
q = p;
p = p->pNext;
}
if (p == NULL) { cout<<Khng tm thy k; return 0;}
else if (q == NULL)
// thc hin xa phn t u ds l p
else
// thc hin xa phn t p sau q
phn t
c kho
k
}
Chng 6: Danh sch lin kt
DSLK n
73
Cc thao tc c bn
20
DSLK n Cc thao tc c s
74
B1.1:
p = pHead;
B1.2:
Hy p;
Bc 2:
pTail = NULL;
DSLK n Cc thao tc c s
75
Gi hm???
DSLK n Cc thao tc c s
76
Gi hm???
21
DSLK n Cc thao tc c s
77
Exercise
78
Khai bo
Cc thao tc c bn trn DSLK n
Sp xp trn DSLK n
22
Ni dung
114
Gii thiu
Danh sch lin kt n (Single Linked List)
Danh sch lin kt i (Double Linked List)
Danh sch lin kt vng (Circular Linked List)
struct DNode
{
DataType data;
DNode*
pPre;
DNode*
pNext;
};
struct DList
{
DNode* pHead;
DNode* pTail;
};
// tr n phn t ng trc
// tr n phn t ng sau
// tr n phn t u ds
// tr n phn t cui ds
23
DSLK i To nt mi
117
Hm to nt:
DNode* getNode ( DataType x)
Gi hm??
{
DNode *p;
p = new DNode; // Cp pht vng nh cho phn t
if (p==NULL) {
cout<<Khong du bo nho; return NULL;
}
p->data = x;
// Gn thng tin cho phn t p
p->pPrev = p->pNext = NULL;
return p;
}
Chng 6: Danh sch lin kt
DSLK i Thm 1 nt vo ds
118
DSLK i Thm vo u ds
119
pHead
pTail
(3)
A
(2)
X
new_node
(1)
new_node->pNext = l.pHead;
l.pHead->pPrev = new_node;
l.pHead = new_node;
// (1)
// (2)
// (3)
24
DSLK i Thm vo u ds
120
(2)
(1)
X
new_node
Chng 6: Danh sch lin kt
pHead
pTail
(3)
A
D
(2)
l.pTail->pNext = new_node;
new_node->pPrev = l.pTail;
l.pTail = new_node;
// (1)
// (2)
// (3)
(1)
X
new_node
Gi hm??
// (1)
// (2)
// (3)
pHead
A
D
(1)
(2)
(3)
X
new_node
25
pHead
pTail
q
p
B
(2)
(4)
(3)
(1)
X
new_node
pTail
pHead
A
(3)
(2)
(4)
X
(1)
new_node
26
DSLK i Hy phn t
131
Hy phn t u ds
Hy phn t cui ds
Hy 1 phn t c kha k
DSLK i Hy u ds
132
27
DSLK i Hy cui ds
133
28
DSLK i Nhn xt
138
29
DSLK i Nhn xt
139
Ni dung
140
Gii thiu
Danh sch lin kt n (Single Linked List)
Danh sch lin kt i (Double Linked List)
Danh sch lin kt vng (Circular Linked List)
30
DSLK vng
142
Head
A
Tail
Head
A
return p;
}
31
void
{
}
Chng 6: Danh sch lin kt
32
DSLK vng Hy nt u ds
148
33