Danh sách liên kết đơn trong C++
Khai báo struct NODE và LIST
// khai
báo node
typedef struct node
{
int data;
struct node* pNext;
}NODE;
// khai
báo danh sách các node
typedef struct list
{
NODE* pHead;
NODE* pTail;
}LIST;
Prototype
void init(LIST&);
NODE*
getNODE(int);
void
addHead(LIST&, NODE*);
void
addTail(LIST&, NODE*);
void Input(LIST&);
void Output(LIST);
int Sum(LIST);
Hàm khởi tạo danh sách liên kết
void init(LIST& l)
{
l.pHead = l.pTail =
NULL;
//l.pTail = NULL;
}
Hàm tạo ra một node
//tạo
Node trong danh sách liên kết đơn các số nguyên
NODE*
getNODE(int x)
{
NODE* p = new NODE;
// p = new NODE;
if (p == NULL)
return NULL;
p->data = x;
p->pNext = NULL;
return p;
}
Thêm vào đầu danh sách liên kết đơn
//thêm vào
đầu danh sách lk đơn số nguyên
void
addHead(LIST& l, NODE* p)
{
if (l.pHead
== NULL)
{
l.pHead = p;
l.pTail = l.pHead;
}
else
{
p->pNext = l.pHead;
l.pHead = p;
}
}
Thêm vào cuối danh sách liên kết đơn
//thêm vào
cuối danh sách lk đơn số nguyên
void
addTail(LIST& l, NODE* p)
{
if (l.pHead
== NULL)
{
l.pHead = p;
l.pTail = l.pHead;
}
else
{
l.pTail->pNext = p;
l.pTail = p;
}
}
Hàm nhập
//hàm nhập
dữ liệu danh sách liên kết đơn các số nguyên
void Input(LIST& l)
{
int n;
cout << "\nNhap
vao so luong node: ";
cin >> n;
init(l);
for (int i = 1;
i <= n; i++)
{
int x;
cout << "\nNhap
gia tri cua node: ";
cin >> x;
NODE* p = getNODE(x);
addHead(l, p);
}
}
Hàm xuất
// hàm
xuất dữ liệu danh sách liên kết đơn các số nguyên
void Output(LIST l)
{
for (NODE* p = l.pHead;
p != NULL; p = p->pNext)
{
cout <<
p->data << " ";
}
}
Tính tổng giá trị các node trong danh sách liên
kết đơn (Optional)
int Sum(LIST l)
{
int sum = 0;
for (NODE* p = l.pHead;
p != NULL; p = p->pNext)
{
sum = sum + p->data;
}
return sum;
}
Main.cpp
#include <iostream>
using namespace std;
int main()
{
LIST l;
Input(l);
Output(l);
int kq = Sum(l);
cout << "\nTong
cac so nguyen trong danh sach lien ket la " << kq << endl;
system("pause");
return 0;
}
Tobecontinued~
Nhận xét
Đăng nhận xét