Chương 6: Mảng, chỉ mục và tập hợp

 Đị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ị

pdf45 trang | Chia sẻ: lylyngoc | Lượt xem: 1706 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Chương 6: Mảng, chỉ mục và tập hợp, để 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 6: Mảng, chỉ mục và tập hợp 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  Mảng  Giao diện tập hợp Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 3 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 4 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 5 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 6 Tạo mảng  Khai báo [ ] ;  Ví dụ: int [ ] array;  Khởi tạo [ ] = new [];  Ví dụ: int[ ] array = new int[5];  Mảng đối tượng [ ] = new [];  Ví dụ: Animal [ ] animals = new Animal [10]; Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 7 Khởi tạo và truy xuất mảng  Có thể dùng dấu { } để khởi tạo giá trị cho các phần tử mảng int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; numbers[4] = 6; string[] animal = {"Mouse", "Cat", "Lion"}; animal[1]= "Elephant"; string someAnimal = animal[2]; Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 8 Câu lệnh foreach  Dùng câu lệnh foreach để lặp lại việc truy xuất từng phần tử trong mảng int[] numbers = {4,5,6,1,2,3,-2,-1,0}; int Tong = 0; foreach (int a in numbers) { Tong += a; } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 9 Truyền tham số mảng vào phương thức  Dùng từ khóa params để truyền tham số mảng public int Sum(params int[] list) { int total = 0; foreach ( int i in list ) { total += i; } return total; } ... int [] pe; ... int value = pe.Sum( 1, 3, 5, 7, 9, 11 ); Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 10 Chỉ mục đối tượng  Dùng từ khóa this với get và set trong properties public class Zoo { private Animal[] theAnimals; public Animal this[int i] { get {return theAnimals[i];} set {theAnimals[i] = value;} } . . . } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 11 Chỉ mục đối tượng public class MyList { private string [] str; private int idx = 0; public string this[int index] { get {return str[index];} set {str[index] = value;} } public MyList(params string[] InitStr) { str = new String[256]; foreach (string s in InitStr) str[idx++] = s; } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 12 Chỉ mục đối tượng public void Add(string st) { if (idx > str.Length) return; else str[idx++] = st; } public int GetNumEntries() { return idx; } }//end class Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 13 Chỉ mục đối tượng public class Test { static void Main() { MyList ml = new MyList("Cau truc du lieu", "CSDL"); ml.Add("Lap trinh huong doi tuong"); ml.Add("Phan tich thiet ke he thong"); string sttest = "Co so du lieu"; ml[1] = sttest; for (int i = 0; i < ml.GetNumEntries();i++) Console.WriteLine("{0}", ml[i]); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 14 Chỉ mục đối tượng Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 15 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 16 Các lớp đối tượng tập hợp (Collections)  Khái niệm  Sử dụng lớp ArrayList, List  Hàng đợi (Queue), ngăn xếp (Stack) Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 17 Khái niệm  Danh sách, hàng đợi, ngăn xếp là một số các CTDL thông thường trong ứng dụng  Danh sách (List): là tập hợp các phần tử truy xuất bởi chỉ mục (index) Ví dụ: mảng; ArrayList Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 18 ArrayList Class  Hạn chế của mảng  Không linh động  Tốn bộ nhớ  Lớp ArrayList cho phép gia tăng số phần tử khi cần  Có thể chứa các phần tử dữ liệu không cùng kiểu. Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 19 ArrayList Class  Khai báo:  Thư viện using System.Collection  ArrayList ArrayList = new ArrayList();  Thư viện System.Collection Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 20 Các thuộc tính của ArrayList  Thuộc tính  Capacity  Count  Ghi chú:  Thuộc tính Capacity có giá trị mặc định là 16, khi số phần tử lớn hơn, Capacity tự động nhân đôi.  Nếu gán giá trị cho Capacity < Count thì sẽ sinh ra lỗi ArgumentOutofRangeException Phương thức ArrayList Class  Add  AddRange  Clear  CopyTo  Remove  RemoveAt  RemoveRange  Sort  BinarySearch  Reverse  TrimToSize Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 21 Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 22 ArrayList Class public class Employee { 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(); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 23 ArrayList Class Class Test { static void main() { ArrayList empArr = new ArrayList(); for(int i=0; i<5; i++) empArr.Add(new Employee(i*5)); for(int i=0; i<empArr.Count; i++) Console.Write(“{0}”,empArr[i].ToString()); Console.WriteLine(“\nempArr.Capacity:{0}”, empArr.Capacity); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 24 ArrayList Class  Kết quả: 0 5 10 15 20 empArr.Capacity: 16 Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 25 List  Là mảng đối tượng không giới hạn số phần tử.  Khai báo List tên_biến = new List;  Ví dụ: List empArray = new List; Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 26 List  Các phương thức:  Add  Clear  Remove  RemoveAt  Sort  BinarySearch  Reverse  Thuộc tính  Capacity  Count Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 27 Hàng đợi (Queue)  Hàng đợi: tập hợp các đối tượng hoạt động theo cơ chế FIFO Ví dụ: hàng đợi lệnh trong hệ điều hành Append Front Take Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 28 Hàng đợi (Queue)  Phương thức  Clear(): Xóa hàng đợi  Dequeue(): Xóa và trả về phần tử đầu tiên  Enqueue(): Thêm một phần tử vào hàng đợi  Peek(): Trả về phần tử đầu tiên nhưng không xóa.  Thuộc tính  Count: Số phần tử hiện tại trong hàng đợi. Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 29 Hàng đợi public class Test { public static void main() { Queue intQueue = new Queue(); for(int i = 0; i < 5; i++) intQueue.Enqueue(i*5); Console.Write(“intQueue values: \t”); PrintValues(intQueue); intQueue.Dequeue(); intQueue.Dequeue(); Console.Write(“intQueue values: \t”); PrintValues(intQueue); intQueue.Peek(); Console.Write(“intQueue values: \t”); PrintValues(intQueue); } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 30 Hàng đợi public static void PrintValue(IEnumerable mc) { Ienumerator myEnumerator = mc.GetEnumerator(); while(myEnumerator.MoveNext()) Console.Write(“{0}\t”, myEnumerator.Current); Console.WriteLine(); } } //end Test Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 31 Ngăn xếp (Stack)  Ngăn xếp: tập hợp các đối tượng hoạt động theo cơ chế LIFO Ví dụ: cơ chế giải thuật đệ quy Top Push Pop Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 32 Ngăn xếp (Stack) Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 33 Ngăn xếp (Stack) Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 34 Ngăn xếp (Stack)  Phương thức  Clear(): Xóa ngăn xếp  Pop(): Xóa và trả về phần tử đầu tiên  Push(): Thêm một phần tử vào ngăn xếp  Peek(): Trả về phần tử đầu tiên nhưng không xóa.  Thuộc tính  Count: Số phần tử hiện tại trong ngăn xếp. Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 35 Ngăn xếp public class Test { public static void main() { Stack intStack = new Stack(); for(int i = 0; i < 8; i++) intStack.Push(i*5); Console.Write(“intStack values: \t”); PrintValues(intStack); intStack.Pop(); intStack.Pop(); Console.Write(“intStack values: \t”); PrintValues(intStack); intStack.Peek(); Console.Write(“intStack values: \t”); PrintValues(intStack); } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 36 Ngăn xếp public static void PrintValue(IEnumerable mc) { Ienumerator myEnumerator = mc.GetEnumerator(); while(myEnumerator.MoveNext()) Console.Write(“{0}\t”, myEnumerator.Current); Console.WriteLine(); } } //end Test Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 37 Bài tập  Sử dụng ngăn xếp để thực hiện đổi một số hệ thập phân sang hệ n (n=2, 4, 6, 8, 16..)  Nhập một dãy số nguyên, in ra dãy theo thứ tự đảo ngược. Thực hiện 30 min Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 38 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 39 IEnumerable  Dùng liệt kê đối tượng thông qua câu lệnh foreach  Phương thức GetEnumerator(): trả về sự thực thi của IEnumerator cho phép liệt kê các phần tử trong tập hợp.  Phương thức MoveNext(): tăng index của tập hợp lên 1 và kiểm tra chỉ mục có vượt quá số phần tử của tập hợp  Thuộc tính Current: dữ liệu tại vị trí hiện hành của tập hợp Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 40 IEnumerable public static void PrintValue(IEnumerable mc) { IEnumerator myEnum = mc.GetEnumerator(); while(myEnum.MoveNext()) Console.Write(“{0}\t”, myEnum.Current); Console.WriteLine(); } } //end Test Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 41 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. Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 42 IComparer static void Main(string[] args) { string[] myArray = {"Dog","Elephant","Cat","Pig", "Bear"}; PrintArray(myArray); Array.Sort(myArray); PrintArray(myArray); Console.ReadLine(); } public static void PrintArray(params string [] list) { for (int i = 0; i < list.Length; i++) Console.WriteLine(" [{0}] : {1}",i,list[i]); Console.WriteLine(); } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 43 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 44 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 45 Q&A
Tài liệu liên quan