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 cung cấp cho người học các kiến thức: Mảng, 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,... Mời các bạn cùng tham khảo.
1 Mảng Để truy nhập trực tiếp phần tử, mảng dùng cấu trúc lưu trữ 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 cho phép bổ sung loại bỏ phần tử mảng l 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 CHƯƠNG MẢNG VÀ DANH SÁCH Ngô Công Thắng Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Website: dse.vnua.edu.vn/ncthang Email: ncthang@vnua.edu.vn 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 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 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 l 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.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.1 Khái niệm 2.2 Các phép tốn danh sách 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ớ 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 tố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 Cấu trúc ngăn xếp (Stack) 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 3.1 Định nghĩa l Stack 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 Stack rỗng bao gồm số phần tử 2.3 Lưu trữ cho danh sách tuyến tính l l 3.2 Lưu trữ Stack mảng Do số phần tử danh sách tuyến tính ln biến động, tức kích thước n 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.10 l l l Có thể lưu trữ Stack vector S gồm n ô nhớ có số từ đến n Nếu T số phần tử đỉnh stack T có giá trị biến đổi stack hoạt động Khi bổ sung phần tử T tăng lên Khi phần tử bị loại khỏi stack T giảm Ta quy ước stack rỗng T=0 3.3 Các phép toán ngăn xếp 3.3 Các phép toán ngăn xếp l 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.} 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.} Thủ tục bổ sung phần tử vào stack Hàm loại bỏ phần tử khỏi ngăn xếp Procedure Push(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 Function Pop(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]; 3) Thay đổi số đỉnh T := T-1 4) Đưa 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 03 3.14 l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.16 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 l l 2.17 Function Empty(S,T) If T = then Empty:=TRUE Else Empty:=FALSE; Return Bài giảng Cấu trúc liệu giải thuật - Chương 02 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.19 Ví dụ ứng dụng ngăn xếp Hàm kiểm tra ngăn xếp rỗng Ngơ Cơng Thắng 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; 2.18 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.20 4.2 Lưu trữ hàng đợi mảng 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 Dùng vector lưu trữ Q có n ô nhớ làm cấu trúc lưu trữ hàng đợi, nhớ có số từ đến n l Để truy nhập vào hàng đợi ta dùng biến số: R cho lối sau F cho lối trước l Khi bổ sung phần tử vào queue R tăng lên 1, cịn loại bỏ phần tử khỏi queue F tăng lên l Khi queue rỗng R=F=0 l 3.21 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 bao gồm số phần tử 4.2 Lưu trữ hàng đợi mảng l l Các phần tử queue di chuyển khắp không gian nhớ thực phép bổ sung loại bỏ Khắc phục tình trạng người ta coi khơng gian nhớ tổ chức cho queue kiểu vịng trịn nghĩa với vector lưu trữ Q phần tử Q[1] coi đứng trước Q[n] 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.} 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ỏ} Procedure CQINSERT (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 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 4.3 Các phép toán Queue Thủ tục loại bỏ phần tử khỏi hàng đợi Function CQDELETE(Q,F,R) 1) {Kiểm tra rỗng} If F=0 then Begin Write(‘Hàng đợi rỗng’); Return; End; 2) {Lưu lại phần tử loại bỏ} Y:=Q[F] 3.26 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.28 Thủ tục loại bỏ phần tử khỏi hàng đợi Function CQDELETE(Q,F,R) 3) {Thay đổi số} If F=R then F:=R:=0 Else If F=n then F:=1 Else F:=F+1; 4) CQDELETE:=Y; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.29 ... đỉnh T := T-1 4) Đưa 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 03 3.14 l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.16 Hàm... 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 l l 2. 17 Function Empty(S,T) If T = then Empty:=TRUE Else Empty:=FALSE; Return Bài giảng. .. tu dinh T cua Stack S } Write(R) End; Return; 2. 18 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3 .20 4 .2 Lưu trữ hàng đợi mảng Bài tập l Ứng dụng ngăn xếp chuyển biểu thức trung