1
GIỚI THIỆU MÔN HỌC
Tóm tắt nội dung:
Bài 1: Danh sách liên kết
Bài 2: Một số phương pháp sắp xếp
Bài 3: Hàm băm
Bài 4: Cây, cây nhị phân, cây nhị phân tìm kiếm, cây cân
bằng
Bài 5: Cây đỏ đen
Bài 6: B-cây, cây 2-3-4
Bài 7: Các đống nhị thức
Bài 8: Các đống Fibonaci
Bài 9: Các tập rời nhau
Bài 10: Các thuật toán so khớp chuỗi
Tài liệu tham khảo:
1) Data Structures, Algorithms, and Object-Oriented
Programming. NXB McGraw Hill; Tác giả Gregory
Heilleman -1996
2) Advanced Data Structures. NXB McGraw Hill - 1990; Tác
giả Thomas H. C., Charles E.L., and Ronald L.R.
3) Giáo trình thuật toán. NXB Thống kế 2002. Nhóm Ngọc
Anh Thư dịch
4) Algorithms and Data Structures in C++; Tác giả Alan Parker
2
Bài 1: Danh sách liên kết
I) Danh sách liên kết đơn
1. Tổ chức danh sách đơn
Danh sách liên kết bao gồm các phần tử. Mỗi phần tử của danh
sách đơn là một cấu trúc chứa 2 thông tin :
- Thành phần dữ liệu: lưu trữ các thông tin về bản thân phần tử .
- Thành phần mối liên kết: lưu trữ địa chỉ của phần tử kế tiếp
trong danh sách, hoặc lưu trữ giá trị NULL nếu là phần tử cuối
danh sách.
Ta có định nghĩa tổng quát
typedef struct tagNode
{
Data Info; // Data là kiểu đã định nghĩa trước
Struct tagNode* pNext;
// con trỏ chỉ đến cấu trúc node
}NODE;
Ví dụ : Ðịnh nghĩa danh sách đơn lưu trữ hồ sơ sinh viên:
typedef struct SinhVien //Data
{ char Ten[30];
int MaSV;
}SV;
typedef struct SinhvienNode
{
}S
V
phầ
n
sử d
Ta
c
NOD
TA
I
NO
D
VD
II.
C
Giả
typ
e
{
}N
O
type
{
SV In
struct S
VNode;
Các p
h
n tử đầu t
dụng con
có khai bá
DE *p
Để quả
IL. Khai b
DE *pT
:
Các thao t
sử có các
edef st
Data In
struct ta
ODE;
edef st
nfo;
SinhvienN
hần tử tro
tiên ta sẽ
trỏ Head
áo:
pHead;
ản lý địa c
báo như s
Tail;
tác cơ bản
c định ng
truct tagN
nfo;
agNode*
truct tagL
Node* pN
ong danh
truy xuất
để lưu trữ
chỉ cuối c
sau:
n trên dan
hĩa:
Node
pNext;
List
3
Next;
h sách sẽ
t được cá
ữ địa chỉ
cùng tron
nh sách đ
được cấ
ác phần tử
đầu tiên
ng danh sá
ơn
ấp phát đ
ử tiếp theo
của danh
ách ta dùn
động. Biế
o. Thường
h sách.
ng con trỏ
ết
g
ỏ
}LI
S
NO
D
đượ
Data
LIS
1.C
h
Có
3
Các
Th
u
Bắt
Nế
u
Cài
Cá
c
NODE
NODE
ST;
DE *n
ợc tạo
a x; //
T lst; // l
ư
hèn một
3 loại tha
ch 1: Chèn
uật toán :
đầu:
u Danh sá
B
B
Ngược
B
B
đặt:
ch 2: Chè
* pHead;
* pTail;
new_ele
lưu thôn
ưu trữ địa
phần tử
ao tác ch
n vào đầu
ách rỗng T
B11 : pHea
B12 : pTai
lại
B21 : new_
B22 : pHea
èn vào cu
//
g tin về
m
a chỉ đầu,
vào da
n
èn new_
u danh sác
Thì
ad = new
il = pHea
_ele ->pN
ad = new
uối danh
4
giữ địa
một phần
địa chỉ
c
nh sách:
_ele vào x
ch
w_ele;
d;
Next = pH
w_ele ;
sách
chỉ của
tử sẽ đư
ợ
cuối của d
xâu:
Head;
một phầ
ợc tạo
danh sách
ần tử mớ
h liên kết
ới
Th
u
Bắt
Nế
u
Ng
ư
Cá
c
Th
u
Bắt
Nế
u
Cài
2.
T
Th
u
uật toán :
đầu :
u Danh sá
B11 : p
B12 : p
ược lại
B21 :
p
B22 : p
ch 3 : Ch
uật toán :
đầu :
u ( q != N
B
B
đặt :
Tìm một p
uật toán :
ách rỗng
pHead = n
pTail = pH
pTail ->pN
pTail = ne
èn vào d
NULL) th
B1 : new_
B2 : q->pN
phần tử t
thì
new_elelm
Head;
Next = n
ew_ele ;
anh sác
h
ì
_ele -> pN
Next = ne
trong dan
5
ment;
ew_ele;
h sau một
Next = q-
ew_ele ;
nh sách đ
t phần tử
->pNext;
đơn
ử q
Bư
ớ
Bư
ớ
Bư
ớ
Cài
3.
H
Hủ
y
Th
u
Bắt
Hủ
y
ớc 1:
p = pH
e
ớc 2:
Trong
k
p:=p-
ớc 3:
Nếu p
!
Ngược
đặt :
Hủy một p
y phần tử
uật toán :
đầu:
Nếu (
p
B1: p
B2:
B
B
B3: N
y một ph
ead; //Ch
khi (p !=
->pNext;/
!= NULL
lại: khôn
phần tử k
ử đầu xâu
pHead !=
= pHea
d
B21 : pHe
B22 : free
Nếu pHead
ần tử đứ
o p trỏ đế
NULL) v
// Cho p tr
L thì p trỏ
ng có phần
khỏi dan
u:
NULL)
d;
ead = pHe
e(p);
d=NULL
ứng sau p
6
ến phần t
và (p->Inf
rỏ tới phầ
tới phần
n tử cần t
nh sách
thì
// p là
ead->pNe
// Hủy
thì pTail
phần tử q
tử đầu dan
fo != k ) t
ần tử kế
tử cần tì
m
tìm.
phần tử
c
ext; // tá
y biến độn
l = NULL
q
nh sách
thực hiện
m
cần hủy
ách p ra k
ng do p tr
L; //Xâu r
n:
khỏi xâu
rỏ đến
rỗng