Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
0,93 MB
Nội dung
22/04/22 Tìm hiểu cấu trúc liệu 1) Đặc điểm, tổ chức 2) Cấu trúc lưu trữ 3) Phép tốn Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.1 CHƯƠNG MẢNG VÀ DANH SÁCH Mảng Mảng tập hợp có thứ tự gồm số cố định phần tử kiểu Mỗi phần tử mảng số, thể thứ tự phần tử mảng Điều cho phép truy nhập trực tiếp phần tử qua số Các phần tử mảng tổ chức thành mảng chiều, chiều, chiều… Mảng chiều có số, mảng chiều có số, … mảng n chiều có n số 22/04/22 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ử 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 Với mảng chiều, phần tử lưu trữ ô nhớ V[i] 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, n số phần tử hàng Mảng V x x x x k n k = (i-1)*n + j 10 a13 => V[k], k = (1-1)*3 + = V 10 k 22/04/22 Mảng 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 Khơng có phép bổ sung loại bỏ phần tử mảng 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 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 22/04/22 2.1 Khái niệm Danh sách tuyến tính danh sách mà mối quan hệ lận cận phần tử xác định rõ ràng Ví dụ: Véc tơ danh sách tuyến tính Danh sách tuyến tính có dạng (a1, a2, , an), a1 phần tử đầu, an phần tử cuối, phần tử thứ i Với i n ai+1 gọi phần tử sau ai; i n phần tử ai-1 phần tử trước Danh sách rỗng (khơng có phần tử nào) 2.1 Khái niệm 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ớ 22/04/22 2.2 Lưu trữ cho danh sách tuyến tính Danh sách sử dụng cấu trúc lưu trữ phân tán 2.3 Các phép toán danh sách Danh sách ln có phép toán bổ sung, loại bỏ phần tử liệu 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 10 22/04/22 2.3 Các phép tốn danh sách Phép chép: chép danh sách Phép xếp: Có thể xếp phần tử danh sách theo thứ tự định 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 11 Cấu trúc ngăn xếp (Stack) 3.1 Định nghĩa Ngăn xếp loại 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) 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) Ngăn xếp rỗng 12 22/04/22 3.2 Ngăn xếp lưu trữ Dùng vector lưu trữ S có n ô nhớ với số từ đến n để lưu phần tử liệu Dùng biến T chứa số phần tử đỉnh ngăn xếp T có giá trị thay đổi ngăn xếp hoạt động Khi bổ sung phần tử T tăng lên Khi loại bỏ phần tử T giảm Khi ngăn xếp rỗng T=0 13 3.3 Các phép toán ngăn xếp Bổ sung phần tử vào stack - Vào: ngăn xếp (S,T), phần tử x - 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ố đỉnh T.} 14 22/04/22 Thủ tục bổ sung phần tử vào stack Procedure push(Var S, T; x) 1) {Kiểm tra đầy} If T = n then Begin Write(‘Ngăn xếp đầy‘) Return End; 2) {Tăng T lên 1} T := T+1; 3) {Đưa x vào ngăn xếp vị trí T} 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 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.} 16 22/04/22 Hàm loại bỏ phần tử khỏi ngăn xếp Function pop(Var S, T) 1) {Kiểm tra rỗng} If T = then Begin Write(‘Ngăn xếp rỗng‘) Return; End 2) tg := S[T]; {Lưu lại phần tử đỉnh} 3) {Giảm T 1} T := T-1 4) {Trả phần tử đỉnh 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 17 Hàm kiểm tra ngăn xếp rỗng/ đầy Function isEmpty(S,T) If T = then isEmpty := TRUE Else isEmpty := FALSE; Return Function isFull(S,T) If T = n then isFull := TRUE Else isFull := 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 18 22/04/22 Hàm trả phần tử đỉnh ngăn xếp Function top(S,T) 1) {Kiểm tra rỗng} If T = then Begin Write(‘Ngăn xếp 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 19 Cài đặt cấu trúc liệu Khi cài đặt cấu trúc liệu ta cài đặt gì? Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.20 20 10 22/04/22 Cài đặt cấu trúc liệu Cấu trúc liệu + Giải thuật = Chương trình Cấu trúc lưu trữ Phép toán (1) (2) Cài đặt (Lập trình) 1) Cài đặt cấu trúc lưu trữ: Khai báo biến khởi tạo giá trị ban đầu cho biến (nếu cần) 2) Cài đặt phép toán: Khai báo định nghĩa hàm, hàm phép toán Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.21 21 Ví dụ ứng dụng ngăn xếp (ctdlgt-nganxep1.cpp): Cài đặt cấu trúc liệu ngăn xếp lưu trữ có phần tử số nguyên Ứng dụng ngăn xếp cài đặt cho toán chuyển đổi số nguyên hệ 10 sang hệ Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.22 22 11 22/04/22 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.23 23 Bài tập Ứ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.24 24 12 22/04/22 Cấu trúc hàng đợi (Queue) 4.1 Định nghĩa Hàng đợi (queue) loại danh sách tuyến tính đặc biệt 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) 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) Hàng đợi rỗng 25 4.2 Hàng đợi 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 Dùng biến F chứa số phần tử đầu hàng (lối trước), biến R chứa số phần tử cuối hàng (lối sau) F (Front), R (Rear) 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 Khi hàng đợi rỗng R=F=0 26 13 22/04/22 4.2 Hàng đợi lưu trữ Q x x x F x x x n-1 n R 27 4.2 Hàng đợi lưu trữ Trong cấu trúc lưu trữ hàng đợi người ta sử dụng ô nhớ theo kiểu quay vịng để sử dụng lại nhớ chứa phần tử liệu loại bỏ, tức ô nhớ n ô nhớ Q x x x F x x x x x n R 28 14 22/04/22 4.2 Hàng đợi lưu trữ 29 4.3 Các phép toán Queue a) Bổ sung phần tử vào queue Vào: (Q, F, R), x 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.} 30 15 22/04/22 Trường hợp hàng đợi đầy Q Ngô Công Thắng x x x R F x x x x x n Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.31 31 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) {Tăng R lên 1} If F=R=0 Then F := R :=1 Else If R=n Then R := Else R := R+1; {Đưa x vào hàng đợi vị trí R} Q[R] := x; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.32 32 16 22/04/22 4.3 Các phép toán hàng đợi b) Loại bỏ phần tử khỏi hàng đợi - 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ỏ} 33 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.34 34 17 22/04/22 Thủ tục loại bỏ phần tử khỏi hàng đợi Function CQDelete(Var Q,F,R) 3) {Tăng F lên 1} 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.35 35 Phép toán kiểm tra hàng đợi rỗng - Vào: (Q,F,R) - Ra: TRUE rỗng cịn khơng FALSE 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.36 36 18 22/04/22 Bài tập Cài đặt cấu trúc liệu hàng đợi lưu trữ có phần tử liệu số nguyên Ứng dụng hàng đợi cho toán: Đọc dãy số nguyên dương từ tệp văn ‘daysonguyen.txt’, tệp khơng có thông tin số lượng số, tách thành dãy số lẻ dãy số chẵn theo thứ tự xuất tệp, đưa dãy số hình Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 3.37 37 19