. 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 và 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ữ và 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ố.