Tải bản đầy đủ (.pdf) (16 trang)

Tài liệu Cấu trúc dữ liệu nâng cao P1 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (615.86 KB, 16 trang )


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


3
Các


Th
u
Bắt
Nế
u





Cài


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



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













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

×