Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Hàm Sắp xếp nổi bọt trong Linked List

  1. #1
    Ngày gia nhập
    10 2012
    Bài viết
    0

    Mặc định Hàm Sắp xếp nổi bọt trong Linked List

    Em mới làm bài Danh sách liên kết. trong đó có phần Sort theo điểm thi giảm dần, em viết hàm đúng như trên Box C-việt đăng rùi nhưng nó bị lỗi gì ý ạ, em tìm mà không thấy, các Bro chỉ em với, em mới nhập môn gà lắm :(
    --------------------------------------------------------------------------------------------
    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    typedef struct pp {
        
    char name[100];
        
    int age;
        
    float score;
        
    struct pp *next;
    staff;
    void input(staff **pdau) {
        
    staff *p;
        
    int tuoi;
        
    float diem;
        
    char ht[100];
        *
    pdau=NULL;
        while(
    1){
            
    printf(" + Ho ten: ");
            
    gets(ht);
            if (
    ht[0]==0) break;
            if (*
    pdau==NULL) {
                *
    pdau=(staff*)malloc(sizeof(staff));
                
    p=*pdau;
            } else {
                
    p->next=(staff*)malloc(sizeof(staff));
                
    p=p->next;
            }
            
    strcpy(p->name,ht);
            
    printf(" + Tuoi: ");
            
    scanf("%d",&tuoi); // ???
            
    p->age=tuoi;
            
    printf(" + Diem thi: ");
            
    scanf("%f",&diem);
            
    p->score=diem;
            
    fflush(stdin);
            
    p->next=NULL;
        }
    }
    void output(staff *pdau) {
        
    staff *p;
        
    p=pdau;
        
    printf("\n\n\t\t\t      DANH SACH SINH VIEN\n\n");
        
    printf("\t\t+++++++++++++++++++++++++++++++++++++++++++++\n");
        
    printf("\t\t|    %-15s     | %-5s | %-5s |\n","HO TEN","TUOI","DIEM THI");
        
    printf("\t\t+++++++++++++++++++++++++++++++++++++++++++++\n");
        while(
    p!=NULL){
            
    printf("\t\t|   %-15s\t |%4d\t |  %6.3f  |\n",(*p).name,(*p).age,(*p).score);
            
    p=p->next;
        }
        
    printf("\t\t+++++++++++++++++++++++++++++++++++++++++++++\n\n");
    }
    void insert(staff **pdau){
        
    int ik;
        
    char ht[100];
        
    staff *t, *p=*pdau;
        
    float diem;
        
    int tuoi;
        
    t=(staff*)malloc(sizeof(staff));
        
    t->next=(staff*)malloc(sizeof(staff));
        
    printf("\n + NHAP VI TRI CAN CHEN: ");
        
    scanf("%d",&k);
        
    fflush(stdin);
        if(
    k==0){
             
    t->next=p;
             *
    pdau=t;
        } else {
        for (
    i=1;i<=k-1;i++) p=p->next;
        
    t->next=p->next;
        
    p->next=t;
        }
        
    printf(" + Ho ten: ");
        
    gets(ht);
        
    strcpy(t->name,ht);
        
    printf(" + Tuoi: ");
        
    scanf("%d",&tuoi);
        
    t->age=tuoi;
        
    printf(" + Diem Thi: ");
        
    scanf("%f",&diem);
        
    t->score=diem;
    }
    void erase(staff **pdauint k) {
        
    int  i;
        
    staff *q, *p=*pdau;
        if (
    k==1){
            *
    pdau=p->next;
            
    free(p);
        } else {
        for (
    i=1;i<=k-2;i++) p=p->next;
        
    q=p;
        
    p=p->next;
        
    q->next=p->next;
        
    free(p); 
        }
    }
    void erase_name(staff **pdau) {
        
    char ht[100];
        
    fflush(stdin);
        
    int dem=0;
        
    printf("Ten muon xoa: ");
        
    gets(ht);
        
    staff *p=*pdau;
        while(
    p!=NULL){
            
    dem++;
            if (
    strcmp(p->name,ht)==0) {    
            
    erase(&pdau,dem);
            break;
            } 
        
    p=p->next;
        }
    }
    void search(staff *pdau) {
        
    staff *p=pdau;
        
    char ht[100];
        
    fflush(stdin);
        
    printf("\n >> Nhap ten Sinh vien can tim thong tin: ");
        
    gets(ht);
        while(
    p!=NULL) {
            if(
    strcmp(p->name,ht)==0) break;
            
    p=p->next;
        }
        
    printf(" >> Thong tin Sinh Vien - %s - \n\n\t + Tuoi: %d\n\t + Diem thi: %6.3f",p->name,p->age,p->score);
    }
    int dem(staff *pdau) {
        
    staff *p=pdau;
        
    int t=0;
        while(
    p!=NULL) {
            
    t++;
            
    p=p->next;
        }
        return 
    t;
    }


    // Hàm sort đây ạ

    void sort(staff **pdau) {
        
    int ij;
        
    staff *p=*pdau, *q, *temp;
        
    temp=(staff*)malloc(sizeof(staff));
        for(
    p=*pdaup!=NULLp=p->next)
            for(
    q=p->nextq!=NULLq=q->next
                if (
    p->score q->score){
                    
    temp->name=p->namep->name=q->nameq->name=temp->name;
                    
    temp->age=p->agep->age=q->ageq->age=temp->age;
                    
    temp->score=p->scorep->score=q->scoreq->score=temp->score;            
            }
        
    free(temp);    
    }
    int main() {
        
    staff *pdau, *p;
        
    int km;
        
    char ht[100];
        
    input(&pdau);
        
    output(pdau);
        while(
    1){
            
    printf(" \n >> Chon hanh dong\n\t 1: In Danh Sach\n\t 2: Chen Them Nguoi\n\t 3: Xoa Du Lieu\n\t 4: Sap Xep Diem Giam Dan\n\t 5: Xoa Theo Ten\n\t 6: Tim Thong Tin\n\t 0: Thoat\n\n ");
            
    printf(" + Chon: "); scanf("%d",&k);
            switch(
    k) {
                case 
    1output(pdau); break;
                case 
    2insert(&pdau); break;
                case 
    3printf(" + Nhap Vi tri muon xoa: ");
                        
    scanf("%d",&m);
                        
    erase(&pdau,m); break;
                case 
    4sort(&pdau); break;
                case 
    5erase_name(&pdau); break;
                case 
    6search(pdau); break; 
                case 
    0: return 0;
            }
        }
        
    getch();

    ----------------------------------------------------------------------------------
    Mỗi phần Sort bị lỗi thôi các Bro ạ . Fix giúp em với

  2. #2
    Ngày gia nhập
    02 2010
    Bài viết
    113

    Trích dẫn Nguyên bản được gửi bởi itviapro Xem bài viết
    Em mới làm bài Danh sách liên kết. trong đó có phần Sort theo điểm thi giảm dần, em viết hàm đúng như trên Box C-việt đăng rùi nhưng nó bị lỗi gì ý ạ, em tìm mà không thấy, các Bro chỉ em với, em mới nhập môn gà lắm :(
    --------------------------------------------------------------------------------------------
    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    typedef struct pp {
        
    char name[100];
        
    int age;
        
    float score;
        
    struct pp *next;
    staff;
    void input(staff **pdau) {
        
    staff *p;
        
    int tuoi;
        
    float diem;
        
    char ht[100];
        *
    pdau=NULL;
        while(
    1){
            
    printf(" + Ho ten: ");
            
    gets(ht);
            if (
    ht[0]==0) break;
            if (*
    pdau==NULL) {
                *
    pdau=(staff*)malloc(sizeof(staff));
                
    p=*pdau;
            } else {
                
    p->next=(staff*)malloc(sizeof(staff));
                
    p=p->next;
            }
            
    strcpy(p->name,ht);
            
    printf(" + Tuoi: ");
            
    scanf("%d",&tuoi); // ???
            
    p->age=tuoi;
            
    printf(" + Diem thi: ");
            
    scanf("%f",&diem);
            
    p->score=diem;
            
    fflush(stdin);
            
    p->next=NULL;
        }
    }
    void output(staff *pdau) {
        
    staff *p;
        
    p=pdau;
        
    printf("\n\n\t\t\t      DANH SACH SINH VIEN\n\n");
        
    printf("\t\t+++++++++++++++++++++++++++++++++++++++++++++\n");
        
    printf("\t\t|    %-15s     | %-5s | %-5s |\n","HO TEN","TUOI","DIEM THI");
        
    printf("\t\t+++++++++++++++++++++++++++++++++++++++++++++\n");
        while(
    p!=NULL){
            
    printf("\t\t|   %-15s\t |%4d\t |  %6.3f  |\n",(*p).name,(*p).age,(*p).score);
            
    p=p->next;
        }
        
    printf("\t\t+++++++++++++++++++++++++++++++++++++++++++++\n\n");
    }
    void insert(staff **pdau){
        
    int ik;
        
    char ht[100];
        
    staff *t, *p=*pdau;
        
    float diem;
        
    int tuoi;
        
    t=(staff*)malloc(sizeof(staff));
        
    t->next=(staff*)malloc(sizeof(staff));
        
    printf("\n + NHAP VI TRI CAN CHEN: ");
        
    scanf("%d",&k);
        
    fflush(stdin);
        if(
    k==0){
             
    t->next=p;
             *
    pdau=t;
        } else {
        for (
    i=1;i<=k-1;i++) p=p->next;
        
    t->next=p->next;
        
    p->next=t;
        }
        
    printf(" + Ho ten: ");
        
    gets(ht);
        
    strcpy(t->name,ht);
        
    printf(" + Tuoi: ");
        
    scanf("%d",&tuoi);
        
    t->age=tuoi;
        
    printf(" + Diem Thi: ");
        
    scanf("%f",&diem);
        
    t->score=diem;
    }
    void erase(staff **pdauint k) {
        
    int  i;
        
    staff *q, *p=*pdau;
        if (
    k==1){
            *
    pdau=p->next;
            
    free(p);
        } else {
        for (
    i=1;i<=k-2;i++) p=p->next;
        
    q=p;
        
    p=p->next;
        
    q->next=p->next;
        
    free(p); 
        }
    }
    void erase_name(staff **pdau) {
        
    char ht[100];
        
    fflush(stdin);
        
    int dem=0;
        
    printf("Ten muon xoa: ");
        
    gets(ht);
        
    staff *p=*pdau;
        while(
    p!=NULL){
            
    dem++;
            if (
    strcmp(p->name,ht)==0) {    
            
    erase(&pdau,dem);
            break;
            } 
        
    p=p->next;
        }
    }
    void search(staff *pdau) {
        
    staff *p=pdau;
        
    char ht[100];
        
    fflush(stdin);
        
    printf("\n >> Nhap ten Sinh vien can tim thong tin: ");
        
    gets(ht);
        while(
    p!=NULL) {
            if(
    strcmp(p->name,ht)==0) break;
            
    p=p->next;
        }
        
    printf(" >> Thong tin Sinh Vien - %s - \n\n\t + Tuoi: %d\n\t + Diem thi: %6.3f",p->name,p->age,p->score);
    }
    int dem(staff *pdau) {
        
    staff *p=pdau;
        
    int t=0;
        while(
    p!=NULL) {
            
    t++;
            
    p=p->next;
        }
        return 
    t;
    }


    // Hàm sort đây ạ

    void sort(staff **pdau) {
        
    int ij;
        
    staff *p=*pdau, *q, *temp;
        
    temp=(staff*)malloc(sizeof(staff));
        for(
    p=*pdaup!=NULLp=p->next)
            for(
    q=p->nextq!=NULLq=q->next
                if (
    p->score q->score){
                    
    temp->name=p->namep->name=q->nameq->name=temp->name;
                    
    temp->age=p->agep->age=q->ageq->age=temp->age;
                    
    temp->score=p->scorep->score=q->scoreq->score=temp->score;            
            }
        
    free(temp);    
    }
    int main() {
        
    staff *pdau, *p;
        
    int km;
        
    char ht[100];
        
    input(&pdau);
        
    output(pdau);
        while(
    1){
            
    printf(" \n >> Chon hanh dong\n\t 1: In Danh Sach\n\t 2: Chen Them Nguoi\n\t 3: Xoa Du Lieu\n\t 4: Sap Xep Diem Giam Dan\n\t 5: Xoa Theo Ten\n\t 6: Tim Thong Tin\n\t 0: Thoat\n\n ");
            
    printf(" + Chon: "); scanf("%d",&k);
            switch(
    k) {
                case 
    1output(pdau); break;
                case 
    2insert(&pdau); break;
                case 
    3printf(" + Nhap Vi tri muon xoa: ");
                        
    scanf("%d",&m);
                        
    erase(&pdau,m); break;
                case 
    4sort(&pdau); break;
                case 
    5erase_name(&pdau); break;
                case 
    6search(pdau); break; 
                case 
    0: return 0;
            }
        }
        
    getch();

    ----------------------------------------------------------------------------------
    Mỗi phần Sort bị lỗi thôi các Bro ạ . Fix giúp em với
    ở trên khai báo :
    C Code:
    1. char name[100];

    xuống dưới thì:
    C Code:
    1. temp->name=p->name;
    2.  p->name=q->name;
    3.  q->name=temp->name;
    đâu có gán kiểu này được đâu...???:S

    p/s:tại sao không khai báo 1 struct thông tin riêng, rồi sau đó khai báo 1 NODE có thành phần dữ liệu là struct thông tin đã được khai báo nhỉ...????
    Đã được chỉnh sửa lần cuối bởi utkunglt : 05-01-2013 lúc 03:12 PM.

  3. #3
    Ngày gia nhập
    02 2010
    Bài viết
    113

    ủa mà cái này đâu phải là nổi bọt...???? :S

Các đề tài tương tự

  1. Đệ Quy sử dụng trong Linked-List như thế nào?
    Gửi bởi qhai_2009 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 13-11-2010, 04:37 AM
  2. Lùi về một vị trí trong linked list
    Gửi bởi dungtimtoinua2008 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-05-2010, 02:43 PM
  3. sự tự sắp xếp trong Singly linked list với C#?
    Gửi bởi nhocvaly trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 26-05-2010, 10:20 AM
  4. hàm đổi vị trí 2 nodes trong linked list
    Gửi bởi blue_rubi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 27-03-2009, 03:47 PM
  5. Cài đặt stack bằng linked-list trong C++
    Gửi bởi aredspider trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 03-03-2009, 01:34 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn