Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 2: Mảng và danh sách

16 7 0
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 2: Mảng và danh sách

Đ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

Chương 2 có thể giúp người học biết được các khái niệm về mảng và danh sách, các phép toán trên danh sách, lưu trữ kế tiếp cho danh sách tuyến tính, cấu trúc ngăn xếp (Stack), lưu trữ kế tiếp, các phép toán trên ngăn xếp, các phép toán trên ngăn xếp,... Mời các bạn cùng tham khảo.

CHƯƠNG MẢNG VÀ DANH SÁCH Mảng Danh sách Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.1 Mảng Mảng tập hợp có thứ tự gồm số cố định phần tử kiểu l Một phần tử mảng số, thể thứ tự phần tử mảng l Các phần tử mảng tổ chức thành mảng chiều, chiều, chiều… Ví dụ: Véc tơ mảng chiều có số (i) Ma trận mảng chiều có số (i, j) Khơng gian chiều mảng chiều có số Không gian n chiều mảng n chiều có n số l Mảng Mảng dùng cấu trúc lưu trữ kế tiếp, phép truy nhập trực tiếp phần tử l Dùng vec tơ lưu trữ V có n nhớ liên tiếp với số từ đến n để lưu trữ phần tử liệu mảng l Với mảng chiều, phần tử lưu trữ ô nhớ V[i] l Với mảng chiều, phần tử lưu trữ lần lượt, hết hàng đến hàng 2… Phần tử aij lưu trữ ô nhớ V[k], k = (i-1)*n + j l Mảng Mảng chiều có m = hàng, n = cột Tính số k truy nhập vào nhớ chứa phần tử aij 10 10 => k = (i-1)*n + j l Có phép tạo lập mảng, tìm kiếm phần tử từ mảng, truy nhập phần tử mảng l Khơng có phép bổ sung loại bỏ phần tử mảng l Danh sách 2.1 Khái niệm Danh sách tập hợp có thứ tự gồm số biến động phần tử kiểu l Phép loại bỏ, bổ sung phần tử phép thường xuyên tác động lên danh sách l Ví dụ: Tập hợp người đến khám bệnh cho ta danh sách Người đến xếp hàng khám bổ sung phía sau, người khám khỏi hàng ( loại bỏ ) phía trước l 2.1 Khái niệm l l l Danh sách tuyến tính: Một danh sách mà quan hệ lận cận phần tử xác định rõ ràng gọi danh sách tuyến tính Véc tơ danh sách tuyến tính Danh sách tuyến tính rỗng (khơng có phần tử nào) có dạng (a1, a2, , an) với , ≤ i ≤ n phần tử Trong danh sách tuyến tính tồn phần tử đầu a1, phần tử cuối an, phần tử thứ i Với ≤ i ≤ n ai+1 gọi phần tử sau ; ≤ i ≤ n phần tử ai-1 phần tử trước 2.1 Khái niệm l l l l n độ dài (kích thước) danh sách, n thay đổi Một phần tử danh sách thường ghi (gồm nhiều trường) Ví dụ 1: Danh mục điện thoại danh sách tuyến tính, phần tử thuê bao gồm trường: Họ tên chủ hộ, địa chỉ, số điện thoại Ví dụ 2: Tệp(File) danh sách có kích thước lớn lưu trữ nhớ ngồi 2.2 Các phép toán danh sách l l l l l Phép bổ sung: Có thể bổ sung phần tử vào danh sách Phép loại bỏ: loại bỏ phàn tử khỏi danh sách Phép ghép: ghép hai hay nhiều danh sách thành danh sách Phép tách: tách danh sách thành nhiều danh sách Phép cập nhật: cập nhật giá trị cho phần tử danh sách 2.2 Các phép tốn danh sách Phép chép: chép danh sách l Phép xếp: Có thể xếp phần tử danh sách theo thứ tự định l Phép tìm kiếm: Tìm kiếm danh sách phần tử mà trường có giá trị ấn định Ví dụ 1: Minh hoạ cho phép toán danh sách cài đặt mảng Cho danh sách số nguyên, thêm vào số nguyên loại bỏ số nguyên l 2.3 Lưu trữ cho danh sách tuyến tính l Dùng mảng chiều làm cấu trúc lưu trữ danh sách tuyến tính Tức dùng vector lưu trữ (Vi) với 1≤ i ≤ m để lưu trữ danh sách tuyến tính (a1,a2, ,an) Phần tử chứa Vi a1 a2 an V1 V2 Vi Vn Vm 2.3 Lưu trữ cho danh sách tuyến tính l l Do số phần tử danh sách tuyến tính ln biến động, tức kích thước n ln thay đổi, m = max(n) Mặt khác, n khơng thể xác định xác mà dự đốn Bởi vậy, max(n) lớn lãng phí nhớ lãng phí thời gian để thực thao tác để dồn phần tử xuống ta thêm phần tử vào danh sách tuyến tính Ngơ Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.11 Cấu trúc ngăn xếp (Stack) 3.1 Định nghĩa l Ngăn xếp kiểu danh sách tuyến tính đặc biệt mà phép bổ sung phép loại bỏ luôn thực đầu gọi đỉnh (Top) l Phép bổ sung loại bỏ phần tử ngăn xếp thực theo nguyên tắc "Vào sau trước" (Last in - First out, viết tắt LIFO) l Ngăn xếp rỗng 3.2 Lưu trữ l l l Dùng vector lưu trữ S có n nhớ với số từ đến n để lưu trữ phần tử liệu Dùng biến T để lưu trữ số phần tử đỉnh ngăn xếp, T thay đổi ngăn xếp hoạt động Khi bổ sung phần tử T tăng lên Khi phần tử bị loại khỏi ngăn xếp T giảm Khi ngăn xếp rỗng T=0 3.3 Các phép toán ngăn xếp Bổ sung phần tử vào stack - Vào: phần tử x, ngăn xếp (S,T) - Ra: khơng có {Thủ tục bổ sung phần tử x vào ngăn xếp lưu trữ véc tơ S có kích thước n, có số đinh T.} l Thủ tục bổ sung phần tử vào stack Procedure push(Var S, T; x) 1) {Kiểm tra ngăn xếp đầy chưa?} If T = n then Begin Write(‘Stack đầy‘) Return End; 2) {Thay đổi số} T := T+1 3) {Bổ sung phần tử x} S[T] := x Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.15 3.3 Các phép toán ngăn xếp Loại bỏ phần tử khỏi stack - Vào: Ngăn xếp (S, T) - Ra: giá trị phần tử loại bỏ (đỉnh) {Hàm thực việc loại bỏ phần tử đỉnh ngăn xếp (S,T) trả phần tử này.} l Hàm loại bỏ phần tử khỏi ngăn xếp Function pop(Var S, T) 1) {Kiểm tra xem stack có rỗng?} If T = then Begin Write(‘Stack rỗng‘) Return; End 2) Tg := S[T]; {Giữ lại phần tử đỉnh} 3) {Thay đổi số đỉnh} T := T-1 4) {Trả phần tử bị loại} Pop := Tg; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.17 Hàm kiểm tra ngăn xếp rỗng Function isEmpty(S,T) If T = then Empty := TRUE Else Empty := FALSE; Return Function isFull(S,T) If T = n then Full := TRUE Else Full := FALSE; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.18 Hàm trả phần tử đỉnh ngăn xếp Function top(S,T) 1) {Kiểm tra xem stack có rỗng?} If T = then Begin Write(‘Stack rỗng‘) Return; End 2) {Trả phần tử đỉnh} Top := S[T]; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.19 Ví dụ ứng dụng ngăn xếp l l Viết giả mã có sử dụng ngăn xếp để đổi số nguyên hệ 10 sang hệ Giải thuật: Lấy số hệ 10 chia nguyên liên tiếp cho 2, kết phần dư phép chia lấy theo thứ tự ngược lại Áp dụng chế vào sau trước, lần chia ta lấy số dư phép chia đẩy vào stack (thủ tuc Push) Khi kết thúc phép chia, kết lấy số dư từ stack (hàm loại bỏ phần tử khỏi stack, Pop) Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.20 Ví dụ ứng dụng ngăn xếp - Vào: n - Ra: số nhị phân Procedure chuyen_doi (n); While n Begin R:=n mod Call Push(S,T,R); n= n div End; While SNULL Begin R:=POP(S,T); {lay R tu dinh T cua Stack S } Write(R) End; Return; Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.21 Bài tập l Ứng dụng ngăn xếp chuyển biểu thức trung tố hành hậu tố Biết biếu thức trung tố có dấu ngoặc đầy đủ Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.22 Cấu trúc hàng đợi (Queue) 4.1 Định nghĩa l Hàng đợi (queue) kiểu danh sách tuyến tính mà phép bổ sung thực đầu, gọi lối sau (rear) phép loại bỏ thực đầu khác, gọi lối trước (front) l Phép bổ sung loại bỏ phần tử hàng đợi thực theo nguyên tắc vào trước trước (First in - First out, viết tắt FIFO) l Hàng đợi rỗng 4.2 Lưu trữ Dùng vector lưu trữ Q có n nhớ với số từ đến n để lưu trữ phần tử liệu hàng đợi l Dùng biến R chứa số phần tử lối sau F cho lối trước l Khi bổ sung phần tử vào hàng đợi R tăng lên 1, cịn loại bỏ phần tử khỏi hàng đợi F tăng lên l Khi hàng đợi rỗng R=F=0 l 4.2 Lưu trữ hàng đợi mảng l Để sử dụng lại ô nhớ chứa phần tử liệu loại bỏ, người ta sử dụng ô nhớ vec tơ lưu trữ Q theo kiểu quay vịng, tức nhớ n ô nhớ 4.3 Các phép toán Queue a) Bổ sung phần tử vào queue l Vào: x, (Q, F, R) l Ra: Khơng có {Thủ tục bổ sung phần tử x vào hàng đợi lưu trữ vector Q có n nhớ theo kiểu vịng trịn, có biến số F, R} Procedure CQInsert (Var Q,F,R; x) 1) {Kiểm tra đầy} If (F=1)and(R=n) or (R+1=F) then Begin Write( ‘Hàng đợi đầy‘); Return; End; 2) {Thay đổi số R} If F=R=0 Then F:=R:=1 Else If R=n Then R:=1 Else R:= R+1; {Bổ sung x vào} Q[R]:=x; Return { kết thúc} Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.27 4.3 Các phép toán Queue b) Loại bỏ phần tử khỏi queue - Vào: Hàng đợi (Q,F,R) - Ra: Trả phần tử loại bỏ {Hàm loại bỏ phần tử lối trước hàng đợi (Q,F,R) trả phần tử loại bỏ} Thủ tục loại bỏ phần tử khỏi hàng đợi Function CQDelete(Var Q,F,R) 1) {Kiểm tra rỗng} If F=R=0 then Begin Write(‘Hàng đợi rỗng’); Return; End; 2) {Lưu lại phần tử loại bỏ} Tg:=Q[F] Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.29 Thủ tục loại bỏ phần tử khỏi hàng đợi Function CQDelete(Var Q,F,R) 3) {Thay đổi số F} If F=R then F:=R:=0 Else If F=n then F:=1 Else F:=F+1; 4) CQDelete := Tg; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.30 Kiểm tra hang đợi rỗng Function CQIsEmpty(Q,F,R) If F=R=0 then CQIsEmpty:= TRUE Else CQIsEmpty:=FALSE; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.31 ... xuống ta thêm phần tử vào danh sách tuyến tính Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 03 3.11 Cấu trúc ngăn xếp (Stack) 3.1 Định nghĩa l Ngăn xếp kiểu danh sách tuyến tính đặc... nhiều danh sách thành danh sách Phép tách: tách danh sách thành nhiều danh sách Phép cập nhật: cập nhật giá trị cho phần tử danh sách 2.2 Các phép toán danh sách Phép chép: chép danh sách l... Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.21 Bài tập l Ứng dụng ngăn xếp chuyển biểu thức trung tố hành hậu tố Biết biếu thức trung tố có dấu ngoặc đầy đủ Ngơ Cơng Thắng Bài giảng Cấu

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

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan