Tải bản đầy đủ (.pdf) (32 trang)

Bài giảng cấu trúc dữ liệu và giải thuật chương 3 ths nguyễn thị khiêm hòa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (815.75 KB, 32 trang )

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


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
2


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
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


Mảng một chiều


Khai báo



Khởi tạo



Truy xuất: Chỉ mục đối tượng

Tìm kiếm
Sắp xếp
Tính toán
Đếm



Các thuật toán:









Kỹ thuật

• Lính canh

• Cờ hiệu
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
7


Bài tập
Thực hiện




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.

45 min
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
8



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
9


Mảng đa chiều cùng kích thước






Khai báo
<kiểu dữ liệu> [ , ] <tên biến mảng>;

 Ví dụ: int [ ] array;
Khởi tạo
<tên biến mảng> = new <kiểu DL> [<số dòng>,<số cột>];
 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
10


Mảng đa chiều khác kích thước








Khai báo
<kiểu dữ liệu> [ ][ ] <tên biến mảng>;
 Ví dụ: int [ ][ ] array;
Khởi tạo
<tên biến mảng> = new <kiểu DL> [<số dòng>] [ ];
 Ví dụ: int [ ][ ] array = new int [ 3 ] [ ];
Khởi tạo từng dòng
<tên biến mảng> [<vị trí dòng>] = new <kiểu DL> [<số cột>];

 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
11


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
IEnumerable
IComparer

Mục đích
Liệt kê thông qua một tập hợp
bằng cách sử dụng foreach.
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
12


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
13


IComparer


Định nghĩa cách thức so sánh cho đối tượng

class <Tên_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
14


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
15



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
16


IComparer


Định nghĩa nhiều cách thức so sánh cho đối tượng

class <Tên_class_con>: Icomparer

{
private <Tên_class>.<Tên_class_con>.ComparisionType CmpType;
public enum ComparisionType
{
field1,
field2,

};
public <Tên_class>.<Tên_class_con>.ComparisionType CType
{
get {return CmpType;}
set {CmpType = value;}
}
//Xem tiếp trang Khoa
sauCông nghệ Thông tin - Đại học Ngân hàng TP.HCM
17


IComparer
public int Compare(<Tên_class> lhs, <Tên_class> 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
18


IComparer

//Định nghĩa class chính
class <Tên_class>: Icomparable
{ …
public static <Tên_class_con> GetComparer()
{
return new <Tên_class>.<Tên_class_con>;
}
public int CompareTo(<Tên_class> 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
19


IComparer
//Định nghĩa class chính
public int CompareTo(<Tên_class> rhs,
<Tên_class>.<Tên_class_con>.ComparisionType w)
{
switch(w)
{
case <Tên_class>.<Tên_class_con>.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
20


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
21


Danh sách liên kết
Địa chỉ liên kết

Data



Thành

phần dữ
liệu

Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
22


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
23



Danh sách liên kết
 Thêm một

phần tử

 Xóa

một phần tử

 Liệt



 Tính toán

Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
24


Danh sách liên kết
public class Node<T>: IComparable
where T: IComparable<T>
{
private T data;
private Node<T> 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
25


×