10/05/2018, 23:25
Một số hàm căn bản trong danh sách liên kết đơn
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) { ...
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
// Hàm tạo NODE
// hàm Thêm Node đầu
// Hàm thêm node cuối
//Hàm nhập danh sách:
// Hàm xuất danh sách
//Hàm tìm NODE nhỏ nhất
// Hàm xóa NODE đầu
// Hàm chèn node vào sau node p
// Hàm chèn node vào trước node p
// Hàm tìm NODE trước NODE p
// Hàm huy danh sach
// Hàm sắp xếp danh sách
Hoặc
// hàm tạo list rỗng
Mã:
void Init(LIST &l) { l.pHead=l.pTail=NULL; }
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; }
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; } }
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; } }
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; } }
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; }
Mã:
void Xoadau( LIST &l) { NODE *p =l.pHead; l.pHead = l.pHead ->pNext; delete p; }
Mã:
void ChenNodeSaup (LIST &l, NODE *p, NODE *pnew) { pnew ->pNext = p ->pNext; p ->pNext = pnew; }
Mã:
void ChenNodeTruocp (LIST &l, NODE *p, NODE *pnew) { ChenNodeSaup(l,p,pnew); HoanVi(p->data,pnew->data); }
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; }
Mã:
void destroylist (LIST l) { if( l.pHead == l.pTail) Init(l); NODE *p =l.pHead; while (p) { delete p; p =p ->pNext; } }
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); }
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); } }