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

Danh sách liên kết kỹ thuật lập trình đại học KHTN

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 (1.13 MB, 69 trang )

Trường Đại học Khoa học Tự nhiên
Khoa Công nghệ thông tin

KỸ THUẬT LẬP TRÌNH

DANH SÁCH LIÊN KẾT

1


Nội dung trình bày
Giới thiệu

Các loại danh sách liên kết
Các thao tác trên danh sách liên kết
So sánh danh sách liên kết và mảng

HCMUS - 2009

2


Giới thiệu
Mảng: cấu trúc dữ liệu quen thuộc

 Số lượng phần tử cố định (tĩnh)
 Cấp phát vùng nhớ liên tục

 Truy xuất phần tử thông qua chỉ số

HCMUS - 2009



3


Giới thiệu
Đánh giá thao tác trên mảng:

 Truy xuất phần tử?
 Cập nhật?

 Chèn phần tử?
 Xoá phần tử?
HCMUS - 2009

4


Giới thiệu
Thực tế:
 Không xác định được chính xác số lượng
phần tử
• Danh sách bệnh nhân: tăng/giảm.
• Danh sách sinh viên: tăng/giảm.

 Vùng nhớ thay đổi trong quá trình sử dụng
=> Không đủ vùng nhớ cấp phát liên tục.

=> Cấu trúc dữ liệu động đáp ứng nhu cầu
HCMUS - 2009


5


Các loại danh sách liên kết
 Danh sách liên kết đơn
 singly linked list
 uni-directional linked list

 Danh sách liên kết kép
 doubly linked list
 bi-directional linked list

 Danh sách liên kết vòng
 circularly linked list
 ring list

HCMUS - 2009

6


Các loại danh sách liên kết

Danh sách liên kết đơn
Mỗi phần tử có MỘT liên kết đến MỘT phần tử
khác (phần tử đứng sau).

HCMUS - 2009

7



Các loại danh sách liên kết

Danh sách liên kết kép
Mỗi phần tử có HAI liên kết đến hai phần tử
đứng sau và trước nó.

HCMUS - 2009

8


Các loại danh sách liên kết

Danh sách liên kết vòng
Có mối liên kết giữa phần tử cuối và phần tử
đầu

HCMUS - 2009

9


Phần tử trên danh sách liên kết
Phần tử (Node, Element)
 Phần tử = Dữ liệu + Liên kết

 Ví dụ:
• Phần tử có 1 liên kết


• Phần tử có 2 liên kết

HCMUS - 2009

10


Phần tử trên danh sách liên kết

Ví dụ

Ví dụ:
 Phần tử có dữ liệu gồm 1 thành phần

 Phần tử có dữ liệu gồm 3 thành phần

 Phần tử có dữ liệu gồm 1 cấu trúc

HCMUS - 2009

11


Phần tử trên danh sách liên kết

Cài đặt

Phần tử có dữ liệu gồm 1 thành phần


struct NODE
{
};

HCMUS - 2009

12


Phần tử trên danh sách liên kết

Cài đặt

Phần tử có dữ liệu gồm 1 thành phần

struct NODE
{
float number;
NODE *pNext;
/* pointer to next element in list */
};
HCMUS - 2009

13


Phần tử trên danh sách liên kết

Cài đặt


Phần tử có dữ liệu gồm 3 thành phần

struct NODE
{
};

HCMUS - 2009

14


Phần tử trên danh sách liên kết

Cài đặt

 Phần tử có dữ liệu gồm 3 thành phần

struct NODE
{
char name[50];
float number;
int id;
NODE *pNext;/*pointer to next element*/
};

HCMUS - 2009

15



Phần tử trên danh sách liên kết

Cài đặt

Phần tử có dữ liệu gồm 1 cấu trúc
struct DATA
{
};
struct NODE
{

};

HCMUS - 2009

16


Phần tử trên danh sách liên kết

Cài đặt

 Phần tử có dữ liệu gồm 1 cấu trúc

struct DATA
{
char name [50];
float number;
int id;
};

struct NODE
{
DATA data;
NODE *pNext; /* pointer to next element in list */
};

HCMUS - 2009

17


Phần tử trên danh sách liên kết

Cài đặt

Viết cài đặt cấu trúc phần tử trong trường hợp

HCMUS - 2009

18


Tổ chức danh sách liên kết

Tổ chức

Mỗi danh sách liên kết bao gồm:
 Con trỏ đến phần tử đầu (hoặc/và cuối) danh
sách.
 (Các) phần tử trên danh sách

• Dữ liệu
• Các mối liên kết

HCMUS - 2009

19


Tổ chức danh sách liên kết

Tổ chức

pHead

pHead
HCMUS - 2009

pTail
20


Tổ chức danh sách liên kết

Lưu ý

Khởi tạo:
Con trỏ đầu/cuối danh sách chưa trỏ đến phần
tử nào
• pHead = NULL
• pTail = NULL


HCMUS - 2009

21


Tổ chức danh sách liên kết

Danh sách liên kết đơn
 Cấu trúc phần tử:
struct NODE
{
float number;
NODE *pNext;
};

 Tạo một phần tử mới: NODE* CreateNode(float Data)
 Phần tử đầu danh sách:
NODE *pHead;
pHead = NULL;

HCMUS - 2009

22


Tổ chức danh sách liên kết

Danh sách liên kết đơn
 Tạo một phần tử mới

NODE* CreateNode (float Data)
{
NODE *pNode;
pNode = new NODE;
if (pNode == NULL)
return NULL;
pNode->number = Data;
pNode->pNext = NULL;
return pNode;
}

HCMUS - 2009

23


Tổ chức danh sách liên kết

Danh sách liên kết kép
 Cấu trúc phần tử:
struct NODE
{
float number;
NODE *pPrevious, *pNext;
};

 Tạo một phần tử mới: NODE* CreateNode(float Data)
 Phần tử đầu danh sách:
NODE *pHead;
pHead = NULL;


HCMUS - 2009

24


Tổ chức danh sách liên kết

Danh sách liên kết kép
 Tạo một phần tử mới
NODE* CreateNode (float Data)
{
NODE *pNode;
pNode = new NODE;
if (pNode == NULL)
return NULL;
pNode->number = Data;
pNode->pPrevious = NULL;
pNode->pNext = NULL;
return pNode;
}

HCMUS - 2009

25


×