Cách chia một danh sách liên kết đôi trong C
Bài tập C: chia một danh sách liên kết đôi Bài tập C này giúp bạn làm quen dần với cách tạo danh sách liên kết đôi và cách chia một danh sách liên kết đôi trong C. Để giải bài tập này, mình sử dụng cấu trúc struct trong C. Chương trình C Dưới đây là chương trình C để giải bài ...
Bài tập C: chia một danh sách liên kết đôi
Bài tập C này giúp bạn làm quen dần với cách tạo danh sách liên kết đôi và cách chia một danh sách liên kết đôi trong C. Để giải bài tập này, mình sử dụng cấu trúc struct trong C.
Chương trình C
Dưới đây là chương trình C để giải bài tập chia một danh sách liên kết đôi trong C:
#include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <stdlib.h> struct node { int data; struct node *prev; struct node *next; }; struct node *list = NULL; struct node *list_last = NULL; struct node *even = NULL; struct node *even_last = NULL; struct node *odd = NULL; struct node *odd_last = NULL; struct node *current = NULL; //tao danh sach lien ket void insert(int data) { // cap phat bo nho cho node moi; struct node *link = (struct node*) malloc(sizeof(struct node)); link->data = data; link->prev = NULL; link->next = NULL; // neu head la trong, tao list moi if(list == NULL) { list = link; return; } current = list; // di chuyen toi phan cuoi list while(current->next!=NULL) current = current->next; // chen link vao phan cuoi cua list current->next = link; list_last = link; link->prev = current; } //hien thi list void print_backward(struct node *head) { struct node *ptr = head; printf(" [last] <=>"); //bat dau tu phan dau cua list while(ptr != NULL) { printf(" %d <=>",ptr->data); ptr = ptr->prev; } printf(" [head] "); } //hien thi list void printList(struct node *head) { struct node *ptr = head; printf(" [head] <=>"); //bat dau tu phan dau cua list while(ptr != NULL) { printf(" %d <=>",ptr->data); ptr = ptr->next; } printf(" [last] "); } void split_list() { // cap phat bo nho cho node moi; struct node *listp; struct node *link; struct node *current; listp = list; while(listp->next != NULL) { struct node *link = (struct node*) malloc(sizeof(struct node)); link->data = listp->data; link->prev = NULL; link->next = NULL; if(listp->data%2 == 0) { if(even == NULL) { even = link; even_last = link; listp = listp->next; continue; }else { current = even; while(current->next != NULL) { current = current->next; } // chen link vao phan cuoi cua list current->next = link; even_last = link; link->prev = current; listp = listp->next; } }else { if(odd == NULL) { odd = link; odd_last = link; listp = listp->next; continue; }else { current = odd; while(current->next!= NULL) { current = current->next; } // chen link vao phan cuoi cua list current->next = link; odd_last = link; link->prev = current; listp = listp->next; } } } // xu ly last node if(listp!=NULL) { link = (struct node*) malloc(sizeof(struct node)); link->data = listp->data; link->prev = NULL; link->next = NULL; if(listp->data%2 == 0) { current = even; while(current->next != NULL) { current = current->next; } // chen link vao phan cuoi cua list current->next = link; even_last = link; link->prev = current; }else { current = odd; while(current->next!= NULL) { current = current->next; } // chen link vao phan cuoi cua list current->next = link; odd_last = link; link->prev = current; } } } int main() { int i; for(i=1; i<=10; i++) insert(i); printf("Danh sach ban dau: "); printList(list); printf("Danh sach voi chieu dao nguoc: "); print_backward(list_last); split_list(); printf(" Sau khi chia danh sach: "); printf("Danh sach chan: "); printList(even); printf("Danh sach le: "); printList(odd); printf(" Hien thi danh sach vua chia theo chieu dao nguoc: "); printf("Danh sach chan: "); print_backward(even_last); printf("Danh sach le: "); print_backward(odd_last); return 0; }
Biên dịch chương trình C trên sẽ cho kết quả:

Loạt bài Bài tập C có giải của chúng tôi một phần dựa trên Tutorialspoint.com
Follow fanpage của team hoặc facebook cá nhân Nguyễn Thanh Tuyền để tiếp tục theo dõi các loạt bài mới nhất về Ngữ pháp tiếng Anh, luyện thi TOEIC, Java,C,C++,Javascript,HTML,Python,Database,Mobile ... mới nhất của chúng tôi.
Bài học Bài tập C phổ biến tại vietjack.com: