bài giảng chi tiết và đầy đủ nhất cấu trúc dữ liệu và giải thuật giúp bạn làm quen cũng như thành thạo khả năng giải quyết các vấn đề về giải thuật trong thời gian nhanh nhất. bài giảng với những ngôn từ dễ hiểu được sắp xếp một cách logic để bạn có thể tiếp thu nhanh nhất.
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 CHƯƠNG MẢNG VÀ DANH SÁCH GV Ngô Công Thắng Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Website: fita.hua.edu.vn/ncthang Email: ncthang@hua.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-1 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 toá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 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 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ử danh sách 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 biến động, tức kích thước n thay đổi, m = max(n) Mặt khác, n xác định xác mà dự đoá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 Ta quy ước stack rỗng T=0 Khi bổ sung phần tử T tăng lên Khi phần tử bị loại khỏi stack T giảm 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 - Ra: 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 Hàm loại bỏ phần tử khỏi ngăn xếp Procedure Push(S, T, X) 1) Xét xem stack có bị tràn ( over flow) không? Tràn stack không chỗ If T>= n then Begin Write(‘ Stack tràn ‘) Return End; 2) Chuyển trỏ 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