Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
665,82 KB
Nội dung
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Lý thuyết Phần ((Chươngg 3)) Danh sách, Ngăn xếp Hàng đợi Giới thiệu khái niệm ADT (Kiểu liệu trừu tượng – Abstract Data Type) Danh sách N ă xếp Ngăn ế Hàng đợi Vũ Anh Dũng - Khoa CNTT Kiểu liệu trừu tượng Là tập đối tượng tương ứng với tập thao tác Danh sách, tập hợp,… coi kiểu liệu trừu tượng C++ cho phép viết thao tác gọi phương hươ thứ thức Ví dụ : Tập hợp ADT với thao tác : add, remove, find, union,… Vũ Anh Dũng - Khoa CNTT Danh sách (List) Danh sách tổng quát có dạng A0,A1, A2 , ,…, , AN-1 Kích thước N N=0 : danh sách rỗng Một số ố th thao tác tá phổ hổ biế biến : printList : in danh sách makeEmpty : làm rỗng danh sách find : trả vị trí lần phần tử xuất trongg danh sách Vũ Anh Dũng - Khoa CNTT Danh sách (List) Một số thao tác phổ biến (tiếp) : findKth : trả pphần tử vịị trí cụụ thể insert : thêm phần tử vào danh sách remove : xóa pphần tử khỏi danh sách Vũ Anh Dũng - Khoa CNTT Sử dụng mảng để cài đặt danh sách Các thao tác : printList: thực thời gian tuyến tính findKth : chiếm thời gian số insert remove đòi hỏi tốn nhiều thời gian (Ví dụ : trường hợp thêm vào vị trí tốn thời gian nhất) Trườngg hợp ợp dùng g mảng g lưu trữ danh sách lựa chọn tốt Vũ Anh Dũng - Khoa CNTT Danh sách liên kết(LinkedList) Hình ảnh danh sách liên kết Danh sách liên kết ế tránh việc chèn xóa phần tử theo chi phí tuyến tính (dịch chuyển ể liên tiếp ế sốố phần ầ tử) Vũ Anh Dũng - Khoa CNTT Danh sách liên kết(LinkedList) Danh sách liên kết : Chuỗi nút (node) Không cần lưu trữ liền kề nhớ Mỗi nút chứa phần tử liên kết đến nút (next link) Nút cuối có next link NULL Vũ Anh Dũng - Khoa CNTT Danh sách liên kết(LinkedList) Phép xóa phần tử (remove): Phép thêm phần ầ tử (insert): Vũ Anh Dũng - Khoa CNTT Danh sách liên kết(LinkedList) Loại bỏ mục cuối : Phải tìm mục phía trước mục cuối Đổi liên kết next thành NULL Cập nhật liên kết trì nút cuối Có thể dùng ds liên kết đôi (nối kép): Vũ Anh Dũng - Khoa CNTT 10 Vector List STL Hai phương thức sau cung cấp cho list (nối kép): void push_front( const Object & x ): thêm x vào đầu danh sách void pop_front ( ): loại bỏ đối tượng đầu danh sách Vũ Anh Dũng - Khoa CNTT 16 Vector List STL Các phương thức Vector: v.[idx]: [ ] trả đối tượng ợ g vịị trí idx g vector, kiểm tra ranh giới v.at(int idx): trả đối tượng vị trí idx vector int capacity( ): kích thước lưu trữ t cấp trước ấ phát hát lại, l i cấp ấ phát hát lại l i sẽẽ tăng tă gấp ấ đôi đôi void reserve(int newCapacity): thiết lập dung lượng mới Vũ Anh Dũng - Khoa CNTT 17 Iterator Trên danh sách đòi hỏi khái niệm vị trí, STL vị trí đại diện iterator Trong list, vị trí thể list::iterator Trong vector, vị trí thể vector::iterator Vũ Anh Dũng - Khoa CNTT 18 Iterator Trong STL list containers class TLD, có hai phương thức : iterator begin( ) trả iterator iterator end( ) trả iterator cuối ối ù Vũ Anh Dũng - Khoa CNTT 19 Iterator Các phép toán iterator itr++ ++itr: chuyển iterator itr tới vị trí *itr: truy cập đến phần tử trỏ tới vị trí iterator itr Ví dụ : for( vector::iterator itr = v.begin( ); itr != v.end( ); ++itr ) cout [...]... (Collection) : các cấu trúc dữ liệu sẵn có như List, Vector, Set,… Iterator : giống con trỏ, dùng để truy cập các phần tử trong Container Algorithms g : Các thuật ậ toán thao tác dữ liệu, ệ , tìm kiếm, sắp xếp, … Vũ Anh Dũng - Khoa CNTT 11 Vector Lợi thế của việc sử dụng vector là nó có thể đánh chỉ số trong thời gian hằng Bất lợi của của nó là thao tác chèn thêm các mục mới và loại bỏ các mục... sách, và một lượng lớn các phương thức 2 Lớp Node, 2 Node nó có khả năng là một private nested class Một nút bao chứa dữ liệu và các con trỏ trỏ tới nút phía trước và nút kế tiếp, tiếp cùng với các hàm tạo thích hợp Vũ Anh Dũng - Khoa CNTT 29 Cài đặt List 3 Lớp const_iterator, nó trừu tượng hóa khái niệm vị trí, và là public nested class const_iterator lưu trữ một con trỏ trỏ tới nút “hiện tại”, và. .. bả hàm hà truy t cập ậ và hàm hà biến biế đổi) đổi) 5 Vector sẽ cung cấp các thủ tục cơ bản, chẳng hạn như size,, empty, p y, clear ((chúng g thườngg là các câu lệnh ệ một ộ dòng), back, pop_back, và cả push_back Thủ tục push_back sẽ gọi reserve nếu kích thước và dung lượng là như nhau nhau 6 Vector sẽ cung cấp sự hỗ trợ cho iterator và const_iterator, và các phương thức begin và end liên quan Vũ Anh... sau đó phải được giải phóng bằng ằ delete() Khối bộ nhớ không thể thay đổi kích thước được ( h (nhưng một khối mớii và lớn l có thể hể được đ lấy lấ ra và được khởi tạo bằng khối cũ, và sau đó khối cũ có thể được giải phóng) phóng) Vũ Anh Dũng - Khoa CNTT 26 Cài đặt Vector 1 Vector sẽ duy trì mảng gốc (bằng một biến con trỏ trỏ tới khối bộ nhớ được cấp phát), dung lượng mảng và số mục hiện hiệ... chép và toán tử =,, và sẽ cungg cấpp một ộ hàm hủy y 3 Vector sẽ cung cấp một thủ tục resize sẽ thay đổi (thường là thành một con số lớn hơn) kích thước của V t và một Vector ột thủ tục t reserve sẽẽ thay th đổi (thường (th ờ là thành thà h một con số lớn hơn) dung lượng của Vector Dung lượng được thay đổi bằng cách giành lấy một khối bộ nhớ mới của mảng gốc, sao chép khối cũ vào trong khối mới, và. .. ở cuối vector vector Vũ Anh Dũng - Khoa CNTT 12 List Lợi thế của việc sử dụng list là việc chèn thêm mục mới và việc loại bỏ các mục hiện có là chi phí thời gian thấp Bất lợi là danh sách không dễ dàng có thể đánh chỉ số Vũ Anh Dũng - Khoa CNTT 13 Vector và List trong STL Cả vector và list đều có một số phương thức chung : int size( ): trả về kích thước hiện tại của ợ g chứa(container) (... chứa(container) ( ) đối tượng void clear( ): xóa toàn bộ container bool empty( ): trả về true nếu đối tượng chứa không bao chứa phần tử nào, và false nếu ngược lại Vũ Anh Dũng - Khoa CNTT 14 Vector và List trong STL void push_back( const Object & x ): thêm x vào cuối danh sách void pop_back( ): loại bỏ đối ố tượng ở cuối ố danh sách const Object & back( ) const: trả về đối tượng ở cuối của danh... ổ trả vềề một tham chiếu ế cũng được cung cấp) Vũ Anh Dũng - Khoa CNTT 15 Vector và List trong STL Hai phương thức sau đây chỉ được cung cấp cho list (nối kép): void push_front( const Object & x ): thêm x vào đầu danh sách void pop_front ( ): loại bỏ đối tượng ở đầu của danh sách Vũ Anh Dũng - Khoa CNTT 16 Vector và List trong STL Các phương thức của Vector: v.[idx]: [ ] trả về đối tượng... là thêm và loại sách (hoặc vector hoặc list) iterator insert(iterator pos, const Object &x): thêm x vào danh sách, trước vị trí được đưa ra bởi iterator pos iterator erase( iterator pos ): loại bỏ đối tượng ở vị trí được cho bởi iterator, trả vềề iterator là vị trí tiếp ế theo Vũ Anh Dũng - Khoa CNTT 21 Iterator Ba thao tác phổ biến nhất đòi hỏi các ạ bỏ khỏi danh iterator đó là thêm và loại... dưới dạng ạ g các toán tử được nạp chồng chẳng hạn như =, ==, !=, và ++ 4 Lớp iterator, nó trừu tượng hóa khái niệm vị trí, và là public nested class iterator có chức năng gg giốngg với const_iterator,, ngoại g ạ trừ toán tử * trả về một tham chiếu tới mục đang được xem, thay vì một tham chiếu hằng tới mục đó Một vấn đề quan trọng về mặt kỹ thuật đó là một iterator có thể được sử dụng trong bất cứ thủ