Bài tập danh sách liên kết đơn c++ năm 2024

Qua hai bài tập này các bạn có thể quản lý được danh sách liên kết và thao tác với nó một cách thành thạo.

Bài viết này được đăng tại [free tuts .net]

1. Bài tập về danh sách liên kết đơn kiểu cơ sở

Trong bài tập này chúng ta sẽ thực hiện giải một bài toán như sau:

s[x,n] = x1 + x2 + x3 + ... + xn

Xây dựng danh sách liên kết đơn có pHead, pTail. Nhập x, n tạo thành danh sách liên kết[ Mỗi nút có 2 giá trị x và i, i chạy từ 1 -> n], dùng con trỏ để khai báo cho danh sách liên kết.

Viết hàm xuất ra tổng các phần tử trong danh sách liên kết.

Gợi ý:

Để giải bài toán này việc đầu tiên ta cần cấu trúc dữ liệu của danh sách liên kết đơn. Giá trị data là x và i, mối liên kết là pNext. Khởi tạo cho pHead và pTail bằng NULL.

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

Sau đó viết một hàm tạo Node dựa vào cấu trúc dữ liệu vừa viết.

/ Tạo Node / Node *CreateNode[int x,int i] { Node *pNode=new Node; if[pNode==NULL] {

coutx=x;  
  pNode->pNext=NULL;  
  return pNode;  
}

Trong bài tập này ta cần thêm Node vào cuối danh sách, vì vậy chúng ta cần tạo một hàm

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

4 với tham số truyền vào là x và i.

/ insertlast / void InsertLast[SingleList *&list,int x,int i] { Node *pNode=CreateNode[x,i]; if[list->pTail==NULL]

list->pHead=list->pTail=pNode;  
else {
list->pTail->pNext=pNode;  
list->pTail=pNode;    
} }

Một hàm

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

5 để in danh sách liên kết.

/printlist/ void PrintList[SingleList *list] { Node *pTmp=list->pHead; while[pTmp!=NULL] {

if[pTmp->pNext!=NULL]  
  coutpNext=pNode;  
list->pTail=pNode;    
} } /*printlist/ void PrintList[SingleList list] { Node *pTmp=list->pHead; while[pTmp!=NULL] {
if[pTmp->pNext!=NULL]  
  coutpTail=NULL;  
}

0

Cuối cùng là một hàm tính giai thừa

/ Tạo Node / Node *CreateNode[int x,int i] { Node *pNode=new Node; if[pNode==NULL] {

coutx=x;  
  pNode->pNext=NULL;  
  return pNode;  
}

0 và hàm tính tổng

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

6.

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

1

Để hiển thị và kiểm tra kết quả ta cần một hàm

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

7.

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

2

Full code:

/ Tạo cấu trúc dữ liệu cho danh sách liên kết đơn / struct Node { int x; int i; Node pNext; }; struct SingleList { Node *pHead; Node *pTail; }; / Khởi tạo cho pHead và pTail / void Initialize[SingleList &list] { list=new SingleList; list->pHead=list->pTail=NULL; }

3

Kết quả:

Như vậy là chúng ta đã thực hiện xong hai bài tập áp dụng các thao tác trong danh sách liên kết đơn, các bạn hãy luyện tập thật nhiều các bài tập khác nữa nhé. Chúc các bạn thực hiện thành công!!!

Chủ Đề