Ng dụng của DSLK đối xứng

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 92 - 94)

. Xố nút new_ele; Trả về CurrPtr;

c. ng dụng của DSLK đối xứng

Ta cĩ thể dùng DSLK đối xứng để cài đặt hàng đợi hai đầu (Dequeue – Double ended queue). Tất nhiên, ta cũng cĩ thể biểu diễn Dequeue bằng DSLK

đơn nhưng bất tiện hơn. Hàng đợi hai đầu sẽ được sử dụng trong các thuật tốn tìm kiếm trong lý thuyết đồ thị và trí tuệ nhân tạo.

Hàng đợi hai đầu là danh sách mà việc thêm và hủy đều cĩ thể thực hiện ở hai đầu danh sách, trên đĩ cĩ các thao tác chính sau:

- Thêm phần tử x vào đầu hàng đợi hai đầu Dequeue:

InsertHead (Dequeue, x) hay chính là InsertElementHeadDLL(Dequeue, x);

- Thêm phần tử x vào cuối Dequeue:

InsertTail (Dequeue, x) hay chính là InsertElementTailDLL(Dequeue, x); - Lấy ra phần tử ởđầu Dequeue:

RemoveHead (Dequeue, x) hay chính là RemoveHeadDLL(Dequeue, x); - Lấy ra phần tử ở cuối Dequeue:

RemoveTail (Dequeue, x) hay chính là RemoveTailDLL(Dequeue, x); Ngồi ra, trên Dequeue cịn hỗ trợ các thao tác sau:

- Kiểm tra xem Dequeue cĩ rỗng khơng:

EmptyDequeue(Dequeue) hay chính là EmptyDLL(Dequeue); - Xem giá trịởđầu Dequeue mà khơng hủy nĩ khỏi Dequeue:

Head(Dequeue) hay chính là Dequeue.Head;

- Xem giá trịở cuối Dequeue mà khơng hủy nĩ khỏi Dequeue:

Tail(Dequeue) hay chính là Dequeue.Tail;

Ta cĩ thể dùng hàng đợi hai đầu để biểu diễn ngăn xếp hàng đợi như được minh họa trong bảng sau. Lưu ý rằng tất cả các thao tác này trên Dequeue đều cĩ độ phức tạp hằng O(1).

Dequeue Queue Stack

InsertHead (Dequeue, x) Push (Stack, x)

InsertTail (Dequeue, x) EnQueue (Queue, x)

RemoveHead (Dequeue, x) DeQueue (Queue, x) Pop (Stack, x)

RemoveTail (Dequeue, x)

EmptyDequeue(Dequeue) EmptyQueue (Queue) EmptyStack (Stack)

Head(Dequeue, x) Front (Queue) Top (Stack, x)

Tail(Dequeue, x)

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

Danh sách đa liên kết là danh sách mà mỗi nút của nĩ, ngồi thành phần dữ liệu (cĩ thể cĩ nhiều trường), cịn gồm nhiều thành phần liên kết khác phục vụ cho những mục đích khác nhau.

Chẳng hạn, ta cĩ thể dùng danh sách liên kết động cĩ hai liên kết (khơng nhất thiết phải đối xứng) để lưu trữ sắp xếp dãy các mẫu tin theo hai quan hệ thứ tự khác nhau, chẳng hạn theo hai trường khĩa khác nhau nào đĩ.

Ví dụ: Ta muốn lưu danh sách sau, sao cho theo những trường khĩa khác nhau chúng được sắp xếp theo những thứ tự nào đĩ.

Tên Mã Số Smith 2537 Doe 2897 Adams 1932 Jones 1570 List

Ten ? Data ? Link1 Link2

Nút câm NULL

Smith 2537 Link1 Link2 Doe 2897 Link1 Link2 Adams 1932 Link1 Link2 Jones 1570 Link1 Link2

NULL

Với mỗi mẫu tin, ngồi trường dữ liệu, ta cịn lưu thêm hai trường con trỏ:

Link1 hay NextTên để sắp tăng các mẫu tin này theo trường Tên, cịn Link2 hay

NextMãSốđể sắp giảm các mẫu tin này theo trường MãSố.

Ta dùng danh sách đa (trong ví dụ này là hai) liên kết cĩ nút câm để lưu trữ

danh sách các mục dữ liệu. Nếu đi theo Link1, ta được danh sách tăng theo thứ tự Tên; nếu đi theo Link2, ta được danh sách giảm theo thứ tự Mã Số.

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 92 - 94)

Tải bản đầy đủ (PDF)

(148 trang)