Tải bản đầy đủ (.pptx) (56 trang)

CẤU TRÚC dữ LIỆU TRONG c (NGÔN NGỮ lập TRÌNH 2 SLIDE)

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 (364.57 KB, 56 trang )

NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Chương 3: Cấu trúc dữ liệu trong C#

1

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Cấu trúc dữ liệu trong C#

I.
II.
III.

Lập trình tổng quát trong C#
Một số cấu trúc dữ liệu trong C#
Các cấu trúc tập hợp trong C#

2


Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Lâp trình tổng qt trong C#

1. Giới thiệu lập trình tổng quát (Generic Programming)
2. Lớp tổng quát (Generic Class)
3. Phương thức tổng quát (Generic Method)
4. Cấu trúc tổng quát (Generic Struct)

3

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Giới thiệu


Tổng qt hóa chương trình để có thể hoạt động với các kiểu dữ liệu khác nhau, kể cả các kiểu dữ liệu trong tương lai
(thuật tốn đã xác định).

Ví dụ, kiểu ngăn xếp
– C: dùng con trỏ void
– C++: dùng template
– Java 1.5: Generics
– C#: Generics
– (generics [C#], vs. C++ templates)

4

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Generic trong .NET 2.0

Type Safety: Các ngôn ngữ .net (C#, C++,...) đều là những ngơn ngữ được định kiểu mạnh, có nghĩa là bạn phải khai báo
biến rõ ràng trước khi sử dụng.

Generic là gì? Generic cho phep chung ta định kiểu an toàn (type safety). Generic cho phep ta tạo ra môt câu truc dữ liêu

mà khơng cần phải xác định đó là kiểu dữ liêu gì. Tuy nhiên khi câu truc dữ liêu này được sử dụng, trình biên dịch phải đảm
bảo răng kiểu dữ liêu được sử dụng với nó là kiểu an toàn. Generic cũng tương đương vơi Template trong C++ tuy nhiên
viêc sử dụng Generic trong .net dê dàng hơn nhiều so với Template.

5

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Ý nghĩa

Lập trình tổng qt cho phép bạn trì hỗn kiểu dữ liệu với các thành phần của lớp hay phương thức cho đến khi nó thực
sự được sử dụng trong chương trình. Nói cách khác, Generics cho phép bạn viết lớp hay phương thức có thể làm việc
với bất kỳ kiểu dữ liệu nào.

Khi trình biên dịch gọi đến constructor hoặc phương thức của lớp, nó sẽ tự động sinh code để xử lý cho kiểu dữ liệu cho
phù hợp.

6

Bộ môn CNPM – Khoa CNTT.



NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ
using System;

Ví dụ
public T getItem(int index)
{

using System.Collections.Generic;

return array[index];

 
namespace GenericApplication

}

{

public void setItem(int index, T value)
public class MyGenericArray<T>

{


{

array[index] = value;
private T[] array;
public MyGenericArray(int size)

}
}

{
array = new T[size + 1];
}

7

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Ví dụ

class Tester
{


intArray.setItem(c, c*5);
}

static void Main(string[] args)

//retrieving the values

{

for (int c = 0; c < 5; c++)
//declaring an int array

{

MyGenericArray<int> intArray = new
MyGenericArray<int>(5);
//setting values

Console.Write(intArray.getItem(c) + " ");
}
Console.WriteLine();

for (int c = 0; c < 5; c++)
{

8

Bộ môn CNPM – Khoa CNTT.



NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ
//declaring a character array

Ví dụ
//retrieving the values

MyGenericArray<char> charArray = new

for (int c = 0; c< 5; c++)

MyGenericArray<char>(5);

{

//setting values

Console.Write(charArray.getItem(c) + " ");

for (int c = 0; c < 5; c++)

}

{


Console.WriteLine();
charArray.setItem(c, (char)(c+97));

Console.ReadKey();

}

}

//retrieving the values

}
}

9

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Features of Generics


Using generics is a technique that enriches your programs in the following ways:
It helps you to maximize code reuse, type safety, and performance.
You can create generic collection classes. The .NET Framework class library contains several new generic collection classes in
the System.Collections.Generic namespace. You may use these generic collection classes instead of the collection classes in
the System.Collectionsnamespace.

You can create your own generic interfaces, classes, methods, events and delegates.
You may create generic classes constrained to enable access to methods on particular data types.
You may get information on the types used in a generic data type at run-time by means of reflection.

10

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Generic Class

Generic classes have type parameters. Separate classes, each with a different field type in them, can be
replaced with a single generic class. The generic class introduces a type parameter. This becomes part of the class
definition itself.

11


Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Generic Class - Example

class Test<T>

class Program

{

{
T _value;

static void Main()
{

public Test(T t)

// Use the generic type Test with an int type parameter.


{

Test<int> test1 = new Test<int>(5);

// The field has the same type as the parameter.

// Call the Write method.

this._value = t;

test1.Write();

}
// Use the generic type Test with a string type parameter.
public void Write()

Test<string> test2 = new Test<string>("cat");

{

test2.Write();

Console.WriteLine(this._value);
}
}

Bộ môn CNPM – Khoa CNTT.

}
}


12


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Generic methods

In the previous example, we have used a generic class; we can declare a generic method with a type parameter.
A generic method is a template of a method that takes a number of type parameters
Có thể khai báo phương thức tổng quát trong cả lớp non-generic và lớp generic.

13

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

class Program

Generic methods - Example

Console.WriteLine("Char values before calling swap:");

{

Console.WriteLine("c = {0}, d = {1}", c, d);
static void Swap<T>(ref T lhs, ref T rhs)

//call swap

{

Swap<int>(ref a, ref b);
T temp;

Swap<char>(ref c, ref d);

temp = lhs;

//display values after swap:

lhs = rhs;

Console.WriteLine("Int values after calling swap:");

rhs = temp;


Console.WriteLine("a = {0}, b = {1}", a, b);

}

Console.WriteLine("Char values after calling swap:");

static void Main(string[] args)

Console.WriteLine("c = {0}, d = {1}", c, d);

{

Console.ReadKey();
}

int a, b; char c, d; a = 10; b = 20; c = 'I';d = 'V';
//display values before swap:

}

Console.WriteLine("Int values before calling swap:");
Console.WriteLine("a = {0}, b = {1}", a, b);

14

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ

NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Generic struct rất giống với generic class.
Cụ thể ta xem xét qua ví dụ sau:

Generic struct
internal class MainClass
{
private static void Main()

internal struct GenericStruct<T>

{

{

GenericStruct<int> IntData = new GenericStruct<int>(10);
private T _Data;
public GenericStruct(T value)

GenericStruct<string> StringData = new
GenericStruct<string>("str");
Console.WriteLine("IntData    = {0}", IntData.Data);

{_Data = value;}


Console.WriteLine("StringData = {0}", StringData.Data);
}

public T Data
}

{
get { return _Data; }
set { _Data = value; }
}
}

15

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Constraints

Ràng bc tham sơ
Generic cho ta viết môt lớp mà không cần xác định kiểu dữ liêu cụ thể, nhưng vân cho phep ngươi sử dụng lớp đó chi ra kiểu dữ li êu cụ thể se
sử dụng. Điều này tạo ra sư linh hoạt băng cách thay thế môt sô ràng buôc về kiểu mà có thể được sử dụng trong các tham sô.

public static T Max<T> (T op1, T op2) where T : IComparable
{
    if (op1.CompareTo(op2) < 0)
   

return op1;

    return op2;
}

Trong ví dụ đã chi ra ràng buôc mà kiểu được sử dụng cho kiểu tham sô phải thưc thi giao diên IComparable.

16

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ

Constraints

Cac kiêu răng bc co thê sư dung.
where T : struct – T là câu truc (value type)
where T : class – T là lớp (reference type)

where T : new() - yêu cầu T phải có một constructor khơng tham sơ. Khi có nhiều ràng buộc thì new() phải ở ci cùng.
where T : class_name - tên lớp mà tham sô T phải thừa kế
where T : interface_name – tên giao diên mà tham sơ T phải thưc thi.
Cũng có thể sử dụng kết hợp nhiều răng buôc như where T : IComparable, new().

17

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Giới thiệu LTTQ
Constraint

where T: struct

where T : class

where T : new()

where T : <base class name>

where T : <interface name>

where T : U


Constraints
Description

The type argument must be a value type. Any value type except Nullable can be specified. See Using Nullable Types (C# Programming Guide) for
more information.

The type argument must be a reference type, including any class, interface, delegate, or array type.

The type argument must have a public parameterless constructor. When used in conjunction with other constraints, the new() constraint must be
specified last.

The type argument must be or derive from the specified base class.

The type argument must be or implement the specified interface. Multiple interface constraints can be specified. The constraining interface can also
be generic.

The type argument supplied for T must be or derive from the argument supplied for U. This is called a naked type constraint.

18

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22


Giới thiệu LTTQ

Constraints

class C<S,T>: D
where T: A, ICloneable
where S: B {
...
}
class E<T>: D
where T: class{
...
}
class F<T>: D
where T: struct{
...
}
class G<T>: D
where T: new(){ ...
}
19

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22


Một số cấu trúc dữ liệu

I.
II.

Stack
queue

20

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Một số cấu trúc dữ liệu

Stack

Stack là một cấu trúc theo kiểu LIFO (Last In First Out), phần tử vào sau cùng sẽ được lấy ra trước.
Hai thao tác cơ bản trên Stack
Chèn phần tử: Luôn chèn vào đỉnh Stack (push)
Lấy ra phần tử: Luôn lấy ra từ đỉnh Stack (pop)
Lớp Stack thuộc namespace System.Collections, biểu diễn ngăn xếp (LIFO) các đối tượng non – generic. Để sử dụng kiểu
generic dùng System.Collections.Generic.Stack<T>.


Lớp Stack hiện thực các giao diện ICollection, IEnumerable, ICloneable.

21

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Một số cấu trúc dữ liệu

Stack - Example

namespace DataStructures
{
class Program
{
static void Main(string[] args)
{
int[] a = { 10, 20, 30 };
Stack s = new Stack(a);
s.Push(1);
s.Push("abccd");
Console.WriteLine(s.Count);
Console.ReadLine();


}
}
}

22

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Một số cấu trúc dữ liệu

Stack – Lưu ý

Capacity là số lượng các phần tử mà stack có thể chứa. Stack có thể chứa các phần tử có kiểu dữ liệu khác nhau. Thuộc tính
Count để chỉ số phần tử hiện trong Stack.

Khi 1 phần tử được thêm vào (Push), capacity tự động tăng, và tổ chức lại bộ nhớ. Nếu Count< Capacity thì Push có số phép toán
là O(1), ngược lại là O(n) (n = Count). Pop có số phép tốn là O(1).

Stack cho phép chèn phần tử null, hoặc các phần tử có giá trị bằng nhau.

23


Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Một số cấu trúc dữ liệu

Stack class in C#

Contructor
Tên

Mô tả

Stack()

Khởi tạo Stack trông, capacity ban đầu mặc định.

Stack(ICollection)

Khởi tạo Stack chứa các phần tử copy từ một tập hợp (mảng), capacity ban đầu băng sô phần tử
được copy.

Stack(Int32)

Khởi tạo Stack trông, capacity ban đầu băng giá trị truyền vào. (Dùng Contructor này tôt nhât)

WHY?

24

Bộ môn CNPM – Khoa CNTT.


NGƠN
NGƠN NGỮ
NGỮ LẬP
LẬP TRÌNH
TRÌNH 22

Một số cấu trúc dữ liệu

Stack class in C#

Methods
Tên

Mô tả

Clear

Removes tât cả các đôi tượng trong Stack.

Clone

Tạo bản sao của Stack.


Contains

Xác định xem phần tử có trong Stack.

CopyTo

Copy stack ra mảng 1 chiều, bắt đầu từ vị trí chi định. (Nếu mảng chứa các KDL khác nhau ?)

Peek

Trả về đôi tượng trên đinh Stack không remove nó khỏi stack.

Pop

Remove và trả về đơi tượng trên đinh stack.

Push

Chèn một đôi tượng vào đinh stack

ToArray

Copy stack ra một mảng mới.
25

Bộ môn CNPM – Khoa CNTT.


×