Hiện dân mạng tụi mình đang học môn cấu trúc dữ liệu, với vốn kiến thức nông cạn về lập trình, mình xin mạo muội post một số bài về danh sách liên kết đơn (p/s: chỉ mới học tới đây thôi ) mong được sự góp ý của mọi người nhé Với code bên dưới các bạn có thể custom thành bài về danh sách sinh viên hoặc tuơng tự... Code dưới đây mình sửa lại cho giống như cách viết trong giáo trình CTDL, tức là khi khai báo ta dùng các dấu "**" và "*" PHP: #include<iostream> using namespace std; //Khai bao cau truc struct node { int pt; struct node *next; }; typedef node list; list *first,*ds2,*last; //Xoa sach cac node trong danh sach va khoi tao danh sach void clear_list(list **first) { list *p=*first; while(*first!=NULL) { *first=p->next; delete(p); p=*first; } } //In danh sach void print_list(list *first) { if(first==NULL) cout << "\nDanh sach rong"; else { list *p=first; cout << "\nDanh sach:\n "; while(p!=NULL) { cout << p->pt << "\t"; p=p->next; } } } //Dem so phan tu trong danh sach int count_list(list *first) { list *p=first; int c=1; while(p->next!=NULL) { p=p->next; c++; } return c; } //Tinh tong gia tri cac phan tu trong danh sach int sum_list(list *first) { list *p=first; int s=0; if(first==NULL) { cout << "\nDanh sach rong\n"; return 0; } else { while(p!=NULL) { s=s+p->pt; p=p->next; } } return s; } //Tinh gia tri trung binh cac phan tu trong danh sach float avg_list(list *first) { list *p=first; float avg; if(first==NULL) { cout << "\nDanh sach rong\n"; return 0; } return avg=(float)sum_list(p)/(float)count_list(p); } //Tra ve node nam o vi tri n list *position_node(list *first,int n) { list *p=first; int c=1; while(c<n) { p=p->next; c++; } return p; } //Chen vao dau danh sach void insert_first(list **first, int data) { list *p; p=new node; p->pt=data; p->next=*first; *first=p; } //Chen cuoi danh sach void insert_last(int data) { list *p; p=new node; p->pt=data; last->next=p; last=p; p->next=NULL; } //Ham chen node vao danh sach void insert_node(list **first) { int n,x,c; list *p=*first; if(p==NULL) cout << "\nDanh sach rong"; else { cout << "\nNhap vi tri can chen: "; cin >> n; c=count_list(p); if(n<1 || n>(c+1)) cout << "\nVi tri khong hop le"; else { cout << "\nNhap gia tri cho phan tu: "; cin >> x; if(n==1) insert_first(first,x); else { c=count_list(p); if(n==c+1) insert_last(x); else { list *q; q=new node; q->pt=x; q->next=position_node(p,n-1)->next; position_node(p,n-1)->next=q; } } } } } //Xoa node dau danh sach void del_first(list **first) { list *p; p=*first; *first=p->next; } //Xoa node cuoi danh sach void del_last(list **first) { list *p=*first; int c=1; int n=count_list(p); while(c<n-1) { p=p->next; c++; } delete(last); last=p; p->next=NULL; } //Xoa 1 node bat ki trong danh sach void del_node(list **first) { list *p=*first; int n,c; if(*first==NULL) cout << "\nDanh sach rong"; else { cout << "\nNhap vi tri can xoa: "; cin >> n; c=count_list(p); if(n<1 || n>c+1) cout << "\nVi tri khong hop le"; else { if(n==1) del_first(first); else { c=count_list(p); if(n==c) del_last(first); else { list *q,*t; q=position_node(p,(n-1)); t=position_node(p,n); q->next=t->next; delete(t); } } } } } //Dao nguoc danh sach void reverse_list(list **first) { if(*first==NULL) return; list *current,*previous,*f=*first; current=NULL; previous=NULL; while(f!=NULL) { current=f; f=f->next; current->next=previous; previous=current; } *first=current; } //Tim min list *min_list(list *first) { list *p=first,*min=p; while(p) { if(p->pt<min->pt) min=p; else p=p->next; } return min; } //Sap xep tang dan void sort_list(list **first) { list *p=*first,*q; int tmp; while(p->next) { q=min_list(p); tmp=p->pt; p->pt=q->pt; q->pt=tmp; p=p->next; } } //Tao danh sach moi void create_list(list **first) { int n; list *p; cout << "\nNhap gia tri: "; cin >> n;flushall(); while(n!=0) { p=new node; p->pt=n; if(*first==NULL) *first=p; else last->next=p; last=p; p->next=NULL; cout << "\nNhap gia tri: "; cin >> n;flushall(); } } //Menu chuong trinh int menu() { int n; do { cout << "\n1. Tao danh sach"; cout << "\n2. In danh sach"; cout << "\n3. Xoa phan tu"; cout << "\n4. Chen phan tu vao danh sach"; cout << "\n5. Dao nguoi danh sach"; cout << "\n6. Tinh tong gia tri cac phan tu trong danh sach"; cout << "\n7. Tinh gia tri trung binh gia tri cac phan tu trong danh sach"; cout << "\n8. Dem so phan tu trong danh sach"; cout << "\n9. Nhap tiep vao danh sach"; cout << "\n10. In ra phan tu co gia tri nho nhat trong danh sach"; cout << "\n11. Sap xep danh sach tang dan"; cout << "\n12. Xoa toan bo danh sach"; cout << "\n\n0. Thoat chuong trinh"; cout << "\n\n\tMoi ban chon tinh nang: "; cin >> n; } while(n<0 || n>12); return n; } //Chuong trinh chinh void main() { int chucnang; do { chucnang=menu(); flushall(); switch(chucnang) { case 0: {break;} case 1: {system("cls");clear_list(&first);create_list(&first);system("cls");//create_new_list(ds2); break;} case 2: {system("cls");print_list(first);getch();break;} case 3: {system("cls");del_node(&first);getch();break;} case 4: {system("cls");insert_node(&first);getch();break;} case 5: {system("cls");reverse_list(&first);getch();break;} case 6: {system("cls");cout << "\nTong gia tri cac phan tu trong danh sach: "<<sum_list(first);getch();break;} case 7: {system("cls");cout << "\nGia tri trung binh cac phan tu trong danh sach: "<<avg_list(first);getch();break;} case 8: {system("cls");cout << "\nSo phan tu trong danh sach: "<<count_list(first);getch();break;} case 9: {system("cls");create_list(&first);getch();break;} case 10: {system("cls");cout << "\nGia tri nho nhat trong danh sach: " << min_list(first)->pt;getch();break;} case 11: {system("cls");sort_list(&first);getch();break;} case 12: {system("cls");clear_list(&first);getch();break;} } } while(chucnang!=0); } Còn đây là code của mình lúc viết, mình không sử dụng các dấu "**" và "*" trong quá trình viết cho bớt nhập nhằng và dễ nhìn PHP: #include<iostream> using namespace std; //Khai bao cau truc struct node { int pt; struct node *next; }; typedef node *list; list first,last; //Xoa sach cac node trong danh sach va khoi tao danh sach void clear_list(list &first) { list p=first; while(first!=NULL) { first=p->next; delete(p); p=first; } } //In danh sach void print_list(list first) { if(first==NULL) cout << "\nDanh sach rong"; else { list p=first; cout << "\nDanh sach:\n "; while(p!=NULL) { cout << p->pt << "\t"; p=p->next; } } } //Dem so phan tu trong danh sach int count_list(list first) { list p=first; int c=1; while(p->next!=NULL) { p=p->next; c++; } return c; } //Tinh tong gia tri cac phan tu trong danh sach int sum_list(list first) { list p=first; int s=0; if(first==NULL) { cout << "\nDanh sach rong\n"; return 0; } else { while(p!=NULL) { s=s+p->pt; p=p->next; } } return s; } //Tinh gia tri trung binh cac phan tu trong danh sach float avg_list(list first) { list p=first; float avg; if(first==NULL) { cout << "\nDanh sach rong\n"; return 0; } return avg=(float)sum_list(p)/(float)count_list(p); } //Tra ve node nam o vi tri n list position_node(list first,int n) { list p=first; int c=1; while(c<n) { p=p->next; c++; } return p; } //Chen vao dau danh sach void insert_first(list &first, int data) { list p; p=new node; p->pt=data; p->next=first; first=p; } //Chen cuoi danh sach void insert_last(int data) { list p; p=new node; p->pt=data; last->next=p; last=p; p->next=NULL; } //Ham chen node vao danh sach void insert_node(list &first) { int n,x,c; list p=first; if(p==NULL) cout << "\nDanh sach rong"; else { cout << "\nNhap vi tri can chen: "; cin >> n; c=count_list(p); if(n<1 || n>(c+1)) cout << "\nVi tri khong hop le"; else { cout << "\nNhap gia tri cho phan tu: "; cin >> x; if(n==1) insert_first(first,x); else { c=count_list(p); if(n==c+1) insert_last(x); else { list q; q=new node; q->pt=x; q->next=position_node(p,n-1)->next; position_node(p,n-1)->next=q; } } } } } //Xoa node dau danh sach void del_first(list &first) { list p; p=first; first=p->next; } //Xoa node cuoi danh sach void del_last(list &first) { list p=first; int c=1; int n=count_list(p); while(c<n-1) { p=p->next; c++; } delete(last); last=p; p->next=NULL; } //Xoa 1 node bat ki trong danh sach void del_node(list &first) { list p=first; int n,c; if(first==NULL) cout << "\nDanh sach rong"; else { cout << "\nNhap vi tri can xoa: "; cin >> n; c=count_list(p); if(n<1 || n>c+1) cout << "\nVi tri khong hop le"; else { if(n==1) del_first(first); else { c=count_list(p); if(n==c) del_last(first); else { list q,t; q=position_node(p,(n-1)); t=position_node(p,n); q->next=t->next; delete(t); } } } } } //Dao nguoc danh sach void reverse_list(list &first) { if(first==NULL) return; list current,previous; current=NULL; previous=NULL; while(first) { current=first; first=first->next; current->next=previous; previous=current; } first=current; } //Tim min list min_list(list first) { list p=first,min=p; while(p) { if(p->pt<min->pt) min=p; else p=p->next; } return min; } //Sap xep tang dan void sort_list(list &first) { list p=first,q; int tmp; while(p->next) { q=min_list(p); tmp=p->pt; p->pt=q->pt; q->pt=tmp; p=p->next; } } //Tao danh sach moi void create_list(list &first) { int n; list p; cout << "\nNhap gia tri: "; cin >> n;flushall(); while(n!=0) { p=new node; p->pt=n; if(first==NULL) first=p; else last->next=p; last=p; p->next=NULL; cout << "\nNhap gia tri: "; cin >> n;flushall(); } } //Menu chuong trinh int menu() { int n; do { cout << "\n1. Tao danh sach"; cout << "\n2. In danh sach"; cout << "\n3. Xoa phan tu"; cout << "\n4. Chen phan tu vao danh sach"; cout << "\n5. Dao nguoi danh sach"; cout << "\n6. Tinh tong gia tri cac phan tu trong danh sach"; cout << "\n7. Tinh gia tri trung binh gia tri cac phan tu trong danh sach"; cout << "\n8. Dem so phan tu trong danh sach"; cout << "\n9. Nhap tiep vao danh sach"; cout << "\n10. In ra phan tu co gia tri nho nhat trong danh sach"; cout << "\n11. Sap xep danh sach tang dan"; cout << "\n12. Xoa toan bo danh sach"; cout << "\n\n0. Thoat chuong trinh"; cout << "\n\n\tMoi ban chon tinh nang: "; cin >> n; } while(n<0 || n>12); return n; } //Chuong trinh chinh void main() { int chucnang; do { chucnang=menu(); flushall(); switch(chucnang) { case 0: {break;} case 1: {system("cls");clear_list(first);create_list(first);system("cls");break;} case 2: {system("cls");print_list(first);getch();break;} case 3: {system("cls");del_node(first);getch();break;} case 4: {system("cls");insert_node(first);getch();break;} case 5: {system("cls");reverse_list(first);getch();break;} case 6: {system("cls");cout << "\nTong gia tri cac phan tu trong danh sach: "<<sum_list(first);getch();break;} case 7: {system("cls");cout << "\nGia tri trung binh cac phan tu trong danh sach: "<<avg_list(first);getch();break;} case 8: {system("cls");cout << "\nSo phan tu trong danh sach: "<<count_list(first);getch();break;} case 9: {system("cls");create_list(first);getch();break;} case 10: {system("cls");cout << "\nGia tri nho nhat trong danh sach: " << min_list(first)->pt;getch();break;} case 11: {system("cls");sort_list(first);getch();break;} case 12: {system("cls");clear_list(first);getch();break;} } } while(chucnang!=0); } chúc vui!
Dùng dấu * là con trỏ chỉ tới giá trị của ô nhớ. ** là con trỏ trỏ tới con trỏ đó. Khi bạn ghi dấu * là làm việc với giá trị, không để dấu * là làm việc với địa chỉ ô nhớ. Ở trên bạn khai báo biến toàn cục nên không cần dùng con trỏ để tham chiếu. Danh sách liên kết dùng nhiều trong cấp phát bộ nhớ động, cây. Hạn chế trong việc sắp xếp, tìm kiếm nên khi dùng thường chuyển qua danh sách đặc sau đó chuyển lại. Bài làm khá tốt !
mấy buổi đầu học về danh sách liên kết, nhìn vào slide mà hok hiểu mấy cái dấu đó nó nó ý nghĩa như thế nào, lên search thì người ta cũng nói như integer vậy, cũng hok hiểu luôn, thế là bỏ nguyên tuần ra ngâm CTDL, h cũng có chút kiến thức nông cạn về nó và đồng thời cũng hiểu luôn mấy cái dấu đó nó làm việc như thế nào
Thực ra việc giải thích cho hiểu là một việc không dễ dàng, vì CTDL trường dạy phụ thuộc vào ngôn ngữ C để gần với việc cài đặt. Cuối cùng thứ gây khó dễ cho việc hiểu lại là ngôn ngữ và kiến thức của người giải thích chứ không hẳn là CTDL. bạn takechj code tốt đấy, nắm được phần này qua phần sau khá dễ dàng, vì phần sau chủ yếu là ứng dụng của danh sách. Mã: [COLOR=#000000][COLOR=#FF8000]//Dao nguoc danh sach [/COLOR][COLOR=#0000BB]void reverse_list[/COLOR][COLOR=#007700](list **[/COLOR][COLOR=#0000BB]first[/COLOR][COLOR=#007700]) { if(*[/COLOR][COLOR=#0000BB]first[/COLOR][COLOR=#007700]==[/COLOR][COLOR=#0000BB]NULL[/COLOR][COLOR=#007700]) return; list *[/COLOR][COLOR=#0000BB]current[/COLOR][COLOR=#007700],*[/COLOR][COLOR=#0000BB]previous[/COLOR][COLOR=#007700],*[/COLOR][COLOR=#0000BB]f[/COLOR][COLOR=#007700]=*[/COLOR][COLOR=#0000BB]first[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]current[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]NULL[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]previous[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]NULL[/COLOR][COLOR=#007700]; while([/COLOR][COLOR=#0000BB]f[/COLOR][COLOR=#007700]!=[/COLOR][COLOR=#0000BB]NULL[/COLOR][COLOR=#007700]) { [/COLOR][COLOR=#0000BB]current[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]f[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]f[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]f[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000BB]next[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]current[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000BB]next[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]previous[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]previous[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]current[/COLOR][COLOR=#007700]; } *[/COLOR][COLOR=#0000BB]first[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]current[/COLOR][COLOR=#007700]; } [/COLOR][/COLOR] Cái này hơi phức tạp. đơn giản hơn ta chèn từng phần tử của P vào đầu danh sách Q là đảo ngược (Stack). [COLOR=#000000 ! important][FONT=Arial ! important][/FONT][/COLOR]
Thấy các bạn nói về dslk rất hay nên mình cũng xin góp vui. Dưới đây là bài Quản Lý Sinh Viên viết bằng dslk đơn(đồ án cơ sở của mình năm ngoái), bạn nào có hứng thú thì tham khảo hì........ Mã: #include <conio.h> #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <string.h> #include <ctype.h> #include <math.h> #define msk14 142121000 #define TRUE 1 #define FALSE 0 typedef struct sinhvien { long masv; int nsinh; char hoten[20],quequan[10],lop[5],gt[5]; }; typedef struct node { sinhvien A; node *next; }; void khoitaods(node*&L) { L=NULL; } node* taonode(sinhvien x) { node* p; p = new node; p->A = x; p->next = NULL; } int ktradsrong(node*L) { if(L==NULL) return (TRUE); return(FALSE); } void themdau(node*&L,sinhvien n) { node*p=new node; p->A=n; p->next=NULL; if(L==NULL) L=p; else { p->next=L; L=p; } } void themcuoi(node*&L,sinhvien n) { node*p=new node; p->A=n; p->next=NULL; if(L==NULL) L=p; else { node*q=L; while(q->next!=NULL) q=q->next; q->next=p; } } void nhapthem(node*&L,sinhvien &n) {int d; cout<<"\nho ten:"; fflush(stdin);gets(n.hoten); while(1){ cout<<"\nma so(nhap du 9so 142121...):"; if(cin>>n.masv) { if(n.masv<=msk14||n.masv>msk14+999) cout<<"nhap lai:"; else break; } else { cin.clear(); cin.ignore(); cout<<"\nnhap lai"; } } node*p=L; while(p!=NULL) { if(n.masv==p->A.masv) { cout<<"\nMa sinh vien da co."; cout<<"\nNhap lai ma sinh vien:"; cin>>n.masv; }else p=p->next; } cout<<"\nLop :"; fflush(stdin);gets(n.lop); while(1){cout<<"\nNam sinh: "; if(cin>>n.nsinh) { if(n.nsinh<1000||n.nsinh>=10000) cout<<"\nNam sinh nhap sai. Nhap lai"; else break; } else { cin.clear(); cin.ignore(); cout<<"\nNam sinh nhap sai. Nhap lai"; } } cout<<"\nGioi tinh: "; fflush(stdin);gets(n.gt); cout<<"\nQue Quan: "; fflush(stdin);gets(n.quequan); } void nhapsv(node*&L,sinhvien&n) { int i=1;char c; do{ cout<<"\nnhap sinh vien thu"<<i; cout<<"\nBan co mun nhap khong (Y/N): "; cin>>c; if(c=='y') { nhapthem(L,n); themcuoi(L,n); i++; } if(c=='n') break; } while(1); cout<<"\nda nhap xong danh sach."; getch(); } void duyetds(node*L) { char c; if(L==NULL) printf("\n Danh sach rong"); else if(L!=NULL) { cout<<" ho ten\t maso\t Lop\t nam sinh gioi tinh que quan\n"; node*p=L; while(p!=NULL) { printf("\n %-20s%-15d%-12s%-12d%-10s%-20s",p->A.hoten,p->A.masv,p->A.lop,p->A.nsinh,p->A.gt,p->A.quequan); cout<<"\n"; p=p->next; } }printf("\nDa duyet xong danh sach");getch(); } void themvtri_k(node*&L, sinhvien n, int k) { if(k<1) printf("\n Vi tri khong hop le"); else if(k==1) { themdau(L,n); printf("\nsinh vien da duoc bo sung"); } else { node*p=L;int i=1; while(p!=NULL && i<k-1) { i=i+1; p=p->next; } if(p==NULL) printf("\n Vi tri khong hop le"); else { node*t=new node; t->A=n; t->next=p->next; p->next=t; printf("\nsinh vien da duoc bo sung"); } } } void docfile(node*&L) { int n; sinhvien x; FILE* a = fopen("intput.txt","rt"); if(a!=NULL) { fscanf(a,"%d",&n); for(int i=1;i<=n;i++) { fscanf(a,"%s%d%s%d%s%s",x.hoten,&x.masv,x.lop,&x.nsinh,x.gt,x.quequan); node* p =taonode(x); themcuoi(L,x); } fclose(a); } } void xoadau(node*&L) { node*p=L; if(L==NULL) printf("\n Danh sach rong"); else { node*q=p;p=p->next;L=p; printf("\n %-17s%-15d%-15s%-12d%-10s%-20s",q->A.hoten,q->A.masv,q->A.lop,q->A.nsinh,q->A.gt,q->A.quequan); delete q; }getch(); } void xoacuoi(node*&L) { if(L==NULL) printf("\n Danh sach rong"); else { node*p=L; while(p->next->next!=NULL) p=p->next; node*q=p->next; p->next=NULL; printf("\n %-17s%-15d%-15s%-12d%-10s%-20s",q->A.hoten,q->A.masv,q->A.lop,q->A.nsinh,q->A.gt,q->A.quequan); delete q; }getch(); } void xoavtri_k(node*&L, int&k) { int i; if(L==NULL) printf("\n Danh sach rong"); else if(k<1) cout<<"vi tri xoa ko hop le"; else if(k==1) { node*q=L; L=L->next; printf("\n %-17s%-15d%-15s%-12d%-10s%-20s",q->A.hoten,q->A.masv,q->A.lop,q->A.nsinh,q->A.gt,q->A.quequan); delete q; } else { node*p=L;int i=1; while(p!=NULL && i<k-1) { i=i+1; p=p->next; } if(p==NULL||p->next==NULL) printf("\n Sinh vien loai bo khong hop le"); else { node*q=p->next;p->next=q->next; printf("\n sinh vien duoc loai bo"); printf("\n %-17s%-15d%-15s%-12d%-10s%-20s",q->A.hoten,q->A.masv,q->A.lop,q->A.nsinh,q->A.gt,q->A.quequan); delete q; } }getch(); } void sapxepds(node*&L) { node*p; sinhvien tam; if(L==NULL) cout<<"danh sach rong"; else { { p=L; while(p!=NULL) { node*q=p->next; while(q!=NULL) { if(p->A.masv>q->A.masv) { tam=p->A; p->A=q->A; q->A=tam; } q=q->next; } p=p->next; } } cout<<" ho ten\t maso\t Lop\t nam sinh gioi tinh que quan\n"; p=L; while(p!=NULL) { printf("\n %-17s%-15d%-15s%-12d%-10s%-20s",p->A.hoten,p->A.masv,p->A.lop,p->A.nsinh,p->A.gt,p->A.quequan); p=p->next; }printf("\n Danh sach da duoc sap xep"); }getch(); } void timptu(node*&L, int masv) { node*p=L; while(p!=NULL && p->A.masv!=masv) p=p->next; if(p==NULL) printf("\nkhong co sinh vien can tim"); else { printf("\n Sinh vien can tim\n"); cout<<" ho ten\t maso\t Lop\t nam sinh gioi tinh que quan\n"; printf("\n %-17s%-15d%-15s%-12d%-10s%-20s",p->A.hoten,p->A.masv,p->A.lop,p->A.nsinh,p->A.gt,p->A.quequan); printf("\nDa tim xong"); } getch(); } void main() { node*L; sinhvien n; khoitaods(L); docfile(L); int vtri;char c; do { printf("\n ********* MENU CHUONG TRINH *********"); printf("\n"); printf("\n CHUONG TRINH QUAN LY SINH VIEN KHOA K14"); printf("\n 0- Nhap danh sach sinh vien"); printf("\n 1- Bo sung sinh vien vao dau danh sach"); printf("\n 2- Bo sung sinh vien vao cuoi danh sach"); printf("\n 3- Bo sung sinh vien vao trong danh sach"); printf("\n 4- Loai bo sinh vien o dau danh sach"); printf("\n 5- Loai bo sinh vien o cuoi danh sach"); printf("\n 6- Loai bo sinh vien trong danh sach"); printf("\n 7- Xem danh sach sinh vien"); printf("\n 8- sap xep danh sach theo ma so sinh vien"); printf("\n 9- Tim kiem mot sinh vien trong danh sach"); printf("\n E- Thoat khoi chuong trinh"); printf("\n"); cout<<"\nchon cong viec:"; cin>>c; switch(c){ case '0': nhapsv(L,n);getch();break; case '1': nhapthem(L,n); themdau(L,n); printf("\nsinh vien da duoc bo sung"); getch();break; case '2': nhapthem(L,n); themcuoi(L,n); printf("\nsinh vien da duoc bo sung");getch(); break; case '3': printf("\n Vi tri them:"); scanf("%d",&vtri); nhapthem(L,n); themvtri_k(L,n,vtri); getch(); break; case '4': xoadau(L); printf("\nsinh vien da duoc loai bo");getch();break; case '5': xoacuoi(L); printf("\nsinh vien da duoc loai bo");getch();break; case '6': fflush(stdin);printf("\n Vi tri loai bo:"); scanf("%d",&vtri); xoavtri_k(L,vtri); printf("\nsinh vien da duoc loai bo");getch();break; case '7': duyetds(L);getch(); break; case '8': sapxepds(L);getch();break; case '9': while(1){ cout<<"\nma so(nhap du 9so 142121...):"; if(cin>>n.masv) { if(n.masv<=msk14||n.masv>msk14+999) cout<<"nhap lai:"; else break; } else { cin.clear(); cin.ignore(); cout<<"\nnhap lai"; } } timptu(L, n.masv);getch();break; } } while(c!='E'); return 0; }
Cái bài này làm thêm nhập điểm thì sao nhĩ, vd: dtoan, dly, dhoa, dtb; - sắp xếp giảm dần theo dtb. - xếp vị thứ nữa. nhờ chỉ giáo thêm