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

cấu trúc dữ liệu danh sách liên kết linked list

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 (291.89 KB, 45 trang )

Chương 4

Danh sách liên kết
(Buổi 6, 7)


Nội dung
Danh sách liên kết đơn (singly-linked list) và
các tác vụ
™ Danh sách liên kết vòng (circularly-linked list)
và các tác vụ
™

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
2


Danh sách liên kết
Phần này giới thiệu loại thứ hai của danh sách
tuyến tính là danh sách liên kết (linked list), bao
gồm:
™ Danh sách liên kết đơn (singly-linked list) và
các tác vụ
™ Danh sách liên kết vòng (circularly-linked list)


và các tác vụ

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
3


Danh sách liên kết

Danh sách liên kết

Danh sách
liên kết đơn

Danh sách
liên kết kép

Danh sách
liên kết vòng

Danh sách
đa liên kết

Hình 4.1. Các loại danh sách liên kết

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
4


Danh sách liên kết
™

Các tác vụ của danh sách liên kết
f
f
f
f
f
f
f
f

Khởi tạo danh sách rỗng.
Thêm một phần tử vào danh sách.
Tìm kiếm một phần tử trong danh sách.
Loại bỏ một phần tử của danh sách.
Lấy nội dung của một phần tử.
Duyệt danh sách.

Kiểm tra danh sách rỗng.
Hủy bỏ danh sách.

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
5


Định nghĩa danh sách liên kết
™

Danh sách liên kết (linked list) là một danh
sách mà các phần tử nối kết với nhau dựa vào
vùng liên kết của chúng: vùng liên kết của
phần tử ai chứa tham chiếu đến phần tử ai+1.

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết

6


Định nghĩa danh sách liên kết
item
Info_1



Info_n

Link

(a) Nội dung của phần tử gồm các vùng tin
item
Info_1



Info_n

Link

(b) Nội dung của phần tử là một cấu trúc
Hình 4.2. Phần tử của danh sách liên kết
Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC


Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
7


Định nghĩa danh sách liên kết
first

Nhân
Lễ
Trí
Tín
null

Hình 4.3. Danh sách liên kết – Cấu trúc first
Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
8


Cấu trúc dữ liệu
™


Item
Mỗi phần tử có hai phần:
f Info: chứa thông tin của phần tử, có thể là: các
vùng tin (field), một cấu trúc (structure).
f Link: chứa tham chiếu đến phần tử kế tiếp trong
danh sách.

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
9


Cấu trúc dữ liệu
#include <iostream>
using namespace std;
struct Item;
typedef Item* ref;
struct Item
{
int Info;
ref Link;
};
int main()
{

ref first;
...
return 0;
}
Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
10


Các tác vụ của danh sách
Khởi tạo danh sách rỗng.
™ Thêm một phần tử vào danh sách.
™ Tìm kiếm một phần tử trong danh sách.
™ Loại bỏ một phần tử của danh sách.
™ Lấy nội dung của một phần tử.
™ Duyệt (in) danh sách.
™ Kiểm tra danh sách rỗng.
™ Hủy bỏ danh sách.
™

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015


NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
11


Các tác vụ của danh sách first
void InitFirst(ref& first)
// Tạo danh sách first rỗng
{
first = NULL;
}
bool IsEmpty(ref first)
// Kiểm tra danh sách first rỗng
{
bool kq = first == NULL;
return kq;
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
12



Các tác vụ của danh sách first
void InsertFirst(ref& first, int x)
// Thêm x vào đầu danh sách first
{
ref p = new Item;
p->Info = x;
p->Link = first;
first = p;
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
13


Các tác vụ của danh sách first
void InsertOrder(ref& first, int x)
// Thêm x vào danh sách first đã có thứ tự tăng dần
{
ref tp;
ref p = first;
bool cont = true;
while ((p != NULL) && cont)

if (p->Info < x)
{
tp = p;
p = p->Link;
}
else
cont = false;

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
14


Các tác vụ của danh sách first
// Tạo phần tử mới q
ref q = new Item;
q->Info = x;
if (p == first)
{
// Thêm x vào đầu danh sách
q->Link = first;
first = q;
}
else

{
// Thêm x vào giữa tp và p
q->Link = p;
tp->Link = q;
}
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
15


Các tác vụ của danh sách first
ref Find(ref first, int x)
// Tìm x trong danh sách first chưa có thứ tự
// Trả về địa chỉ của phần tử tìm thấy
{
ref p = first;
bool found = false;
while ((p != NULL) && ! found)
if (p->Info == x)
found = true;
else
p = p->Link;

return p;
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
16


Các tác vụ của danh sách first
ref FindOrder(ref first, int x)
// Tìm x trong danh sách first đã có thứ tự tăng dần
{
ref p = first;
bool found = false;
while ((p != NULL) && ! found)
if (p->Info < x)
p = p->Link;
else if (p->Info == x)
found = true;
else
p = NULL;
return p;
}


Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
17


Các tác vụ của danh sách first
void Remove(ref& first, int x)
// Tìm và bỏ x trong danh sách first chưa có thứ tự
{
ref tp;
ref p = first;
bool found = false;
while ((p != NULL) && ! found)
if (p->Info == x)
found = true;
else
{
tp = p;
p = p->Link;
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015


NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
18


Các tác vụ của danh sách first
if (found)
{
if (p == first)
// Loại bỏ phần tử đầu tiên
first = p->Link;
else
tp->Link = p->Link;
delete p;
}
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
19



Các tác vụ của danh sách first
void RemoveOrder(ref& first, int x)
// Tìm và bỏ x trong danh sách first đã có thứ tự tăng dần
{
ref tp;
ref p = first;
bool found = false;
while ((p != NULL) && ! found)
if (p->Info < x)
{
tp = p;
p = p->Link;
}
else if (p->Info == x)
found = true;
else
p = NULL;

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
20



Các tác vụ của danh sách first
if (found)
{
if (p == first)
// Loại bỏ phần tử đầu tiên
first = p->Link;
else
tp->Link = p->Link;
delete p;
}
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
21


Các tác vụ của danh sách first
void Display(ref first)
// Duyệt danh sách first
{
ref p = first;
while (p != NULL)
{

cout << p->Info << "
p = p->Link;
}
cout << endl;
}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

";

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
22


Các tác vụ của danh sách first
void Clear(ref& first)
// Hủy bỏ toàn bộ danh sách first
{
ref p = first;
while (p != NULL)
{
first = p->Link;
delete p;
p = first;
}

}

Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
23


Danh sách liên kết head không vòng
Head

Nhân
Lễ
Trí
Tín
null
Hình 4.4. Danh sách liên kết – Cấu trúc head không vòng
Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết

24


Cấu trúc dữ liệu
#include <iostream>
using namespace std;
struct Item;
typedef Item* ref;
struct Item
{
int Info;
ref Link;
};
int main()
{
ref head;
...
return 0;
}
Trường Đại học Bách Khoa Tp.HCM
Khoa Khoa học và Kỹ thuật Máy tính
© 2015

NGUYỄN TRUNG TRỰC

Cấu trúc dữ liệu và Giải thuật
Chương 4. Danh sách liên kết
25



×