1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng cấu trúc dữ liệu và giải thuật (data structures and algorithms) chương 3 gv ngô công thắng

27 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 1,32 MB

Nội dung

22/04/22 CHƯƠNG DANH SÁCH LIÊN KẾT Giới thiệu danh sách liên kết Danh sách liên kết đơn Danh sách liên kết vòng Danh sách liên kết kép Cài đặt ngăn xếp hàng đợi cấu trúc lưu trữ phân tán Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.1 1 Giới thiệu danh sách liên kết  Danh sách liên kết danh sách tuyến tính sử dụng cấu trúc lưu trữ phân tán Trong danh sách liên kết, nút nhớ có liên kết ta có DSLK đơn, nút có liên kết ta có DSLK kép Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.2 22/04/22 Danh sách liên kết đơn 2.1 Quy tắc tổ chức danh sách liên kết đơn  Trong DSLK đơn, nút nhớ có cấu trúc gồm hai trường, trường infor chứa phần tử liệu trường link chứa địa nút đứng sau infor Ngô Công Thắng link Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.3 2.1 Quy tắc tổ chức danh sách liên kết đơn (tiếp) Nút cuối danh sách khơng có nút đứng sau nên trường link rỗng, không chứa địa chỉ, ta ký hiệu   Dùng trỏ F chứa địa nút phép truy nhập vào tất nút danh sách  Khi danh sách rỗng F =   F A1 Ngơ Công Thắng A2 A3 Bài giảng Cấu trúc liệu giải thuật - Chương 03 A4  3.4 22/04/22 2.1 Quy tắc tổ chức danh sách liên kết đơn (tiếp)  Để tổ chức lưu trữ danh sách liên kết phải có:     Phải có phương tiện chia nhớ thành nút nút truy nhập vào trường Phải có chế để xác định nút sử dụng chưa sử dụng (nút trống) Phải có chế cung cấp nút trống có yêu cầu sử dụng thu hồi lại nút không cần dùng Ta ký hiệu:   P  AVAIL phép lấy nút trống có địa P (cấp phát nút) P  AVAIL phép thu hồi nút có địa P Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.5 2.2 Một số phép toán danh sách liên kết đơn Ký hiệu: Một nút có địa p (được trỏ p) Infor(p) Link(p) tương ứng trường Infor Link nút a) Bổ sung nút vào danh sách Cho danh sách liên kết đơn F, M trỏ trỏ tới nút danh sách Viết thủ tục bổ sung phần tử liệu x vào sau nút M  Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.6 22/04/22 PP chung bổ sung vào cấu trúc lưu trữ phân tán cấu trúc liệu B1: Tạo nút nhớ mới, đưa phần tử liệu vào nút nhớ cho trường địa rỗng  B2: Nối nút nhớ vào cấu trúc cho đảm bảo liên kết cấu trúc => Thay đổi liên kết theo quy tắc thay đổi liên kết  Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.7 Quy tắc thay đổi liên kết cấu trúc lưu trữ phân tán Luôn phải xét trường hợp cấu trúc rỗng  Xem trường hợp làm thay đổi biến cấu trúc phải xét xử lý riêng, cịn lại xử lý chung Ghi nhớ: Khi làm cấu trúc lưu trữ phân tán ln phải vẽ hình, thực thao tác hình, đánh số thể thứ tự thực sau chuyển thành lệnh giả mã  Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.8 22/04/22 Bổ sung vào sau nút M DSLKD F F x x x  x (2) (1) M x (1) link(N) := link(M); (2) link(M) := N; Ngô Công Thắng N Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.9 2.2 Một số phép toán danh sách liên kết đơn (tiếp) a) Bổ sung nút vào danh sách: - Vào: F, M, x - Ra: Khơng có {Thủ tục bổ sung phần tử liệu x vào sau nút trỏ M danh sách liên kết đơn F} Procedure SLPostInsert(Var F; M, x) {Tạo nút mới} N  AVAIL; infor(N):=x; link(N):= ; Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.10 10 22/04/22 2.2 Một số phép toán danh sách liên kết đơn (tiếp) {Nối nút vào sau nút M} If F= then F := N Else begin link(N) := link(M); link(M) := N; end; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.11 11 Bổ sung vào trước nút M DSLKD x F (2) x (1) (1) M P x (2) (1) Link(N) := M; (2) F := N; Ngô Công Thắng  (3) M x N x x N (1) P:=F; While link(P) # M P:=link(P); (2) link (P) := N; (3) Link(N) := M; Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.12 12 22/04/22 PP chung loại bỏ phần tử khỏi cấu trúc lưu trữ phân tán cấu trúc liệu B1: Ngắt liên kết với nút cần loại bỏ cho đảm bảo liên kết cấu trúc => Thay đổi liên kết theo quy tắc thay đổi liên kết  B2: Hủy nút chứa phần tử cần loại bỏ  Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.13 13 Quy tắc thay đổi liên kết cấu trúc lưu trữ phân tán Luôn phải xét trường hợp cấu trúc rỗng  Xem trường hợp làm thay đổi biến cấu trúc phải xét xử lý riêng, cịn lại xử lý chung Ghi nhớ: Khi làm cấu trúc lưu trữ phân tán ln phải vẽ hình, thực thao tác hình, đánh số thể thứ tự thực sau chuyển thành lệnh giả mã  Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.14 14 22/04/22 Loại bỏ nút M khỏi DSLKD F P (1) (1) F x M (1) F := link(F); x (2) x x  M (1) P:=F; While link(P) # M P := link(P); (2) link(P) := link(M); Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.15 15 2.2 Một số phép toán danh sách liên kết đơn (tiếp) b) Loại bỏ nút khỏi danh sách - Vào: F, M - Ra: Không {Thủ tục loại bỏ nút trỏ M khỏi danh sách liên kết đơn F} Procedure SLDelete(Var F; M) { Trường hợp danh sách rỗng} If F= then begin Write(‘danh sách rỗng’) Return end Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.16 16 22/04/22 2.2 Một số phép toán danh sách liên kết đơn (tiếp) {Ngắt kết nối với nút M} {M nút danh sách} If M=F then F:=link(F) Else begin {Tìm đến nút đứng trước nút M } P:=F; While link(P) # M P:=link(P); {Nối nút trước M với nút sau M} link(P):=link(M); end; Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.17 17 2.2 Một số phép toán danh sách liên kết đơn (tiếp) {Hủy nút M} M  AVAIL; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.18 18 22/04/22 2.2 Một số phép toán danh sách liên kết đơn (tiếp) c) Duyệt danh sách - Vào: F - Ra: Không {Thủ tục duyệt danh sách liên kết đơn F đưa phần tử liệu nút ds} Procedure SLDisplay(F) 1) P := F; 2) While P #  begin Write(infor(P)); P := link(P); end; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.19 19 2.2 Một số phép toán danh sách liên kết đơn (tiếp) d) Ghép hai danh sách liên kết đơn Cho danh sách liên kết đơn P Q, viết thủ tục nối Q vào sau P, P trỏ tới DSLKD sau nối Procedure SLConcat(Var P; Q) {Danh sách trỏ q rỗng} If Q =  then Return {Trường hợp danh sách trỏ p rỗng} If P =  then begin P:=Q return end Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.20 20 10 22/04/22 Danh sách liên kết vòng (tiếp)  Để khắc phục nhược điểm danh sách nối vòng ta đưa thêm vào nút đặc biệt gọi “nút đầu danh sách” (list head node) Trường Infor nút không chứa liệu, trỏ HEAD trỏ tới nút đầu danh sách cho phép ta truy nhập vào danh sách Head A1 Ngô Công Thắng A2 A3 Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.25 25 Danh sách liên kết vòng (tiếp)  Việc dùng thêm nút đầu danh sách làm cho danh sách có nút nên khơng rỗng Danh sách có nút HEAD có LINK(Head)= Head Head  Các phép toán bổ sung loại bỏ nút danh sách liên kết vòng tương tự danh sách liên kết đơn Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.26 26 13 22/04/22 Bài tập (ctdlgt-dslkd.cpp)  Cài đặt cấu trúc liệu danh sách liên kết đơn (DSLKD) có phần tử số nguyên với bốn phép toán: 1) Bổ sung phần tử x vào sau nút M  2) Loại bỏ nút M  3) Duyệt DSLKD  4) Ghép hai danh sách  Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.27 27 Danh sách liên kết kép 4.1 Giới thiệu  Trong danh sách liên kết kép, nút nhớ có cấu trúc gồm trường sau: left infor right infor: Chứa phần tử liệu left: Con trỏ trỏ tới nút đứng trước right: Con trỏ trỏ tới nút đứng sau Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.28 28 14 22/04/22 4.1 Giới thiệu (tiếp) left nút cực trái right nút cực phải có giá trị   Dùng trỏ L trỏ vào nút cực trái, trỏ R trỏ vào nút cực phải để truy nhập vào danh sách chiều  Khi danh sách rỗng L = R =   L R A Ngô Công Thắng B Bài giảng Cấu trúc liệu giải thuật - Chương 03 C 3.29 29 4.2 Các phép toán danh sách liên kết kép a) Bổ sung phần tử liệu vào danh sách  Cho danh sách liên kết kép (L, R) M trỏ trỏ tới nút danh sách Bổ sung phần tử liệu x vào trước nút M Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.30 30 15 22/04/22 Bổ sung x vào trước nút M DSLKK left(M)  x x x (2) (1) x (3) L N (1) right(N) := M ; (2) left(M) := N ; (3) L := N; Ngô Công Thắng M (2) (4) (1) (3) x M  R x N (1) right(left(M)) := N (2) left(N) := left(M) (3) right(N) := M (4) left(M) := N Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.31 31 4.2 Các phép toán danh sách liên kết kép - Vào: (L,R),M,x - Ra: Khơng có {Thủ tục bổ sung phần tử x vào trước nút M DSLK kép (L, R)} Procedure DLPreInsert(Var L,R; M, x) {Tạo nút mới} N  AVAIL infor(N) := x left(N):=right(N):=  Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.32 32 16 22/04/22 a) Chèn thêm nút vào danh sách {Trường hợp danh sách rỗng} If L=R= then begin L := R := N ; Return; end {M trỏ tới nút cực trái} If M=L then begin right(N) := M; left(M) := N; L := N; Return; end Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.33 33 a) Chèn thêm nút vào danh sách {Trường hợp lại} right(left(M)) := N left(N) := left(M) right(N) := M left(M) := N Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.34 34 17 22/04/22 b) Loại bỏ nút khỏi danh sách liên kết kép  Cho danh sách liên kết kép L, R M trỏ trỏ tới nút danh sách Loại bỏ nút M Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.35 35 Loại bỏ nút M DSLKK (2)   (2) left(M) x x M L (1) (1) L := right(L) (2) left(L) := ;  x L Ngô Công Thắng right(M) (1) x x M (2) (1)   R (1) right(left(M)) := right(M) (2) left(right(M)) := left(M) x  M (1) R := left(R) (2) right(R) := ;  (1) L := R :=  M R Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.36 36 18 22/04/22 b) Loại bỏ nút khỏi danh sách liên kết kép Cho danh sách liên kết kép L, R M trỏ trỏ tới nút danh sách cần loại bỏ - Vào: (L,R), M - Ra: Khơng có {Thủ tục loại bỏ nút trỏ M DSLK kép L, R} Procedure DLDelete(Var L, R; M) { Trường hợp danh sách rỗng } If L=R= then begin Write(‘ danh sach rong ‘) Return end  Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.37 37 b) Loại bỏ nút khỏi danh sách liên kết kép {Ngắt kết nối với nút M} Case M = L= R: Begin {Danh sach nút M} L:=R:= ; end M=L: Begin { Nút cực trái bị loại } L := right(L) left(L) :=  end Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.38 38 19 22/04/22 b) Loại bỏ nút khỏi danh sách liên kết kép M=R: Begin { Nút cực phải bị loại } R := left(R) right(R) :=  end ELSE: begin right(left(M)):=right(M) left(right(M)):=left(M) end; End Case 3.{Hủy nút M} M  AVAIL; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.39 39 c) Duyệt danh sách liên kết kép đưa phần tử danh sách - Vào: L, R - Ra: Không có {Thủ tục duyệt danh sách từ trái sang phải} Procedure DLDisplay(L, R); 1) P:= L; 2) While P #  begin Write(infor(P)); P := right(P); end; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.40 40 20 22/04/22 Sử dụng cấu trúc lưu trữ phân tán cho ngăn xếp hàng đợi 5.1 Sử dụng cấu trúc lưu trữ phân tán cho ngăn xếp  Các phần tử liệu ngăn xếp lưu trữ nút nhớ nằm rải rác khắp nơi nhớ, nút nhớ có cấu trúc gồm trường  Nút (nút đáy) có link  Ngơ Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.41 41 Cấu trúc lưu trữ phân tán ngăn xếp infor link x T x Khi ngăn xếp rỗng, T= x  Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.42 42 21 22/04/22 Sử dụng cấu trúc lưu trữ phân tán cho ngăn xếp hàng đợi - Vào: T, x - Ra: Khơng có {Thủ tục bổ sung phần tử x vào ngăn xếp T lưu trữ phân tán} Procedure push(Var T; x) 1) {Tạo nút mới} N AVAIL; pop := tg; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.45 45 Sử dụng cấu trúc lưu trữ phân tán cho ngăn xếp hàng đợi - Vào: T - Ra: TRUE ngăn xếp rỗng, FALSE không rỗng {Hàm kiểm tra ngăn xếp T lưu trữ phân tán, trả TRUE n.xếp rỗng FALSE chưa rỗng} Function isEmpty(T) If T =  then isEmpty:=TRUE; Else isEmpty:=FALSE; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.46 46 23 22/04/22 Sử dụng cấu trúc lưu trữ phân tán cho ngăn xếp hàng đợi - Vào: T - Ra: Phần tử liệu đỉnh ngăn xếp {Hàm trả phần tử đỉnh ngăn xếp T lưu trữ phân tán} Function top(T) 1) {Kiểm tra ngăn xếp rỗng} If T =  then begin write(‘Ngan xep da rong’); return; end; 2) {Trả phần tử đỉnh} top := infor(T); Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.47 47 5.2 Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi  Trong cấu trúc lưu trữ phân tán, phần tử liệu hàng đợi lưu trữ nút nhớ, nút nhớ có cấu trúc gồm trường, trường infor chứa phần tử liệu, trường link chứa địa nút đứng sau infor Ngô Công Thắng link Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.48 48 24 22/04/22 Cấu trúc lưu trữ phân tán hàng đợi x x F x  R x N Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.49 49 5.2 Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi - Vào: (F, R), x - Ra: Khơng có {Thủ tục bổ sung phần tử x vào lối sau hàng đợi (F, R) sử dụng cấu trúc lưu trữ phân tán} Procedure QInsert(Var F,R; x) 1) {Tạo nút mới} N AVAIL; QDelete := tg; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.52 52 26 22/04/22 5.2 Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi - Vào: (F, R) - Ra: True - rỗng, False - không rỗng {Hàm kiểm tra hàng đợi rỗng} Function QIsEmpty(F, R) If F=R= then QIsEmpty := True Else QIsEmpty := False; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.53 53 Bài tập  (ctdlgt-nganxep2.cpp) Cài đặt cấu trúc liệu ngăn xếp lưu trữ phân tán có phần tử ký tự Ứng dụng chuyển số nguyên hệ 10 sang hệ 16 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.54 54 27

Ngày đăng: 16/06/2023, 16:19