Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Chương 2: Các kiểu dữ liệu trừu tượng cơ bản (Basic Abstract Data Types) doc
MIỄN PHÍ
Số trang
162
Kích thước
690.8 KB
Định dạng
PDF
Lượt xem
1993

Chương 2: Các kiểu dữ liệu trừu tượng cơ bản (Basic Abstract Data Types) doc

Nội dung xem thử

Mô tả chi tiết

Chương 2: Các ADTs 1

Chương 2

Các kiểu dữ liệu trừu tượng cơ bản

(Basic Abstract Data Types)

Chương 2: Các ADTs 2

Nội dung

• Danh sách (List) – Cài đặt bằng mảng – Cài đặt bằng con trỏ – Cài đặt bằng con nháy (tham khảo)

• Ngăn xếp (Stack)

• Hàng đợi (Queue)

• Danh sách liên kết kép (Double Linked List) (tham khảo)

Chương 2: Các ADTs 3

• Khái niệm

• Các phép toán

• Cài đặt danh sách (CĐ DS) – bằng mảng  danh sách đặc – bằng con trỏ  danh sách liên kết (Single Linked List)

Danh sách (List)

Chương 2: Các ADTs 4

Khái niệm DS

• Là tập hợp hữu hạn các phần tử có cùng kiểu

• Kiểu chung được gọi là kiểu phần tử (Element Type)

• Thường biểu diễn dưới dạng: a1, a2, ..., an

• Nếu – n=0: danh sách rỗng – n>0: phần tử đầu tiên là a1, phần tử cuối cùng là an

• Độ dài của DS: số phần tử của DS

• Các phần tử trong DS có thứ tự tuyến tính theo vị trí xuất

hiện: ai đứng trước ai+1 (i=1..n-1)

Chương 2: Các ADTs 5

Các phép toán trên DS (1)

Previous(p, L) Trả về vị trí trước phần tử p trong L

Full_List(L) Kiểm tra xem L có đầy hay không

Next(p, L) Trả về vị trí sau phần tử p trong L

End_List(L) Trả về vị trí sau phần tử cuối trong L

First_List(L) Trả về vị trí phần tử đầu tiên trong L

Empty_List(L) Kiểm tra xem L có rỗng hay không

MakeNull_List(L) Khởi tạo danh sách L rỗng

Phép toán Chức năng

Chương 2: Các ADTs 6

Các phép toán trên DS (2)

Read_List(L) Nhập giá trị các phần tử trong L

Truy xuất giá trị phần tử thứ p trong danh

sách L

Retrieve(p, L)

Trả về vị trí của phần tử có nội dung x trong

L, nếu không tìm thấy trả về End_List(L)

Locate(x, L)

Delete_List(p, L) Xóa phần tử tại vị trí p trong L

Hiển thị các phần tử trong L theo thứ tự

xuất hiện

Print_List(L)

Insert_List(x, p, L) Chèn phần tử có nội dung x vào L tại vị trí p

Phép toán Chức năng

Chương 2: Các ADTs 7

Áp dụng

• Thêm phần tử x vào đầu/ cuối L?

• Xóa phần tử ở đầu/ cuối L?

• Truy xuất phần tử ở đầu/ cuối L?

Insert_List(x, First_List(L), L)

Delete_List(First_List(L), L)

Retrieve(First_List(L), L)

Chương 2: Các ADTs 8

Ví dụ

Dùng các phép toán trừu tượng trên danh sách, viết hàm sắp

xếp danh sách theo thứ tự tăng dần

void Sort(List L)

{ Position p,q; //kiểu vị trí của các phần tử

p= First_List(L); // vị trí phần tử ñầu tiên

while (p->Next != End_List(L)) {

q = Next(p,L); // vị trí phần tử sau phần tử p

while (q != End_List(L)) {

if (Retrieve(p, L) > Retrieve(q, L))

Swap(p, q); // hoán ñổi nội dung 2 phần tử

q = Next(q, L);

}

p = Next(p, L);

}

}

Chương 2: Các ADTs 9

CĐ DS bằng mảng (1)

• Vị trí của phần tử trong danh sách:“chỉ số mảng tại vị trí

lưu trữ phần tử + 1”

Vị trí

1

2

3

Last

MaxLength

Chương 2: Các ADTs 10

CĐ DS bằng mảng (2)

• Dùng 1 mảng để lưu trữ liên tiếp các phần tử (Elements)

• Có kiểu phần tử (ElementType) và kiểu vị trí (Position)

xác định

• Phải ước lượng số phần tử tối đa của danh sách

(MaxLength)

• Phải lưu trữ độ dài hiện tại của danh sách (Last)

Chương 2: Các ADTs 11

CĐ DS bằng mảng (3)_Khai báo

#define MaxLength ...

typedef ... ElementType;

typedef int Position;

typedef struct {

ElementType Elements[MaxLength];

Position Last;

} List;

Khai báo khi sử dụng

List L;

Chương 2: Các ADTs 12

CĐ DS bằng mảng (4)_Khởi tạo L rỗng

• Cho độ dài danh sách bằng 0

void MakeNull_List(List *L){

L->Last = 0;

}

Chương 2: Các ADTs 13

CĐ DS bằng mảng (5)_Kiểm tra L rỗng?

• Độ dài danh sách có bằng 0 hay không?

int Empty_List(List L){

return (L.Last == 0);

}

Chương 2: Các ADTs 14

CĐ DS bằng mảng (6)_Kiểm tra L đầy?

• Độ dài danh sách có bằng MaxLength hay không?

int Full_List(List L){

return (L.Last == MaxLength);

}

Chương 2: Các ADTs 15

CĐ DS bằng mảng (7)_Vị trí phần tử đầu tiên

• Vị trí 1

Position First_List(List L){

return 1;

}

Tải ngay đi em, còn do dự, trời tối mất!