Danh mục

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ngô Công Thắng

Số trang: 8      Loại file: pdf      Dung lượng: 340.57 KB      Lượt xem: 66      Lượt tải: 0    
Jamona

Phí tải xuống: 3,000 VND Tải xuống file đầy đủ (8 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

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.
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ngô Công Thắng1. MảngĐể truy nhập trực tiếp các phần tử, mảng chỉdùng được cấu trúc lưu trữ kế tiếp.l Có các phép tạo lập mảng, tìm kiếm 1 phầntử từ mảng, truy nhập một phần tử mảng.l Không cho phép bổ sung hoặc loại bỏ mộtphần tử mảng.l Mảng 2 chiều có m = 2 hàng, n = 3 cột. Tínhchỉ số k truy nhập vào ô nhớ chứa phần tử aij.4 5 97 10 14 5 9 7 10 1 => k = (i-1)*n + jlCHƯƠNG 2MẢNG VÀ DANH SÁCHNgô Công ThắngBộ môn Công nghệ phần mềmKhoa Công nghệ thông tinWebsite: dse.vnua.edu.vn/ncthangEmail: ncthang@vnua.edu.vn1. MảngMảng là một tập hợp có thứ tự gồm một số cốđịnh các phần tử cùng kiểu.l Một phần tử mảng được chỉ ra bởi chỉ số, thểhiện thứ tự của phần tử trong mảng. Véc tơ làmảng 1 chiều có 1 chỉ số (i). Ma trận là mảng2 chiều có 2 chỉ số (i, j). Không gian 3 chiều làmảng 3 chiều có 3 chỉ số. Không gian n chiềulà mảng n chiều có n chỉ số.l2. Danh sách2.1. Khái niệmDanh sách là một tập hợp có thứ tự gồm mộtsố biến động các phần tử cùng kiểu.l Phép loại bỏ, bổ sung 1 phần tử là phépthườ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 tamột danh sách. Người đến xếp hàng khám bổsung ở phía sau, người được khám sẽ ra khỏihàng ( loại bỏ ) ở phía trước.l2.1. Khái niệmlllllllDanh sách tuyến tính: Một danh sách mà quan hệ lậncận giữa các phần tử được xác định rõ ràng thì được gọilà danh sách tuyến tính. Véc tơ là một danh sách tuyếntính.Danh sách tuyến tính hoặc rỗng (không có phần tử nào)hoặc có dạng (a1, a2, ..., an) với ai , 1 ≤ i ≤ n là cácphần tử.Trong danh sách tuyến tính tồn tại phần tử đầu là a1,phần tử cuối là an, phần tử thứ i là ai . Với ai bất kỳ 1 ≤ i≤ n thì ai+1 gọi là phần tử sau ai ; 2 ≤ i ≤ n thì phần tửai-1 là phần tử trước của ai .2.2. Các phép toán trên danh sáchlllllPhép bổ sung: Có thể bổ sung phần tử vàodanh sách.Phép loại bỏ: có thể loại bỏ một phàn tử ra khỏidanh sách.Phép ghép: có thể ghép hai hay nhiều danhsách thành một danh sách.Phép tách: có thể tách một danh sách thànhnhiều danh sách.Phép cập nhật: cập nhật giá trị cho các phần tửcủa danh sách.2.1. Khái niệm2.2. Các phép toán trên danh sáchn là độ dài (kích thước) của danh sách, n có thểthay đổi.Một phần tử trong danh sách thường là một bảnghi (gồm một hoặc nhiều trường).Ví dụ 1: Danh mục điện thoại là một danh sáchtuyến tính, mỗi phần tử của nó là một thuê baogồm 3 trường: Họ tên chủ hộ, địa chỉ, số điệnthoại.Ví dụ 2: Tệp(File) là một danh sách có kíchthước lớn được lưu trữ ở bộ nhớ ngoài.Phép sao chép: có thể sao chép một danh sách.l Phép sắp xếp: Có thể sắp xếp các phần tử củadanh sách theo một thứ tự nhất định.l Phép tìm kiếm: Tìm kiếm trong danh sách mộtphần tử mà một trường nào đó có giá trị ấn định.Ví dụ 1: Minh hoạ cho các phép toán trên danhsách được cài đặt trên mảng. Cho danh sách cácsố nguyên, thêm vào 1 số nguyên và loại bỏ mộtsố nguyên.l2.3. Lưu trữ kế tiếp cho danh sáchtuyến tínhl3. Cấu trúc ngăn xếp (Stack)Dùng mảng một chiều làm cấu trúc lưu trữ danhsách tuyến tính. Tức là dùng vector lưu trữ (Vi)với 1≤ i ≤ m để lưu trữ một danh sách tuyến tính(a1,a2,...,an). Phần tử ai được chứa ở Vi .a1 a2... ai...anV1 V2 ... Vi ... Vn ... Vm3.1. Định nghĩal Stack là một kiểu danh sách tuyến tính đặc biệtmà phép bổ sung và phép loại bỏ luôn luôn thựchiện ở một đầu gọi là đỉnh (Top).l Phép bổ sung và loại bỏ phần tử của ngăn xếpđược thực hiện theo nguyên tắc ‘Vào sau ratrước’ (Last in - First out, viết tắt là LIFO).l Stack có thể rỗng hoặc bao gồm một số phầntử.2.3. Lưu trữ kế tiếp cho danh sáchtuyến tínhll3.2. Lưu trữ Stack bằng mảngDo số phần tử của danh sách tuyến tính luônbiến động, tức là kích thước n luôn thay đổi, dovậy m = max(n).Mặt khác, n không thể xác định chính xác mà chỉdự đoán. Bởi vậy, nếu max(n) lớn sẽ lãng phí bộnhớ cũng như lãng phí thời gian để thực hiệncác thao tác để dồn các phần tử xuống khi tathêm một phần tử vào danh sách tuyến tính.Ngô Công ThắngBài giảng Cấu trúc dữ liệu và giải thuật - Chương 033.10lllCó thể lưu trữ Stack bởi một vector S gồm n ônhớ kế tiếp nhau có chỉ số từ 1 đến n. Nếu T làchỉ số phần tử đỉnh của stack thì T sẽ có giá trịbiến đổi khi stack hoạt động.Khi bổ sung 1 phần tử T sẽ tăng lên 1. Khi 1phần tử bị loại khỏi stack thì T giảm đi 1.Ta quy ước khi stack rỗng T=0.3.3. Các phép toán trên ngăn xếp3.3. Các phép toán trên ngăn xếplBổ sung một 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 này bổ sung phần tử X vào ngănxếp được lưu trữ bởi véc tơ S có kích thướclà n, có chỉ số đinh là T.}Loại bỏ một phần tử ra khỏi stack- Vào: Ngăn xếp (S, T)- Ra: giá trị phần tử loại bỏ (đỉnh){Hàm này thực hiện việc loại bỏ phần tử ởđỉnh ngăn xếp (S,T) và trả về phần tử này.}Thủ tục bổ sung một phần tử vào stackHàm loại bỏ phần tử khỏi ngăn xếpProcedure Push(S, T, X) ...

Tài liệu được xem nhiều: