Chương 3: Danh sách

 Danh sách và các phép toán trên danh sách  Danh sách đặc  Danh sách liên kết

pdf32 trang | Chia sẻ: lylyngoc | Lượt xem: 1696 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Chương 3: Danh sách, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM Chương 3: Danh sách Giảng viên: Ths. Nguyễn Thị Khiêm Hòa Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 2 Nội dung  Danh sách và các phép toán trên danh sách  Danh sách đặc  Danh sách liên kết Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 3 Mục tiêu  Hiểu rõ về CTDL danh sách  Phương pháp xây dựng lớp đối tượng danh sách đặc, danh sách liên kết và các kiểu dữ liệu đặc biệt trên C#  Đánh giá ưu khuyết điểm của giải thuật trên từng loại danh sách để chọn kiểu dữ liệu phù hợp Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 4 Danh sách  Định nghĩa Danh sách là dãy hữu hạn có thứ tự của các phần tử thuộc một lớp đối tượng.  Ký hiệu: L(a1, a2, …, an)  Danh sách tuyến tính là danh sách mà quan hệ lân cận giữa các phần tử được hiển thị Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 5 Danh sách  Tổ chức lưu trữ danh sách trong bộ nhớ  Mảng - Danh sách đặc  Danh sách liên kết – Danh sách động Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 6 Mảng  Tập hợp các phần tử cùng kiểu dữ liệu, nằm liên tiếp trong bộ nhớ  Có chỉ số bắt đầu từ 0  Giá trị mặc định của từng phần tử trong mảng quy định theo từng kiểu đối tượng  Mảng là đối tượng  Kích thước: có thể là 1 hoặc nhiều chiều Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 7 Mảng một chiều  Khai báo  Khởi tạo  Truy xuất: Chỉ mục đối tượng  Các thuật toán:  Kỹ thuật • Tìm kiếm • Tính toán • Sắp xếp • Đếm • Lính canh • Cờ hiệu Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 8 Bài tập  Xây dựng lớp mảng số nguyên, thực hiện việc tính tổng, tổng chẳn, tổng lẻ … trong mảng  Xây dựng lớp Zoo chứa các động vật có trong lớp Animal. Thực hiện 45 min Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 9 Mảng đa chiều  Là mảng một chiều mà mỗi phần tử là một mảng khác  Trên C# hỗ trợ hai kiểu mảng đa chiều:  Mảng đa chiều cùng kích thước (Rectangle)  Mảng đa chiều không cùng kích thước (Jagged Array) Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 10 Mảng đa chiều cùng kích thước  Khai báo [ , ] ;  Ví dụ: int [ ] array;  Khởi tạo = new [,];  Ví dụ: int [ , ] array = new int [ 3, 5 ];  Duyệt mảng: for (int i = 0; i < rows; i++) for (int j = 0; j < columns; j++) Xử_lý A{i,j]; Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 11 Mảng đa chiều khác kích thước  Khai báo [ ][ ] ;  Ví dụ: int [ ][ ] array;  Khởi tạo = new [] [ ];  Ví dụ: int [ ][ ] array = new int [ 3 ] [ ];  Khởi tạo từng dòng [] = new [];  Ví dụ: array[0] = new int [ 3 ];  Truy xuất: Tên_biến_mảng [rows][columns] Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 12 Giao diện tập hợp  .NET cung cấp giao diện chuẩn cho việc liệt kê, so sánh, và tạo tập hợp. Giao diện Mục đích IEnumerable Liệt kê thông qua một tập hợp bằng cách sử dụng foreach. IComparer So sánh giữa hai đối tượng lưu giữ trong tập hợp để sắp xếp các đối tượng trong tập hợp Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 13 IComparer  Cung cấp các phương thức thực hiện việc so sánh và sắp xếp tập hợp. Sort() IComparer IComparable (CompareTo) Object Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 14 IComparer  Định nghĩa cách thức so sánh cho đối tượng class : Icomparable { … public int CompareTo(Object o) { Tên_class r = (Tên_class) o; return this.Tên_Field.CompareTo(r.Tên_Field); } }  Phương thức CompareTo có tham số đối tượng, so sánh với chính nó. Trả về {-1, 0, 1} Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 15 IComparerable public class Employee: IComparable { private int empID; public Employee(int empID) { this.empID = empID;} public int EmpID { get { return empID;} set { empID = value;} } public override string ToString() { return empID.ToString();} public int CompareTo(object o) { Employee r = (Employee) o; return this.empID.CompareTo(r.empID); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 16 IComparerable public class Tester { static void Main() { ArrayList empArray = new ArrayList(); Random r = new Random(); // đưa vào mảng for( int i = 0; i < 5; i++) { empArray.Add( new Employee(r.Next(10)+100)); } // in tất cả nội dung PrintValue(empArray); // sắp xếp lại mảng Employee empArray.Sort(); // hiển thị tất cả nội dung của mảng Employee PrintValue(empArray); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 17 IComparer  Định nghĩa nhiều cách thức so sánh cho đối tượng class : Icomparer { private ..ComparisionType CmpType; public enum ComparisionType { field1, field2, … }; public ..ComparisionType CType { get {return CmpType;} set {CmpType = value;} } //Xem tiếp trang sau Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 18 IComparer public int Compare( lhs, rhs) { return lhs.CompareTo(rhs.CmpType); } }//end class con Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 19 IComparer //Định nghĩa class chính class : Icomparable { … public static GetComparer() { return new .; } public int CompareTo( rhs) { Tên_class r = (Tên_class) rhs; return this.Tên_Field.CompareTo(rhs.Tên_Field); }//Phương thức so sánh mặc định //Xem tiếp trang sau Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 20 IComparer //Định nghĩa class chính public int CompareTo( rhs, ..ComparisionType w) { switch(w) { case ..ComparisionType.field1: return this.field1.CompareTo(rhs.field1); case … } return 0; } //Định nghĩa class con tại đây … }//end class chính Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 21 Danh sách liên kết  Đặt vấn đề:  Thêm phần tử vào mảng, chi phí O(n)  Xóa một phần tử trong mảng, chi phí O(n)  Khó cấp phát Tách các phần tử riêng rẽ, tìm cách liên kết chúng Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 22 Danh sách liên kết Data  Thành phần dữ liệu Địa chỉ liên kết Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 23 Danh sách liên kết  Một dãy tuần tự các nút (Node) liên kết với nhau bằng địa chỉ  Các nút không cần phải lưu trữ liên tiếp nhau trong bộ nhớ  Có thể mở rộng tuỳ ý (chỉ giới hạn bởi dung lượng bộ nhớ)  Thao tác Chèn/Xóa không cần phải dịch chuyển phần tử  Có thể truy xuất đến các phần tử khác thông qua địa chỉ Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 24 Danh sách liên kết  Thêm một phần tử  Xóa một phần tử  Liệt kê  Tính toán Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 25 Danh sách liên kết public class Node: IComparable > where T: IComparable { private T data; private Node next; public Node(T data) { this.data = data; this.next = null; } //Đóng gói DL //các phương thức } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 26 Danh sách liên kết //Đóng gói dữ liệu: Properties public T Data { get{ return this.data;} set{ this.data = value;} } public Node Next { get { return this.next; } set { this.next = value;} } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 27 Danh sách liên kết //các phương thức dùng để so sánh sắp xếp public int CompareTo(Node rhs) { return data.CompareTo(rhs.data); } public bool Equals(Node rhs) { return this.data.Equals(rhs.data); } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 28 Danh sách liên kết public class LinkList where T: IComparable { private Node head; public LinkList() { this.head = null; } //các phương thức } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 29 Danh sách liên kết public void InsertFirst(T data) { if(head == null) head = new Node(data); else { Node node = new Node(data); node.next = head; head = node; } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 30 Danh sách liên kết //In danh sách public void PrintList() { while(head != null) { Console.Write("{0} ", this.head.Data); head = head.Next; } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 31 Danh sách liên kết class Program { static void Main(string[] args) { Random r = new Random(); LinkList intList = new LinkList(); for (int i = 0; i < 10; i++) { int nextInt = r.Next(10); Console.Write("{0} ", nextInt); intList.InsertFirst(nextInt); } Console.WriteLine("\nDanh sach cac so:"); intList.PrintList(); Console.Read(); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 32 Q&A