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

Giáo trình hướng dẫn phân tích hàm Input new data để tách một list thành nhiều danh sách p3 ppt

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 (140.75 KB, 5 trang )

Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 113
a. Khởi tạo danh sách (Initialize):
Trong thao tác này chỉ đơn giản là chúng ta cho giá trò các con trỏ quản lý đòa chỉ
hai nút đầu và cuối danh sách liên kết đôi về con trỏ NULL. Hàm khởi tạo danh sách
liên kết đôi như sau:
DLLP_Type DLL_Initialize(DLLP_Type &DList)
{ DList.DLL_First = NULL;
DList.DLL_Last = NULL;
return (DList);
}
Hình ảnh minh họa:
DList
NULL DLL_First DLL_Last NULL
b. Tạo mới một phần tử / nút:
Giả sử chúng ta cần tạo mới một phần tử có thành phần dữ liệu là NewData.
- Thuật toán:
B1: DNode = new DLL_OneNode
B2: IF (DNode = NULL)
Thực hiện Bkt
B3: DNode->NextNode = NULL
B4: DNode->PreNode = NULL
B5: DNode->Key = NewData
Bkt: Kết thúc
- Cài đặt thuật toán:
Hàm DLL_Create_Node có prototype: DLL_Type DLL_Create_Node(T NewData);
Hàm tạo mới một nút có thành phần dữ liệu là NewData, hàm trả về con trỏ trỏ
tới đòa chỉ của nút mới tạo. Nếu không đủ bộ nhớ để tạo, hàm trả về con trỏ
NULL.
DLL_Type DLL_Create_Node(T NewData)
{ DLL_Type Pnode = new DLL_OneNode;


if (Pnode != NULL)
{ Pnode->NextNode = NULL;
Pnode->PreNode = NULL;
Pnode->Key = NewData;
}
return (Pnode);
}
- Minh họa thuật toán:
Giả sử chúng ta cần tạo nút có thành phần dữ liệu là 20: NewData = 20
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w

w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V

i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 114
Pnode = new DLL_OneNode
Pnode



Pnode->NextNode = NULL
Pnode->PreNode = NULL
Pnode->Key = NewData
Pnode NULL
20
NULL
c. Thêm một phần tử vào trong danh sách:
Giả sử chúng ta cần thêm một phần tử có giá trò thành phần dữ liệu là NewData vào
trong danh sách. Việc thêm có thể diễn ra ở đầu, cuối hay ở giữa danh sách liên kết.
Do vậy, ở đây chúng ta trình bày 3 thao tác thêm riêng biệt nhau:
- Thuật toán thêm phần tử vào đầu danh sách liên kết đôi:
B1: NewNode = DLL_Create_Node (NewData)
B2: IF (NewNode = NULL)
Thực hiện Bkt
B3: IF (DLL_List.DLL_First = NULL) // Danh sách rỗng
B3.1: DLL_List.DLL_First = NewNode
B3.2: DLL_List.DLL_Last = NewNode
B3.3: Thực hiện Bkt
B4: NewNode->NextNode = DLL_List.DLL_First // Nối DLL_First vào
B5: DLL_List.DLL_First->PreNode = NewNode // sau NewNode
// Chuyển vai trò đứng đầu của NewNode cho DLL_First
B6: DLL_List.DLL_First = NewNode
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần thêm nút có thành phần dữ liệu là 27: NewData = 27
NewNode NULL
27
NULL
DLL_List
DLL_First DLL_Last

NULL
16 20 18 40 30
NULL

NewNode->NextNode = DLL_List.DLL_First:
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o

c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e

r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 115
NewNode
27
NULL
DLL_List
DLL_First DLL_Last
NULL
16 20 18 40 30
NULL


DLL_List.DLL_First->PreNode = NewNode:
NewNode
27
NULL
DLL_List
DLL_First DLL_Last
NULL
16 20 18 40 30
DLL_List.DLL_First = NewNode:
NewNode
27
NULL
DLL_List
DLL_First DLL_Last
NULL
16 20 18 40 30


Kết quả sau khi chèn:
DLL_List
DLL_First DLL_Last
NULL
27 16 20 18 40 30
NULL

- Thuật toán thêm phần tử vào cuối danh sách liên kết đôi:
B1: NewNode = DLL_Create_Node (NewData)
B2: IF (NewNode = NULL)
Thực hiện Bkt

B3: IF (DLL_List.DLL_First = NULL) // Danh sách rỗng
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t

r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w

.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 116
B3.1: DLL_List.DLL_First = NewNode
B3.2: DLL_List.DLL_Last = NewNode
B3.3: Thực hiện Bkt
B4: DLL_List.DLL_Last->NextNode = NewNode // Nối NewNode vào
B5: NewNode->PreNode = DLL_List.DLL_Last // sau DLL_Last
// Chuyển vai trò đứng cuối của NewNode cho DLL_Last
B6: DLL_List.DLL_Last = NewNode
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần thêm nút có thành phần dữ liệu là 25: NewData = 25
NewNode NULL
25

NULL
DLL_List
DLL_First DLL_Last
NULL
16 20 18 40 30
NULL
DLL_List.DLL_Last->NextNode = NewNode:
NewNode NULL
25
NULL
DLL_List
DLL_First DLL_Last

16 20 18 40 30
NULL
NewNode->PreNode = DLL_List.DLL_Last
NewNode NULL
25

DLL_List
DLL_First DLL_Last

16 20 18 40 30
NULL
Click to buy NOW!
P
D
F
-
X

C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o

m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t

r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 117
DLL_List.DLL_Last = NewNode:
NewNode NULL
25

DLL_List
DLL_First DLL_Last

16 20 18 40 30
NULL
Kết quả sau khi chèn:
DLL_List
DLL_First DLL_Last
NULL
16 20 18 40 30 25
NULL
- Thuật toán thêm phần tử vào giữa danh sách liên kết đôi:
Giả sử chúng ta cần thêm một phần tử có giá trò thành phần dữ liệu là NewData
vào trong danh sách DLL_List vào ngay sau nút có đòa chỉ InsNode. Trong thực tế
nhiều khi chúng ta phải thực hiện thao tác tìm kiếm để xác đònh đòa chỉ InsNode, ở

đây giả sử chúng ta đã xác đònh được đòa chỉ này.
B1: IF (InsNode->NextNode = NULL) // Thêm vào cuối DSLK
B1.1: DLL_Add_Last (DLL_List, NewData)
B1.2: Thực hiện Bkt
B2: NewNode = DLL_Create_Node (NewData)
B3: IF (NewNode = NULL)
Thực hiện Bkt
// Nối các nút kế sau InsNode vào sau NewNode
B4: NewNode->NextNode = InsNode->NextNode
B5: InsNode->NextNode->PreNode = NewNode
// Chuyển mối liên kết giữa InsNode với nút kế của nó về NewNode
B6: InsNode->NextNode = NewNode
B7: NewNode->PreNode = InsNode
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần thêm nút có thành phần dữ liệu là 25 vào sau nút có đòa chỉ
InsNode như sau: NewData = 25
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e


V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X

C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o

m
.

×