Tạo node mới trong DSLK đôi
Trong bài viết này, codehow sẽ hướng dẫn các bạn cách tạo node mới trong DSLK đôi. Khi chúng ta muốn thực hiện các thao tác như thêm, xóa, tìm kiếm, sắp xếp, ... thì cần phải tạo node đầu tiên.
Vậy làm thế nào để có thể tạo mới được một node trong DSLK đôi? Và cần những gì để có thể tạo được node mới thì ngay bây giờ hãy bắt đầu cùng mình thôi nhé.
Tạo node mới trong DSLK đôi cần những gì?
Để có thể tạo được một node mới trong DSLK đôi, trước tiên ta cần thực hiện tạo cấu trúc dữ liệu của DSLK đôi đã nhé. Ở bài mình đã có hướng dẫn cụ thể, các bạn có thể xem lại nhé. Nếu các bạn chưa xem bài viết đó thì đừng lo lắng nhé, ngay bây giờ mình sẽ nhắc lại trong phần này.
Tạo cấu trúc dữ liệu của DSLK đôi bao gồm các cấu trúc dưới đây:
- Cấu trúc node.
- Cấu trúc DSLK đôi.
- Khởi tạo NULL cho node.
/* tạo cấu trúc một Node bao gồm giá trị data và con trỏ pNext, pTail */ struct Node { int data; // giá trị của node struct Node* next;// con trỏ next trỏ đến phần tử sau struct Node* prev;// con trỏ prev trỏ đến phần tử trước }; /* Khai báo Node đầu pHead và Node cuối pTail*/ struct SingleList { Node *pHead; //Node đầu pHead Node *pTail; // Node cuối pTail }; void Initialize(SingleList &list) { list.pHead=list.pTail=NULL;// khởi tạo giá trị cho Node đầu và Node cuối là Null }
Không những đây là bước đầu tiên để thực hiện thao tác tạo mới node, mà các thao tác khác như xóa, tìm kiếm, sắp xếp đều phải thực hiện nó đầu tiên nhé.
Cách tạo node mới trong DSLK đôi
Sau khi đã tạo cấu trúc dữ liệu cho DSLK đôi, bây giờ chúng ta đã có thể tạo mới node được rồi.
Việc tạo mới node bao gồm các bước sau đây:
Bước 1: Tạo một node p bằng cách sử dụng cấu trúc node chúng ta đã khai báo ở trên.
Node *p = new Node;
Bước 2: Kiểm tra xem node p có NULL hay không, nếu NULL thì thoát khỏi hàm. Nếu không null mới thực hiện bước tiếp theo.
if(p == NULL) exit(1);// nếu p rỗng thì thoát khỏi hàm
Bước 3: Trỏ con trỏ pNext và pPre về giá trị NULL.
p->next = NULL; // khi tạo mới một node thì p->next == p->prev == null p->prev = NULL;
Bước 4: Gán giá trị data cho node p bằng x. Sau đó return p.
p->data = x;//gán giá trị data = x return p;
Full code tạo node mới trong DSLK đôi.
//Tạo mới một Node Node *creatNode(int x ){ //tao thong tin cho node Node *p = new Node; // tạo mới một node p if(p == NULL) exit(1);// nếu p rỗng thì thoát khỏi hàm p->next = NULL; // khi tạo mới một node thì p->next == p->prev == null p->prev = NULL; p->data = x;//gán giá trị data = x return p; }
Để hiểu rõ hơn về cách tạo node mới, các bạn hãy xem ví dụ thực hiện ngay phần bên dưới nhé.
Ví dụ tạo node mới trong DSLK đôi
Đề bài: Quản lý thông tin của một khách hàng bao gồm thông tin: tên (char), tuổi (int), quê quán (char). Thực hiện các thao tác sau đây:
- Tạo cấu trúc node.
- Tạo cấu trúc DSLK đôi.
- Khởi tạo node NULL.
- Tạo cấu trúc khachhang với các thông tin như đề bài.
- Tạo mới node khách hàng với tham số truyền vào là struct khachhang.
Bây giờ chúng ta sẽ đi thực hiện thực thao tác mà đề bài yêu cầu nhé.
Bước 1: Tạo cấu trúc khách hàng.
/* tạo cấu trúc khách hàng */ struct khachhang{ char ten[50]; // khai báo tên int tuoi; // khai báo tuổi char quequan[120]; // khai báo quê quán };
Bước 2: Tạo cấu trúc node.
/* tạo cấu trúc một Node bao gồm giá trị data và con trỏ pNext, pTail */ struct Node { khachhang *data; // giá trị của node được lấy tù struct khachhang struct Node* next;// con trỏ next trỏ đến phần tử sau struct Node* prev;// con trỏ prev trỏ đến phần tử trước };
Bước 3: Tạo cấu trúc DSLk đôi.
/* Khai báo Node đầu pHead và Node cuối pTail*/ struct SingleList { Node *pHead; //Node đầu pHead Node *pTail; // Node cuối pTail };
Bước 4: Khởi tạo NULL cho node.
//khởi tạo giá trị cho Node void Initialize(SingleList *&list) { list=new SingleList; list->pHead=NULL; list->pTail = NULL; }
Bước 5: Tạo node mới khách hàng với tham số truyền vào là struct khachhang.
//tạo node khách hàng Node *CreateNode(khachhang *kh) { Node *pNode=new Node; if(pNode!=NULL) { pNode->data=kh; pNode->next=NULL; } else { cout<<"cap phat bo nho that bai!!!"; } return pNode; }
Full code:
/* tạo cấu trúc khách hàng */ struct khachhang{ char ten[50]; // khai báo tên int tuoi; // khai báo tuổi char quequan[120]; // khai báo quê quán }; /* tạo cấu trúc một Node bao gồm giá trị data và con trỏ pNext, pTail */ struct Node { khachhang *data; // giá trị của node được lấy tù struct khachhang struct Node* next;// con trỏ next trỏ đến phần tử sau struct Node* prev;// con trỏ prev trỏ đến phần tử trước }; /* Khai báo Node đầu pHead và Node cuối pTail*/ struct SingleList { Node *pHead; //Node đầu pHead Node *pTail; // Node cuối pTail }; //khởi tạo giá trị cho Node void Initialize(SingleList *&list) { list=new SingleList; list->pHead=NULL; list->pTail = NULL; } //tạo node khách hàng Node *CreateNode(khachhang *kh) { Node *pNode=new Node; if(pNode!=NULL) { pNode->data=kh; pNode->next=NULL; } else { cout<<"cap phat bo nho that bai!!!"; } return pNode; }
Kết luận
Như vậy là chúng ta đã cùng nhau tìm hiểu về cách tạo mới node trong DSLK đôi. Về cơ bản thì nó tương tự như việc tạo mới node trong DSLK đơn đúng không ạ. Ở bài tiếp theo, mình sẽ hướng dẫn các bạn cách duyệt danh sách liên kêt đôi, các bạn chú ý theo dõi nhé !!!