Dưới đây là một số hàm căn bản cần thiết khi đụng chạm tới bài tập danh sách liên kết đơn.
// hàm tạo list rỗng
Mã:
void Init(LIST &l)
{
l.pHead=l.pTail=NULL;
}
// Hàm tạo NODE
Mã:
NODE* GetNode(int x)
{
NODE* p;
p=new NODE;
if(p==NULL)
{
cout<<"cap phat bo nho khong du.";
exit(0);
}
p->data=x;
p->pNext=NULL;
return p;
}
// hàm Thêm Node đầu
Mã:
void AddHead(LIST &l,NODE* new_ele)
{
if(l.pHead==NULL)
l.pHead=l.pTail=new_ele;
else
{
new_ele->pNext=l.pHead;
l.pHead=new_ele;
}
}
// Hàm thêm node cuối
Mã:
void AddTail(LIST &l,NODE* new_ele)
{
if(l.pTail==NULL)
l.pHead=l.pTail=new_ele;
else
{
l.pTail->pNext=new_ele;
l.pTail=new_ele;
}
}
//Hàm nhập danh sách:
Mã:
void InPut(LIST &l)
{
int x;
NODE *pnew;
Init(l);
do{
cout<<"Nhap gia tri: (nhan 0 de ket thuc) ";
cin>> x;
if ( x==0)
break;
pnew = GetNode(x);
AddHead(l, pnew);
}while (true);
}
// Hàm xuất danh sách
Mã:
OutPut(LIST l)
{
NODE *p =l.pHead;
while (p)
{
cout<< p ->data<<" ";
p = p->pNext;
}
}
//Hàm tìm NODE nhỏ nhất
Mã:
*TimMin( LIST l , NODE * vtmin)
{
vtmin = l.pHead;
for ( NODE *p = l.pHead->pNext; p; p = p->pNext)
{
if ( p ->data < vtmin ->data)
vtmin = p;
}
return vtmin;
}
// Hàm xóa NODE đầu
Mã:
void Xoadau( LIST &l)
{
NODE *p =l.pHead;
l.pHead = l.pHead ->pNext;
delete p;
}
// Hàm chèn node vào sau node p
Mã:
void ChenNodeSaup (LIST &l, NODE *p, NODE *pnew)
{
pnew ->pNext = p ->pNext;
p ->pNext = pnew;
}
// Hàm chèn node vào trước node p
Mã:
void ChenNodeTruocp (LIST &l, NODE *p, NODE *pnew)
{
ChenNodeSaup(l,p,pnew);
HoanVi(p->data,pnew->data);
}
// Hàm tìm NODE trước NODE p
Mã:
NODE *NodePrv(LIST l, NODE *p)
{
if( p == l.pHead || p == NULL )
return NULL;
for( NODE *prv =l.pHead; prv; prv=prv ->pNext)
if(prv->pNext ->data = p->data)
return prv;
}
// Hàm huy danh sach
Mã:
void destroylist (LIST l)
{
if( l.pHead == l.pTail)
Init(l);
NODE *p =l.pHead;
while (p)
{
delete p;
p =p ->pNext;
}
}
// Hàm sắp xếp danh sách
Mã:
void Doichotructiep(LIST l)
{
for(NODE* p=l.pHead;p;p=p->pNext)
for(NODE*q=p->pNext;q;q=q->pNext)
if(p->data>q->data)
HoanVi(p->data,q->data);
}
Hoặc
Mã:
void Chontructiep(LIST l)
{
NODE *pmin;
for( NODE *p =l.pHead;p!= l.pTail;p = p->pNext)
{
pmin =p;
for ( NODE *q = p->pNext;q; q = q->pNext)
if (q->data < pmin ->data)
pmin = q;
HoanVi(pmin ->data,p->data);
}
}
// hàm tạo list rỗng
Mã:
void Init(LIST &l)
{
l.pHead=l.pTail=NULL;
}
// Hàm tạo NODE
Mã:
NODE* GetNode(int x)
{
NODE* p;
p=new NODE;
if(p==NULL)
{
cout<<"cap phat bo nho khong du.";
exit(0);
}
p->data=x;
p->pNext=NULL;
return p;
}
// hàm Thêm Node đầu
Mã:
void AddHead(LIST &l,NODE* new_ele)
{
if(l.pHead==NULL)
l.pHead=l.pTail=new_ele;
else
{
new_ele->pNext=l.pHead;
l.pHead=new_ele;
}
}
// Hàm thêm node cuối
Mã:
void AddTail(LIST &l,NODE* new_ele)
{
if(l.pTail==NULL)
l.pHead=l.pTail=new_ele;
else
{
l.pTail->pNext=new_ele;
l.pTail=new_ele;
}
}
//Hàm nhập danh sách:
Mã:
void InPut(LIST &l)
{
int x;
NODE *pnew;
Init(l);
do{
cout<<"Nhap gia tri: (nhan 0 de ket thuc) ";
cin>> x;
if ( x==0)
break;
pnew = GetNode(x);
AddHead(l, pnew);
}while (true);
}
// Hàm xuất danh sách
Mã:
OutPut(LIST l)
{
NODE *p =l.pHead;
while (p)
{
cout<< p ->data<<" ";
p = p->pNext;
}
}
//Hàm tìm NODE nhỏ nhất
Mã:
*TimMin( LIST l , NODE * vtmin)
{
vtmin = l.pHead;
for ( NODE *p = l.pHead->pNext; p; p = p->pNext)
{
if ( p ->data < vtmin ->data)
vtmin = p;
}
return vtmin;
}
// Hàm xóa NODE đầu
Mã:
void Xoadau( LIST &l)
{
NODE *p =l.pHead;
l.pHead = l.pHead ->pNext;
delete p;
}
// Hàm chèn node vào sau node p
Mã:
void ChenNodeSaup (LIST &l, NODE *p, NODE *pnew)
{
pnew ->pNext = p ->pNext;
p ->pNext = pnew;
}
// Hàm chèn node vào trước node p
Mã:
void ChenNodeTruocp (LIST &l, NODE *p, NODE *pnew)
{
ChenNodeSaup(l,p,pnew);
HoanVi(p->data,pnew->data);
}
// Hàm tìm NODE trước NODE p
Mã:
NODE *NodePrv(LIST l, NODE *p)
{
if( p == l.pHead || p == NULL )
return NULL;
for( NODE *prv =l.pHead; prv; prv=prv ->pNext)
if(prv->pNext ->data = p->data)
return prv;
}
// Hàm huy danh sach
Mã:
void destroylist (LIST l)
{
if( l.pHead == l.pTail)
Init(l);
NODE *p =l.pHead;
while (p)
{
delete p;
p =p ->pNext;
}
}
// Hàm sắp xếp danh sách
Mã:
void Doichotructiep(LIST l)
{
for(NODE* p=l.pHead;p;p=p->pNext)
for(NODE*q=p->pNext;q;q=q->pNext)
if(p->data>q->data)
HoanVi(p->data,q->data);
}
Hoặc
Mã:
void Chontructiep(LIST l)
{
NODE *pmin;
for( NODE *p =l.pHead;p!= l.pTail;p = p->pNext)
{
pmin =p;
for ( NODE *q = p->pNext;q; q = q->pNext)
if (q->data < pmin ->data)
pmin = q;
HoanVi(pmin ->data,p->data);
}
}