Lecture 12 – Linked Lists
12.1. Khái niệm về danh sách
12.2. Các phép toán trên danh sách
12.3. Cài đặt danh sách sử dụng mảng
12.4. Danh sách liên kết đơn
12.5. Danh sách liên kết dạng vòng
12.6. Danh sách liên kết kép
12.7. Ứng dụng của danh sách liên kết
12.8. Bài tập thực hành
Lecture 12 – Linked Lists
12.1. Khái niệm về danh sách
12.2. Các phép toán trên danh sách
12.3. Cài đặt danh sách sử dụng mảng
12.4. Danh sách liên kết đơn
12.5. Danh sách liên kết dạng vòng
12.6. Danh sách liên kết kép
12.7. Ứng dụng của danh sách liên kết
12.8. Bài tập thực hành
!
"#$%&#"'(!)#*+!,
+-#*"#$!()./!0#1
12.1. Khái niệm về danh sách(list)
Ngăn xếp
ậ
Hàng đợi
ậ
Danh sách (list)
ậ
12.1. Khái niệm về danh sách(list)
Cài đặt:
$2#$#345#6
7
8
111
%	:1
;.<:#+5!=empty list>1
;.?:!#
7
0@A=<rst>%B# !=last>1
/#A2#$#3/C##D.1
Lecture 12 – Linked Lists
12.1. Khái niệm về danh sách
12.2. Các phép toán trên danh sách
12.3. Cài đặt danh sách sử dụng mảng
12.4. Danh sách liên kết đơn
12.5. Danh sách liên kết dạng vòng
12.6. Danh sách liên kết kép
12.7. Ứng dụng của danh sách liên kết
12.8. Bài tập thực hành
12.2. Các phép toán trên danh sách
Các phép toán cơ bản trên danh sách:
#E+F#=##@%E>6A%%G+H+AI
EEEJ+F#=##@>6)K%G+H+4&+AI
"EL/F#=#>6+5!M"N#I
12.2. Các phép toán trên danh sách
Các hàm bổ trợ:
#L/F#=#>6"#$++5!I
E+F#=#%E>60G%G#!%E0@A+!#I
+#F#=#>6#+I
+F#=#>6O).I
Chú ý: /%"#$#0M$)P/!!%Q"1
Lecture 12 – Linked Lists
12.1. Khái niệm về danh sách
12.2. Các phép toán trên danh sách
12.3. Cài đặt danh sách sử dụng mảng
12.4. Danh sách liên kết đơn
12.5. Danh sách liên kết dạng vòng
12.6. Danh sách liên kết kép
12.7. Ứng dụng của danh sách liên kết
12.8. Bài tập thực hành
Khai báo (trên ngôn ngữ C) danh sách sử dụng mảng:
RESETUVWXYL7:: ZZ[#2"H\B#0]^!I
/EE_#LEE/EI ZZ[#2"#$#* !I
/EE_+`
LEE/ELEEaTUVWXYLbIZZ^!'!0$c'dI
#I ZZ2#.0$c'dBI
eW#!EF#I
111
W#!EF##I
12.3. Cài đặt danh sách sử dụng mảng
Một số thao tác cần cài đặt khi làm việc với danh sách:
%##E+F#=W#!EF#f###@LEE/E%E>I
%#EEEJ+F#=W#!EF#f###@>I
%#"EL/F#=W#!EF#f#>I
##L/F#=W#!EF#f#>I
##JF#=W#!EF#f#>I
12.3. Cài đặt danh sách sử dụng mảng
Khởi tạo danh sách: "EL/F#=W#!EF#f#>6
g#.0.!#+G!#"'!a:TUVWXYLh7bI
Kiểm tra danh sách rỗng: #L/F#=W#!EF#f#>6
g#.0.!#+G!#"'!a:TUVWXYLh7bI
Kiểm tra danh sách đầy:#JF#=W#!EF#f#>6
12.3. Cài đặt danh sách sử dụng mảng
Khởi tạo danh sách: "EL/F#=W#!EF#f#>6
g#.0.!#+G!#"'!a:TUVWXYLh7bI
Kiểm tra danh sách rỗng: #L/F#=W#!EF#f#>6
g#.0.!#+G!#"'!a:TUVWXYLh7bI
Kiểm tra danh sách đầy:#JF#=W#!EF#f#>6
<TUVWXYLh7I
12.3. Cài đặt danh sách sử dụng mảng
Thêm một phần tử vào đầu ds:
#E+F#=f#7%>I
71 [#$+'!0//"!I
81 iG/$%DB#'!0#7&I
j1 k!#+GA%&0@A'!I
l1 (!2#.0.I
12.3. Cài đặt danh sách sử dụng mảng
Thêm một phần tử vào cuối ds:
#E+F#=f#m7%>I
71 [#$+'!0//"!I
81 (!2#.0.I
j1 k!#+G&#%&I
12.3. Cài đặt danh sách sử dụng mảng
Thêm một phần tử vào vị trí p trên ds:
#E+F#=f#%>I
71 [#$+'!0//"!I
81 [#$+n*%G+H04&#%I
j1 iG/$+!"'!ah7b%DHB#'!7&I
l1 (!2#.0.I
o1 k!#+G&#%&I
12.3. Cài đặt danh sách sử dụng mảng
Xóa phần tử ở đầu danh sách:
EEEJ+F#=f#7>I
71 [#$+'!+5!/"!I
81 F/!#+G0@AI
j1 iG/$p#%D0'!I
l1 k#'2#.0.I
12.3. Cài đặt danh sách sử dụng mảng
Xóa phần tử ở cuối danh sách:
EEEJ+F#=f#m7>I
71 [#$+'!+5!/"!I
81 F/!#+GB#I
j1 k#'2#.0.I
12.3. Cài đặt danh sách sử dụng mảng
Xóa phần tử ở vị trí cho trước:
EEEJ+F#=f#>I
71 [#$+'!+5!/"!I
81 [#$+n*%G+H)I
j1 iG/$+!"'!ab%D0'!7&I
l1 k#'2#.0.I
12.3. Cài đặt danh sách sử dụng mảng
12.3. Cài đặt danh sách sử dụng mảng
Đánh giá về phương pháp cài đặt: i^!'!044+q/#A@.
+!2&A^!'!0$c'dB440#$6
Ưu điểm:
T0^!2&B#4/*0B#I
r#*+/)0.!%3!!csB'!I
Nhược điểm:
r#*A2&""(B#HG/$'!I
t#"#q!H2&%"!^!0.I
12.3. Cài đặt danh sách sử dụng mảng
Giải pháp: #0M2u!+vliên kết động6
t$"O^40#$+A$^!#A".0!4+-#*/.I
#A".0! !0."#"H4&42#.#w#0#$2#AG
4,!+"!="!$>)0G"H4&+4&I
$0G!x2y-0#A".0%�q+4&0I
;4%/5#]2!C!@4+%#A".%&#"I
[#0$N+!Mz##w#0#$/4,!+1
Lecture 12 – Linked Lists
12.1. Khái niệm về danh sách
12.2. Các phép toán trên danh sách
12.3. Cài đặt danh sách sử dụng mảng
12.4. Danh sách liên kết đơn
12.5. Danh sách liên kết dạng vòng
12.6. Danh sách liên kết kép
12.7. Ứng dụng của danh sách liên kết
12.8. Bài tập thực hành
12.4. Danh sách liên kết đơn
Danh sách liên kết đơn +-#*2!C-5#-2!C6
i#*4+I
F#A".0.-@.E1
Link
Data
Node
!"#
60
7:::
800 45
{::
90 55
|:
0
NULL
Khái niệm: i#A".0,+-
#*2!C-5#-2
!C6
i#*4+I
F#A".+v0.-@.E1
[#2+!}6
/EE_#i/EIZZ"#$#* !+!
/EE_+;E`
i/E IZZ i ! 0$ y #* "#$
i/E
;EfE)I ZZ}+v&#&;E".
@.
eI
12.4. Danh sách liên kết đơn
$%
&' ( !)*"ị ủ
+)! , ! /01! ỏ ử
/")
t$c'd#A".0,!4w!
6
<rst+vs0.0@A
#A".1
~B#=last>#A".%&#
;•FF1
[#2+!}6
/EE_#i/EIZZ"#$#* !+!
/EE_+;E`
i/E IZZ i ! 0$ y #* "#$
i/E
;EfE)I ZZ}+v&#&;E".
@.
eI
12.4. Danh sách liên kết đơn
$%
12.4. Danh sách liên kết đơn
Các thao tác cơ bản khi làm việc với danh sách động:
[N#I
#E+UJ#+=f#%>6AE%0I
#E+U~=f#%>6}€E%I
#E+UF=f#%>6AE%B#I
EEEUJ#+=f#>6VEK0I
EEEUF=f#>6VENB#I
EEEU~=f#>6VE+!1
#L/F#=f#>6[#$++5!I
"L/F#=f#>6F+5!I
E+F#=f#%>6!#+G+!1