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

cau truc du lieu danh sach lien ket vong

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 (685.11 KB, 4 trang )


 /index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 Copyright
 ©
 vietjack.com
 


 

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.


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online
 miễn
 phí
 


 



 /index.jsp
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 Copyright
 ©
 vietjack.com
 


 

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;

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online
 miễn
 phí
 


 



 /index.jsp

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 Copyright
 ©
 vietjack.com
 


 
//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 click chuột 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 click chuột 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[ ");


 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài

 học
 online
 miễn
 phí
 


 



 /index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Copyright
 ©
 vietjack.com
 


 
//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 click chuột vào chương: Chương trình Danh sách liên kết
vòng trong C.
 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online
 miễn
 phí
 


 



×