Đị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ị
45 trang |
Chia sẻ: lylyngoc | Lượt xem: 1894 | Lượt tải: 2
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