Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    bài tập về danh sách móc nối đơn

    xin chào tất cả anh em tren diễn đàn.em là thành viên mới muốn thỉnh giáo các sư phụ[IMG]images/smilies/online.gif[/IMG].em mới tiếp xúc với lập trình và có một bài tập về danh sách móc nối đơn về quản lí danh sách sinh viên và một đoạn code xem trên mạng song em xem không hiểu mong anh em trên diễn đàn chỉ cho.những điều em cần hỏi em đều ghi chú ben cạnh đoạn code.nói chung anh em nào có thể chú thích bên mỗi dòng code ngoài những điều em hỏi cho em(vì cả bài code này em rất lơ mơ) em cảm kích vô cùng.tks tất cả anh em trên diễn đàn.
    #include<stdio.h>
    #include<iostream.h>
    #include<conio.h>
    #include<string.h>
    #include<alloc.h>
    #include<iomanip.h>
    struct svien
    {
    char masv[10];
    char hoten[20];
    float dtb;
    } ;
    struct dssv
    {
    svien ptu;//đây có phải là đoạn infor lưu trữ máv hoten dtb của node k?
    dssv *next;
    }*l;
    void nhap(dssv *&l)//ý nghĩa của *& trong khai báo hàm
    {
    dssv *q;//đoạn này có nghĩa là gì?
    char s[10];
    l=new dssv;
    q=l;
    cout<<"Nhap ma sinh vien: ";
    gets(l->ptu.masv);
    cout<<"Nhap ho ten sinh vien: ";
    gets(l->ptu.hoten);
    cout<<"Nhap diem trung binh: ";
    cin>>l->ptu.dtb;
    cout<<"Nhap ma sinh vien: ";
    gets(s);
    while(strcmp(s,""))
    {
    q->next=new dssv;
    q=q->next;
    strcpy(q->ptu.masv,s);
    cout<<"Nhap ho ten: ";
    gets(q->ptu.hoten);
    cout<<"Nhap diem tb: ";
    cin>>q->ptu.dtb;
    cout<<"Nhap ma sinh vien: ";
    gets(s);

    }
    q->next=NULL;
    }
    void hien(dssv *l)
    {
    while(l!=NULL)
    {
    cout<<"
    "<<l->ptu.masv<<setw(20)<<l->ptu.hoten<<setw(10)<<l->ptu.dtb<<"
    ";
    l=l->next;
    }
    }
    void sapxep(dssv *&l)
    {
    dssv *p,*q;
    svien tg;
    if(l!= NULL)
    {
    p=l;
    while(p->next!=NULL)
    {
    q= p->next;
    while(q!=NULL)
    {
    if(p->ptu.dtb<q->ptu.dtb)
    {
    tg=q->ptu;
    q->ptu=p->ptu;
    p->ptu=tg;
    }
    q=q->next;
    }
    p=p->next;
    }
    }
    }
    void xoa(dssv*&l)
    {
    if (l!=NULL)
    {dssv*p=l,*q;
    while(p->next!=NULL)
    {if (p->next->ptu.dtb<5.0)
    {
    q=p->next;
    p->next=q->next;
    delete q;
    }
    else p=p->next;
    }
    }
    }
    void chencuoi(dssv *&l)
    { dssv *q=new dssv;
    cout<<"Nhap ma sinh vien: ";
    gets(q->ptu.masv);
    cout<<"Nhap ho ten sinh vien: ";
    gets(q->ptu.hoten);
    cout<<"Nhap diem trung binh: ";
    cin>>q->ptu.dtb;
    q->next=NULL;
    if (l==NULL)
    l=q;
    else
    {dssv *p=l;
    while(p->next!=NULL)
    p=p->next;
    p->next=q;
    }
    }
    void chendau(dssv *&l)
    { dssv *q=new dssv;
    cout<<"Nhap ma sinh vien: ";
    gets(q->ptu.masv);
    cout<<"Nhap ho ten sinh vien: ";
    gets(q->ptu.hoten);
    cout<<"Nhap diem trung binh: ";
    cin>>q->ptu.dtb;
    q->next=l;
    l=q;
    }
    void chensx(dssv *&l)
    {
    dssv *q=new dssv;
    cout<<"Nhap ma sinh vien can chen: ";
    gets(q->ptu.masv);
    cout<<"Nhap ho ten sinh vien: ";
    gets(q->ptu.hoten);
    cout<<"Nhap diem trung binh: ";
    cin>>q->ptu.dtb;
    if(l==NULL)
    {l=q;}
    dssv *p;
    p=l;
    {
    while((p->next!=NULL)&&(p->next->ptu.dtb<q->ptu.dtb))
    {q->next=p->next;
    p->next=q;
    }
    }
    }

    main()
    {
    nhap(l);
    //l=NULL;
    hien(l);
    sapxep(l);
    cout<<"
    Sau khi sap xep: ";
    hien(l);
    //xoa(l);
    //cout<<"
    Sau khi xoa dtb <5: ";
    //chencuoi(l);
    //chendau(l);
    //hien(l);
    chensx(l);
    cout<<"
    Sau khi chen: ";
    hien(l);
    getch();
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Danh sách liên kết đơn là một dạng lưu trữ dữ liệu động. Phần từ trước móc nối với phần tử sau bằng một biến con trỏ.

    Mã:
    //Khai báo cấu trúc sinh viêntypedef struct SinhVien{     char MaSo[10];     char HoTen[20];     float DTB;} SV;//Định nghĩa danh sáchtypedef struct SVNode{     SV Data;//Dữ liệu     struct Node* pNext;//Con trỏ đến phần tử kế tiếp} Node;//Định nghĩa LIST sinh viên typedef struct SVLIST{     Node* Head;     Node* Tail;} LIST;
    Bây giờ viết thêm vài cái hàm CreateNode ,AddHead, AddTail, PrintList.. là xong.


    Mã:
    //Nhập từ bàn phím rùi truyền dữ liệu vào hàm này.Node* CreateNode(char* Ms, char Ten, float Diem){     Node* p = new Node;     if(p == NULL) exit(1);     strcpy(p->MaSo, Ms);     strcpy(p->HoTen, Ten);     p->DTB = Diem;     return p;}//Khởi tạo listvoid CreateList(LIST& L){     L.Head = L.Tail = NULL;}//Chèn đầuint AddHead(LIST &L,Node* p){     if(p == NULL) return 0;     if(L.Head == NULL){          L.Head = L.Tail = p;     }else{          p->pNext = L.Head;          L.Head = p;          }     return 1;}void PrintList(LIST L){     if(L.head){          printf("%s\t%s\t%f
    ",L.Head->MaSo,L.Head->HoTen,L.Head->DTB);          L.Head = L.Head->pNext;          PrintList(L);     }}
    Bạn phải học môn CTSL & GT trước. Bạn tự code thêm hàm AddTail, RemoveHead, RemoveTail,... nữa đi. Trình bày rõ ràng vào. Chúc bạn thành công.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •