Gửi Thông Điệp Yêu Thương vanbinh_bt nhắn với all: thi sao rồi mấy đồ...[Mr]-Boom nhắn với All K4: Chúc mọi người có 1 kỳ thi thật tốt !!lặng lẽ yêu nhắn với nguyễn ngọc huy: chúc mi có một kỳ thi tốt nha. vẫn nhớ mingocthongcctm05f nhắn với QNGAI: hãy sát cánh bên nhau.....hi.......trinhvh91 nhắn với TM03B: TM03B đoàn kết đi chơi cuối khóa nghenNgười vô cảm nhắn với nguyenlu: Ai vậy? T vẫn bước đi trong yêu thương mà ^^381 nhắn với neyugn: mong rằng chúng ta sẽ đi đến cái đích cuối cùng !nguyenlu nhắn với Người vô cảm: Hãy bước đi trong sự yêu thươnglenguyen_alone nhắn với Young Bin: tại sao nhok lại iu bin chứ nhỉ???hp thành công nhá!!binhcaolinh nhắn với Đen Trần: Cố gắng học chăm chỉ nhé em! Gửi Thông Điệp Yêu Thương


BẢNG GIÁ QUẢNG CÁO TẠI DIỄN ĐÀN 2MIT.ORG 2012

Hiện kết quả từ 1 tới 10 của 10

Chủ đề: Danh sách liên kết đơn - CTDL

  1. #1
    Tham gia ngày
    Nov 2010
    Đến từ
    Quán Bún Hải Vy
    Bài gửi
    323
    Cảm ơn
    133
    Được cảm ơn 127/76 bài viết
    4
    Advanced
     
     
    Số lần cộng|trừ: 0 lần

    Default Danh sách liên kết đơn - CTDL

    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 Code:
    #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 **firstint 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<|| 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<|| 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<|| 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 Code:
    #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 &firstint 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<|| 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<|| 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<|| 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!

    --------------------------------------------------
    Xem các chủ đề cùng chuyên mục:


    +3 EXP
    ______________________________________________________________________________________________

  2. Có tổng cộng 3 thành viên cảm ơn takechij cho bài viết này

    Cat-IT  (29-03-2011), chickenkon (05-04-2011), peutshf (29-03-2011)

  3. #2
    Tham gia ngày
    Sep 2009
    Đến từ
    LT3C Co., Ltd
    Tuổi
    21
    Bài gửi
    1,635
    Cảm ơn
    1,170
    Được cảm ơn 1,245/499 bài viết
    Blog Entries
    10
    8
    MASTER
     
     
    Số lần cộng|trừ: 3 lần

    Default

    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 !

    +1 EXP
    Hãy nghĩ tới những điều tốt đẹp

  4. #3
    Tham gia ngày
    Nov 2010
    Đến từ
    Quán Bún Hải Vy
    Bài gửi
    323
    Cảm ơn
    133
    Được cảm ơn 127/76 bài viết
    4
    Advanced
     
     
    Số lần cộng|trừ: 0 lần

    Default

    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

    +1 EXP
    ______________________________________________________________________________________________

  5. #4
    Tham gia ngày
    Sep 2009
    Đến từ
    LT3C Co., Ltd
    Tuổi
    21
    Bài gửi
    1,635
    Cảm ơn
    1,170
    Được cảm ơn 1,245/499 bài viết
    Blog Entries
    10
    8
    MASTER
     
     
    Số lần cộng|trừ: 3 lần

    Default

    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.
    Code:
    //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; 
    } 
    
    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][/COLOR]

    +1 EXP
    Hãy nghĩ tới những điều tốt đẹp

  6. Thành viên đã cảm ơn integer trong bài viết này là :

    Cat-IT  (29-03-2011)

  7. #5
    Tham gia ngày
    Aug 2009
    Bài gửi
    356
    Cảm ơn
    6
    Được cảm ơn 53/46 bài viết
    2
    Normal
     
     
    Số lần cộng|trừ: 0 lần

  8. #6
    Tham gia ngày
    Mar 2011
    Bài gửi
    181
    Cảm ơn
    16
    Được cảm ơn 14/13 bài viết
    4
    Beginner
     
     
    Số lần cộng|trừ: 0 lần

    Default

    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ì........
    Code:
    #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;
    }

    +5 EXP

  9. Thành viên đã cảm ơn trsa trong bài viết này là :

    takechij  (28-03-2011)

  10. #7
    Tham gia ngày
    Nov 2010
    Đến từ
    Quán Bún Hải Vy
    Bài gửi
    323
    Cảm ơn
    133
    Được cảm ơn 127/76 bài viết
    4
    Advanced
     
     
    Số lần cộng|trừ: 0 lần

    Default

    định ít bữa nữa share bài này nhưng bác trsa làm trước mất rồi

    ______________________________________________________________________________________________

  11. #8
    Tham gia ngày
    Mar 2011
    Bài gửi
    181
    Cảm ơn
    16
    Được cảm ơn 14/13 bài viết
    4
    Beginner
     
     
    Số lần cộng|trừ: 0 lần

    Default

    Trích Nguyên văn bởi takechij Xem bài viết
    định ít bữa nữa share bài này nhưng bác trsa làm trước mất rồi
    zậy cho mình xl nha


  12. #9
    Tham gia ngày
    Feb 2011
    Bài gửi
    261
    Cảm ơn
    159
    Được cảm ơn 51/37 bài viết
    3
    Advanced
     
     
    Số lần cộng|trừ: 1 lần

    Default

    thank takechj..


  13. #10
    Tham gia ngày
    Feb 2011
    Bài gửi
    1
    Cảm ơn
    0
    Được cảm ơn 0/0 bài viết
    1
    None
     
     
    Số lần cộng|trừ: 0 lần

    Default

    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


Thông tin về chủ đề này

Users Browsing this Thread

Hiện giờ đang có 1 người xem chủ đề này. (0 thành viên 1 khách)

     

Chủ đề giống nhau

  1. Trả lời: 1
    Bài mới gửi: 28-12-2010, 03:51 PM
  2. Sắp xếp trong danh sách liên kết
    By jinyotino in forum C/C++
    Trả lời: 0
    Bài mới gửi: 29-05-2010, 10:09 AM
  3. Danh sách liên kêt
    By jinyotino in forum C/C++
    Trả lời: 2
    Bài mới gửi: 16-05-2010, 09:44 PM
  4. Danh sách các Chi Đoàn liên kết làm trại
    By burnstop in forum Thông báo từ Đoàn trường
    Trả lời: 7
    Bài mới gửi: 23-03-2010, 05:21 PM
  5. Danh sách liên kết theo chiều thuận
    By LieuKyThien in forum C/C++
    Trả lời: 0
    Bài mới gửi: 17-08-2009, 04:57 PM

7412
Lượt xem

Share