Code quản lý sinh viên bằng danh sách liên kết đơn

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
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