Cấu trúc dữ liệu Danh sách liên kết vòng (Circular Linked List)
Danh sách liên kết vòng (Circular Linked List) là gì?
Danh sách liên kết vòng (Circular Linked List) là một biến thể của Danh sách liên kết (Linked List), trong đó phần tử đầu tiên trỏ tới phần tử cuối cùng và phần tử cuối cùng trỏ tới phần tử đầu tiên.
Cả hai loại Danh sách liên kết đơn (Singly Linked List) và Danh sách liên kết đôi (Doubly Linked List) đều có thể được tạo thành dạng Danh sách liên kết vòng. Phần dưới chúng ta sẽ tìm hiểu từng cách tạo một.
Tạo Danh sách liên kết vòng từ Danh sách liên kết đơn
Trong Danh sách liên kết đơn, điểm trỏ tới kế tiếp của nút cuối sẽ trỏ tới nút đầu tiên, thay vì sẽ trỏ tới NULL.

Tạo Danh sách liên kết vòng từ Danh sách liên kết đôi
Trong Danh sách liên kết đôi, điểm trỏ tới kế tiếp của nút cuối trỏ tới nút đầu tiên và điểm trỏ tới phía trước của nút trước sẽ trỏ tới nút cuối cùng. Quá trình này sẽ tạo thành vòng ở cả hai hướng.

Nhìn vào hai hình minh họa trên, bạn cần ghi nhớ:
Next của Last Link trỏ tới First Link trong cả hai trường hợp với Danh sách liên kết đơn cũng như Danh sách liên kết đôi.
Prev của First Link trỏ tới phần tử cuối của Danh sách liên kết với trường hợp Danh sách liên kết đôi.
Các hoạt động cơ bản trên Danh sách liên kết vòng
Dưới đây là một số hoạt động cơ bản được hỗ trợ bởi Danh sách liên kết vòng:
Hoạt động chèn: chèn một phần tử vào vị trí bắt đầu của Danh sách liên kết vòng.
Hoạt động xóa: xóa một phần tử của Danh sách liên kết vòng.
Hiển thị: hiển thị toàn bộ Danh sách liên kết vòng.
Hoạt động chèn trong Danh sách liên kết vòng
Dưới đây là giải thuật minh họa hoạt động chèn trong Danh sách liên kết vòng dựa trên Danh sách liên kết đơn.
//Chèn link tại vị trí đầu tiên void insertFirst(int key, int data) { //tạo một link struct node *link = (struct node*) malloc(sizeof(struct node)); link->key = key; link->data= data; if (isEmpty()) { head = link; head->next = head; }else { //trỏ nó tới first node cũ link->next = head; //trỏ first tới first node mới head = link; } }
Để theo dõi phần triển khai code minh họa chi tiết trong ngôn ngữ C, bạn vào chương: Chương trình Danh sách liên kết vòng trong C.
Hoạt động xóa trong Danh sách liên kết vòng
Dưới đây là giải thuật minh họa hoạt động xóa trong Danh sách liên kết vòng dựa trên Danh sách liên kết đơn.
//Xóa phần tử đầu tiên struct node * deleteFirst() { //Lưu tham chiếu tới first link struct node *tempLink = head; if(head->next == head){ head = NULL; return tempLink; } //Đánh dấu next tới first link là first head = head->next; //trả về link đã bị xóa return tempLink; }
Để theo dõi phần triển khai code minh họa chi tiết trong ngôn ngữ C, bạn vào chương: Chương trình Danh sách liên kết vòng trong C.
Hiển thị Danh sách liên kết vòng
Dưới đây là giải thuật minh họa hoạt động hiển thị toàn bộ Danh sách liên kết vòng.
//Hiển thị danh sách liên kết vòng void printList() { struct node *ptr = head; printf("\n[ "); //Bắt đầu từ vị trí đầu tiên if(head != NULL) { while(ptr->next != ptr) { printf("(%d,%d) ",ptr->key,ptr->data); ptr = ptr->next; } } printf(" ]"); }
Để theo dõi phần triển khai code minh họa chi tiết trong ngôn ngữ C, bạn vào chương: Chương trình Danh sách liên kết vòng trong C.
Theo Tutorialspoint
Bài trước: Cấu trúc dữ liệu danh sách liên kết (Linked List)
Bài tiếp: Cấu trúc dữ liệu ngăn xếp (Stack)
Bạn nên đọc
-
Công thức tính diện tích hình quạt tròn
-
Công thức tính thể tích hình chóp cụt, diện tích xung quanh và toàn phần của hình chóp cụt
-
Công thức tính diện tích xung quanh hình nón cụt, diện tích toàn phần hình nón cụt, thể tích hình nón cụt
-
Công thức tính diện tích hình thang cân, chu vi hình thang cân
-
Cách tính diện tích hình tròn và chu vi hình tròn
-
Công thức tính diện tích xung quanh hình nón, diện tích toàn phần hình nón, thể tích hình nón, V nón
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:
Cũ vẫn chất
-

Lịch phát sóng VTV1 hôm nay 04/02/2026
2 ngày -

Những câu nói hay về tháng 7, stt chào tháng 7 yêu thương
2 ngày -

Cách fake tin nhắn iPhone, chế tin nhắn Messenger
2 ngày -

60+ Câu đố về quả giúp trẻ rèn luyện tư duy
2 ngày -

Toán tử trong lập trình C
2 ngày 1 -

Cách xóa trang trắng trong Word cực dễ
2 ngày 3 -

Những câu nói về hôn nhân, tình cảm vợ chồng hay, đáng suy ngẫm
2 ngày -

Những stt về mưa hay nhất, câu nói hay về mưa
2 ngày -

Lời chúc ngày Gia đình Việt Nam 28/6 hay và ý nghĩa
2 ngày 2 -

Hướng dẫn xem nhiều trang trong Word cùng lúc
2 ngày
Học IT
Microsoft Word 2013
Microsoft Word 2007
Microsoft Excel 2019
Microsoft Excel 2016
Microsoft PowerPoint 2019
Google Sheets
Lập trình Scratch
Bootstrap
Hướng dẫn
Ô tô, Xe máy