You are on page 1of 8

Code qun l sinh vin bng danh sch lin kt n Thm 1 bi dng ny na #include "iostream.h" #include "conio.

h" #include "string.h" #include "stdlib.h" #include "stdio.h" /*Cau truc thong tin chung ve sinh vien*/ typedef struct { int masv; char hoten[30]; }sinhvien; /*Cau truc cua mot node trong danh sach lien ket don*/ typedef struct node { sinhvien infor; struct node *next; }*nodeptr; /*Cac thao tac tren danh sach lien ket don*/ /*==================Khoi dong danh sach lien ket don=============== */ void init(nodeptr *plist) { *plist=NULL; } /*============Cap phat mien nho cho mot node cua danh sach lien ket don===========*/ nodeptr getnode() { nodeptr p; p=(nodeptr)malloc(sizeof(struct node)); return p; } /*==========Giai phong mien nho cho mot node cua danh sach lien ket don===========*/ void freenode(nodeptr p) { free(p); } /*==================Kiem tra tinh rong cua danh sach lien ket don===========*/

int empty(nodeptr *plist) { if(*plist==NULL) return 1; return 0; } /*==================Them mot node vao dau danh sach lien ket don============*/ nodeptr add_top(nodeptr *plist,sinhvien sv) { nodeptr p; p=getnode(); p->infor=sv; if(empty(plist)) { p->next=NULL; *plist=p; return p; } p->next=*plist; *plist=p; return p; } /*===================Them mot node vao cuoi danh sach lien ket don================*/ nodeptr add_bottom(nodeptr *plist,sinhvien sv) { nodeptr p,q; q=getnode(); q->infor=sv; if(empty(plist)) { q->next=NULL; *plist=q; return q; } p=*plist; while(p->next!=NULL) { p=p->next; } p->next=q; q->next=NULL; return q; }

/*===================Them node truoc node p trong danh sach lien ket don===============*/ nodeptr add_before(nodeptr *plist,sinhvien sv,int n) { nodeptr p,q; q=getnode(); q->infor=sv; if(empty(plist)) { cout<<"\n Vi tri khong hop le "; //delay(2000); return(NULL); } p=*plist;int i=0; while(p!=NULL&&i<n) { i++; p=p->next; } if(p==NULL) { cout<<"\n Vi tri khong hop le "; //delay(1000); return(NULL); } q->next=p->next; p->next=q; return q; getch(); } /*==================Loai bo node o dau danh sach lien ket don==================*/ void del_top(nodeptr *plist) { nodeptr p,q; if(empty(plist)) { cout<<"\n Danh sach rong "; //delay(2000); return; } p=*plist; q=p; p=p->next; *plist=p; cout<<"\n Node vua loai bo ";

cout<<"\n Ho ten: "<<q->infor.hoten; cout<<"\n Ma sinh vien: "<<q->infor.masv; //delay(1000); freenode(q); } /*===================Loai bo node o cuoi danh sach lien ket don===============*/ void del_bottom(nodeptr *plist) { nodeptr p,q; if(empty(plist)) { cout<<"\n Danh sach rong "; //delay(2000); return; } p=*plist; if(p->next==NULL) { del_top(plist); return; } while((p->next)->next!=NULL) { p=p->next; } q=p->next; p->next=NULL; cout<<"\n Node vua loai bo "; cout<<"\n Ho ten: "<<q->infor.hoten; cout<<"\n Ma sinh vien: "<<q->infor.masv; //delay(1000); freenode(q); } /*===================Loai bo node truoc node p trong danh sach lien ket don==================*/ void del_before(nodeptr *plist,int n) { nodeptr p,q;int i; if(empty(plist)) { cout<<"\n Danh sach rong "; //delay(2000); return; }

p=*plist; if(p->next==NULL) { del_top(plist); return; } i=0; while(p!=NULL&&i<n-1) { i++; p=p->next; } if(p->next==NULL) { cout<<"\n Vi tri khong hop le"; //delay(2000); return; } q=p->next; p->next=q->next; cout<<"\n Node vua loai bo "; cout<<"\n Ho ten: "<<q->infor.hoten; cout<<"\n Ma sinh vien: "<<q->infor.masv; //delay(1000); freenode(q); } /*====================Duyet danh sach lien ket don==============*/ void duyet(nodeptr *plist) { nodeptr p; if(empty(plist)) { cout<<"\n Danh sach rong "; //delay(2000); return; } int i=1; p=*plist; while(p!=NULL) { cout<<"\n Sinh vien thu: "<<i++; cout<<"\n ---"; cout<<"\n Ho ten: "<<p->infor.hoten; cout<<"\n Ma sinh vien: "<<p->infor.masv; p=p->next;

cout<<"\n ------------------------" ; } } /*====================Sap xep danh sach theo mot khoa=================*/ void sapxepnode(nodeptr *plist) { nodeptr p,q; sinhvien temp; for(p=*plist;p!=NULL;p=p->next) { for(q=p->next;q!=NULL;q=q->next) { if(p->infor.masv>q->infor.masv) { temp=p->infor; p->infor=q->infor; q->infor=temp; } } } cout<<"\n Danh sach sau khi duoc sap xep: "; for(p=*plist;p!=NULL;p=p->next) { cout<<"\n Ho ten: "<<p->infor.hoten; cout<<"\n Ma sinh vien: "<<p->infor.masv; } } /*=======================Tim kiem danh sach================*/ void searchnode(nodeptr *plist,int masv) { nodeptr p; p=*plist; while(p!=NULL&&p->infor.masv!=masv) p=p->next; if(p==NULL) { cout<<"\n Sinh vien khong ton tai "; } else { cout<<"\n Sinh vien can tim "; cout<<"\n Ho ten: "<<p->infor.hoten; cout<<"\n Ma sinh vien: "<<p->infor.masv; }

} /*===================Ham thao tac===================*/ int main() { //clrscr(); nodeptr plist; sinhvien sv1; int vitri,masv; int chon; init(&plist); do { // clrscr(); cout<<"\n\t THAO TAC VOI DANH SACH LIEN KET DON "; cout<<"\n\t------------------------------------"; cout<<"\n\t 1.Them node vao dau danh sach "; cout<<"\n\t 2.Them node vao cuoi danh sach "; cout<<"\n\t 3.Them node vao giua danh sach "; cout<<"\n\t 4.Loai bo node o dau danh sach "; cout<<"\n\t 5.Loai bo node o cuoi danh sach "; cout<<"\n\t 6.Loai bo node o giua danh sach "; cout<<"\n\t 7.Duyet danh sach "; cout<<"\n\t 8.Sap xep danh sach "; cout<<"\n\t 9.Tim kiem danh sach "; cout<<"\n\t 0.Thoat "; cout<<"\n\n\t #chon (1->9 or 0 de thoat): "; cin>>chon;cin.ignore(); switch(chon) { case 1: cout<<"\n Ho ten sinh vien: "; gets(sv1.hoten); cout<<"\n Ma sinh vien: "; cin>>sv1.masv; add_top(&plist,sv1); break; case 2: cout<<"\n Ho ten sinh vien: "; gets(sv1.hoten); cout<<"\n Ma sinh vien: "; cin>>sv1.masv; add_bottom(&plist,sv1); break; case 3: cout<<"\n Vi tri them: ";

cin>>vitri; cout<<"\n Ho ten sinh vien: "; gets(sv1.hoten); cout<<"\n Ma sinh vien: "; cin>>sv1.masv; add_before(&plist,sv1,vitri-1); break; case 4: del_top(&plist); break; case 5: del_bottom(&plist); break; case 6: cout<<"\n Vi tri loai bo: "; cin>>vitri; del_before(&plist,vitri-1); break; case 7: duyet(&plist); break; case 8: sapxepnode(&plist); break; case 9: cout<<"\n Ma sinh vien can tim: "; cin>>masv; searchnode(&plist,masv); break; } getch(); } while(chon!=0); }

You might also like