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

Kiểu dữ liệu trừu tượng – (ADT) doc

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 (284.57 KB, 18 trang )

1
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 1
 Trình bày khái niệm tổng
quát về kiểu dữ liệu
 Cài đặt các kiểu dữ liệu
theo hướng cấu trúc
 Cài đặt các kiểu dữ liệu
theo hướng đối tượng bằng
C++
Kiểu dữ liệu trừu tượng – (ADT)
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 2
Nội dung trình bày
 Kiểu dữ liệu trừu tượng (ADT)
 So sánh một số cài đặt kiểu dữ liệu theo
hướng cấu trúc và cài đặt kiểu dữ liệu theo
hướng đối tượng bằng C++
 Áp dụng Template và việc xây dựng các
kiểu dữ liệu tổng quát
2
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 3
Kiểu dữ liệu trừu tượng (ADT)
 ADT - Abstract Data Type
 Kiểu dữ liệu trừu tượng: T = <V, O>
 V (Values - miền giá trị): tập hợp các giá trị
mà kiểu T có thể nhận
 O (Operators – các thao tác): tập hợp các thao
tác cơ bản được định nghĩa trên V
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 4
Kiểu dữ liệu trừu tượng (ADT)
 Ví dụ:
 T = int:


 V = {-32768 +32767}
 O = {+, -, *, div, mod, >, >=, <, <=, ==, !=,…}
 Có nhiều cách để xây dựng các kiểu dữ
liệu, và không có 1 qui định cụ thể về việc
cần phải xây dựng các thao tác như thế nào
3
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 5
Kiểu dữ liệu trừu tượng (ADT)
 Cài đặt kiểu dữ liệu theo hướng cấu trúc (struct):
 Áp dụng khi chưa có công cụ lập trình hướng đối
tượng
 Xây dựng các thao tác dưới dạng những thủ tục/hàm
 Các thao tác và dữ liệu (V, O) tách rời nhau
 Dữ liệu không được “bảo vệ”, vì ta có thể truy xuất
đến ở bất cứ đâu trong phạm vi mà dữ liệu đã được
định nghĩa
 …
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 6
Kiểu dữ liệu trừu tượng (ADT)
 Cài đặt kiểu dữ liệu theo hướng đối tượng:
 Dữ liệu và thao tác được tích hợp lại
 Dữ liệu được “ẩn” (hiding) và bảo vệ, tránh
những truy xuất trực tiếp
 Chương trình chỉ truy xuất đến dữ liệu thông
qua các thao tác đã được định nghĩa
 …
4
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 7
Kiểu dữ liệu trừu tượng (ADT)
Ưu điểm của cài đặt kiểu dữ liệu bằng hướng đối tượng

Chương
trình
Dữ liệu và
các thao tác
Yêu cầu truy
xuất dữ liệu
Kết quả thực
hiện
Bảo vệ
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 8
Kiểu dữ liệu trừu tượng (ADT)
Truy xuất “tự do” đến dữ liệu
Program
Data
Add
Remove
Find
Display
Program
Yêu cầu
Kết quả
Dữ liệu được “bảo vệ”
Data
Add
Remove
Find
Display
5
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 9
Kiểu dữ liệu trừu tượng (ADT)

 Cài đặt kiểu dữ liệu theo hướng đối
tượng…: (tt)
 Có thể “che dấu” những thao tác xử lý cục
bộ, giúp đơn giản hoá việc sử dụng bằng cách
chỉ cung cấp cho người dùng những thao tác
thực sự cần thiết
 Nâng cao tính “module hoá” của chương trình
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 10
Kiểu dữ liệu trừu tượng (ADT)
Che dấu các thao tác xử lý cục bộ
6
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 11
So sánh một số cài đặt kiểu dữ liệu…
 Danh sách liên kết (Linked-list)
 Ngăn xếp (Stack)
 Cây nhị phân tìm kiếm (BST)
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 12
So sánh một số cài đặt kiểu dữ liệu…
Danh sách liên kết (Linked-list)
7
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 13
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng cấu trúc
typedef struct tagNODE {
INFO data;
tagNODE *pNext;
} NODE;
// Quản lý danh sách bằng con trỏ đầu và cuối
typedef struct LINKED_LIST {
NODE *pHead;

NODE *pTail;
unsigned int Count; // số nút trong danh sách
}
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 14
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng cấu trúc … (tt)
// Xây dựng các thao tác cơ bản
void CreateEmptyList(LINKED_LIST &list);
int IsEmptyList(const LINKED_LIST &list);
int CountNode(const LINKED_LIST &list);
int InsertNode(LINKED_LIST &list, int index,
INFO newdata);
int DeleteNode(LINKED_LIST &list, NODE *pPrev,
NODE *pCurr);
void TraverseList(const LINKED_LIST &list);
NODE *FindNode(const LINKED_LIST &list, <KeyType> key);
8
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 15
So sánh một số cài đặt kiểu dữ liệu…
Cài đặt danh sách liên kết theo hướng đối tượng
Chương trình
sử dụng List
Dữ liệu của List
Gọi thao
tác
Kết quả
Interface
Create
Insert
Traverse

Delete
Find
Client
Server
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 16
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng đối tượng
class LINKED_LIST {
private:
struct NODE // 1 nút trong danh sách
{
INFOdata;
NODE *pNext; // trỏđến nút kế tiếp
};
unsigned int Count; // Số nút trong danh sách
NODE *pHead;
NODE *pTail;

9
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 17
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng đối tượng…(tt)
public:
// constructors và destructor:
LINKED_LIST();
LINKED_LIST(const LINKED_LIST &aList);
~List();
// các thao tác
int IsEmpty() const;
int Count() const;

int Insert(int index, INFO newdata);
int Delete(NODE *pPrev, NODE *pCurr);
void Traverse();
NODE *Find(<KeyType> key);
} // end class
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 18
So sánh một số cài đặt kiểu dữ liệu…
Ngăn xếp (Stack)
10
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 19
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng cấu trúc (dùng mảng)
typedef struct STACK {
int *StkArray; // mảng chứa các phần tử
int StkMax; // số phần tử tối đa
int StkTop; // vị trí đỉnh Stack
};
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 20
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng cấu trúc (dùng danh sách liên kết)
// Khai báo cấu trúc 1 phần tử trong Stack
typedef struct tagSTACK_NODE {
int Data;
tagSTACK_NODE *pNext;
} STACK_NODE;
// Khai báo cấu trúc Stack
typedef struct STACK {
int StkCount;
STACK_NODE *StkTop;
}

11
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 21
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng cấu trúc
// - Định nghĩa các thao tác
int InitStack(STACK &s, int MaxItems);
int IsEmpty(const STACK &s);
int IsFull(const STACK &s);
int Push(STACK &s, int newitem);
int Pop(STACK &s, int &outitem);
int StackTop(const STACK &s, int &outitem);
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 22
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng đối tượng (dùng mảng)
class STACK {
private:
int *StkArray;
int StkMax;
int StkTop;
int IsEmpty();
int IsFull();

12
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 23
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng đối tượng (dùng mảng)…(tt)
public:
// constructors và destructor
STACK(int MaxItems = N);
STACK(const STACK &aStack);

~STACK();
// các thao tác
int Push(int newitem);
int Pop(int &outitem);
int Top(int &outitem);
}
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 24
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng đối tượng (dùng linked-list)
class STACK {
private:
struct NODE // 1 nút trong stack
{
int data;
NODE *pNext; // trỏđến nút kế tiếp
};
unsigned int Count; // Số nút trong stack
NODE *pHead;
public:
// các thao tác tương tự như cách dùng mảng
}
13
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 25
So sánh một số cài đặt kiểu dữ liệu…
Cây nhị phân tìm kiếm (BST)
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 26
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng cấu trúc
typedef struct tagBT_NODE {
int Data;

tagBT_NODE *pLeft; // con trỏ đến nút con trái
tagBT_NODE *pRight; // con trỏ đến nút con phải
} BT_NODE; // cấu trúc 1 nút
typedef struct BIN_TREE {
int Count; // Số nút trong cây
BT_NODE *pRoot; // con trỏ đến nút gốc
}; // cấu trúc cây nhị phân tìm kiếm
14
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 27
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng cấu trúc…(tt)
void BSTCreate(BIN_TREE &t);
int BSTIsEmpty(const BIN_TREE &t);
BT_NODE *BSTSearch(const BT_NODE *pCurr, int Key);
int BSTInsert(BT_NODE *&pCurr, int Key);
void _Delete(BT_NODE *&pCurr);
BT_NODE *_SearchStandFor(BT_NODE *&p,
BT_NODE *pCurr);
int BSTDelete(BT_NODE *&pCurr, int Key);
void BSTNLR(const BT_NODE *pCurr);
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 28
So sánh một số cài đặt kiểu dữ liệu…
Cài đặt BST bằng hướng đối tượng
15
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 29
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng đối tượng
class BST {
private:
struct NODE // 1 nút trong cây

{
int Data;
NODE *pLeft; // trỏđến nút con trái
NODE *pRight; // trỏđến nút con phải
};
unsigned int Count; // Số nút trong cây
NODE *pRoot;
void _Delete(NODE *&pCurr);
NODE *_SearchStandFor(NODE *&p, NODE *pCurr);

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 30
So sánh một số cài đặt kiểu dữ liệu…
// Cài đặt theo hướng đối tượng…(tt)
public:
BST();
~BST();
int IsEmpty();
NODE *Search(const NODE *pCurr, int Key);
int Insert(NODE *&pCurr, int Key);
int Delete(NODE *&pCurr, int Key);
void NLR(const NODE *pCurr);
}
16
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 31
So sánh một số cài đặt kiểu dữ liệu…
Nhận xét ?
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 32
Áp dụng Template và việc xây dựng các
kiểu dữ liệu tổng quát
 Vấn đề:

 Ta muốn sử dụng cấu trúc Stack với các kiểu
dữ liệu khác nhau: int, char, float,…
 Tất cả các thao tác căn bản không thay đổi
 Nếu xây dựng theo hướng cấu trúc…
 …Ta phải xây dựng nhiều kiểu Stack
17
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 33
Áp dụng Template và việc xây dựng các
kiểu dữ liệu tổng quát
 Áp dụng Template và class cho phép xây
dựng các kiểu dữ liệu “tổng quát”
 VD. Linked-List/Stack/Queue/Tree với các
phần tử có thể là kiểu int, char, string,
struct XYZ,…
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 34
Áp dụng Template và việc xây dựng các
kiểu dữ liệu tổng quát
// Xây dựng template class STACK
template <class T> class STACK {
private:
T *StkArray;
int StkMax, StkTop;
int IsEmpty();
int IsFull();
public:
STACK(int MaxItems = N);
~STACK();
int Push(T newitem);
int Pop(T &outitem);
int Top(T &outitem);

}
18
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 35
Áp dụng Template và việc xây dựng các
kiểu dữ liệu tổng quát
// Sử dụng STACK
// với các kiểu dữ liệu khác nhau
STACK <int> intStack;
STACK <char> chrStack(1000);
STACK <float> fltStack(50);
Thanks for your attention

×