Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Danh sách liên kết (Ngô Công Thắng)

21 11 0
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Danh sách liên kết (Ngô Công Thắng)

Đ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

Những nội dung chính được trình bày trong chương 3 gồm có: Giới thiệu về 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 và hàng đợi bằng danh sách liên kết đơn. Mời các bạn cùng tham khảo.

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 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.1 Giới thiệu danh sách liên kết l 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 Các phần tử liệu danh sách lưu trữ phần tử nhớ mà ta gọi nút (node) Trong nút nhớ, phần tử liệu cịn có địa nút lân cận Nếu 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 Danh sách liên kết đơn 2.1 Quy tắc tổ chức danh sách liên kết đơn l Mỗi nút danh sách có hai trường, trường INFOR chứa thơng tin phần tử trường LINK chứa địa nút đứng sau (đây địa liên kết) INFOR Ngô Công Thắng LINK 3.3 Bài giảng Cấu trúc liệu giải thuật - Chương 03 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 địa LINK rỗng (∅) l Để truy nhập vào tất nút danh sách phải có trỏ F trỏ tới nút l Khi danh sách rỗng F = ∅ l 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 2.1 Quy tắc tổ chức danh sách liên kết đơn (tiếp) l Để tổ chức lưu trữ danh sách liên kết phải có: l l l l 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: l l 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 l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.6 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ử 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.7 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.8 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.9 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 {Ngắt kết nối với nút M} {Nút 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.10 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.11 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 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.12 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 trỏ p q, ghép danh sách trở thành danh sách cho p trỏ tới Thuật tốn có bước sau: 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.13 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 {Tìm đến nút cuối danh sách p} p1:= p While link(p1) # ∅ p1:=link(p1); {Ghép} link(p1):=q; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.14 Ưu nhược điểm danh sách liên kết đơn Với danh sách tuyến tính động, q trình xử lý ln có bổ sung, loại bỏ tổ chức danh sách liên kết hợp lý, tận dụng vùng nhớ nằm rải rác nhớ l Chỉ có phần tử truy nhập trực tiếp, phần tử khác phải truy nhập qua phần tử đứng trước l Tốn nhớ phải lưu trường infor link nút l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.15 Danh sách liên kết vòng Danh sách liên kết vòng (Circularly Linked List) dạng cải tiến danh sách liên kết đơn l Trong danh sách liên kết vòng, trường địa nút cuối rỗng mà lại chứa địa nút danh sách l 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 A5 3.16 Danh sách liên kết vòng (tiếp) l Ưu nhược điểm danh sách nối vòng: Danh sách nối vòng làm cho việc truy nhập vào nút danh sách linh hoạt Ta truy nhập vào danh sách nút được, không thiết phải từ nút Nút nút trỏ F trỏ vào nút l Nhược điểm danh sách nối vòng xử lý khơng cẩn thận dẫn tới chu trình không kết thúc l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.17 Danh sách liên kết vòng (tiếp) l Để 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 Bài giảng Cấu trúc liệu giải thuật - Chương 03 A3 3.18 Danh sách liên kết vòng (tiếp) l Việc dùng thêm nút đầu danh sách làm cho danh sách ln có nút nên khơng rỗng Danh sách có nút HEAD có LINK(Head)= Head Head l 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.19 Danh sách liên kết kép 4.1 Giới thiệu l Trong danh sách liên kết kép (double linked list) nút có cấu trúc gồm trường: LEFT INFOR RIGHT LEFT: Con trỏ trỏ tới nút đứng trước RIGHT: Con trỏ trỏ tới nút đứng sau INFOR: Chứa phần tử liệu Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.20 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ị ∅ l Để truy nhập vào danh sách chiều ta phải dùng trỏ: Con trỏ L trỏ vào nút cực trái, trỏ R trỏ vào nút cực phải l Khi danh sách rỗng L = R = ∅ l L R A Ngô Công Thắng B C Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.21 4.2 Các phép toán danh sách liên kết kép a) Chèn thêm nút vào danh sách l Chèn phần tử liệu X vào trước nút M danh sách liên kết kép L, R Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.22 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; - {Đưa liệu vào nút cho trường trỏ rỗng} 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.23 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) := L; left(L) := 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.24 a) Chèn thêm nút vào danh sách {Bổ sung vào nút vào trước M} right(left(M)) := N; left(N) := left(M); right(N) := M; left(M) := N; {Kết thúc} Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.25 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 l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.26 b) Loại bỏ nút khỏi danh sách liên kết kép {Thay đổi liên kết} Case L= R=M: 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.27 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 right(left(M)) := right(M); left(right(M)) := left(M); 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.28 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 DSLKK L,R từ trái sang phải} Procedute 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.29 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 l 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 l Nút (nút đáy), Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.30 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.33 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.34 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.35 5.2 Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi l 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ằm rải rác khắp nơi nhớ có liên kết với địa Mỗi 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 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.36 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.39 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.40 Bài tập Thế danh sách nối vòng Nêu ưu nhược điểm Để khắc phục hạn chế danh sách nối vòng người ta làm Thế danh sách nối kép? Qui ước biểu diễn nút danh sách nối kép Nêu ưu nhược điểm danh sách nối kép Cài đặt Stack danh sach nối đơn Cần ý thực phép bổ sung, loại bỏ phần tử Cài đặt Queue danh sach nối đơn Cần ý thực phép bổ sung, loại bỏ phần tử Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.41 ... 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.19 Danh sách liên kết kép 4.1 Giới thiệu l Trong danh sách liên kết. .. Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.15 Danh sách liên kết vòng Danh sách liên kết vòng (Circularly Linked List) dạng cải tiến danh sách liên kết đơn l Trong danh sách liên kết. .. Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.12 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 trỏ p q, ghép danh

Ngày đăng: 07/05/2021, 13:28

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan