1. Hãy ủng hộ PhienBanMoi.Com bằng cách LIKE trang FANPAGE , GOOGLE+ dưới mỗi bài viết hoặc chia sẻ website nếu thấy hữu ích. Trân trọng cảm ơn!
  2. [Thông Báo] Tuyển thành viên viết bài KIẾM TIỀN trên PhienBanMoi.Com


    Nhằm mục đích phát triển Phienbanmoi.com hơn nữa, có thêm các bài viết thông tin thực sự hữu ích từ những thành viên tích cực. BQT đã quyến định tạo ra cơ hội kiếm tiền từ các bài viết được đăng tải và chia sẻ trên diễn đàn

Mấy pro cho e hỏi.....về code cấu trúc dữ liệu 2 đang cần gấp.....

Thảo luận trong 'Pascal, C , C++' bắt đầu bởi trangia1221, 13 Tháng mười hai 2013.

  1. trangia1221 Member Chính Thức

    32
    0
    6

    Lượt xem: 484


    hiện em đang nghiên cứu cấu trúc dữ liệu 2 mà e làm phần trộn đa lối cân bằng em đã viết được code nhưng không hiểu sau no chỉ hiện ra chứ không sấp xếp..không biết bị sai ở chổ nào..có pro nào biết chỉ giúp em đi ạ..e bó tay rồi cảm ơn các pro....
    #include"stdio.h"
    #include"conio.h"
    #include"stdlib.h"
    #include"string.h"
    #define n 4
    /**/
    void Copy(char *fa,char *ga)
    {
    int current;
    FILE *f,*g;
    f=fopen(fa,"w+");
    g=fopen(ga,"w+");
    while(!
    feof(f))
    {
    fread(&current,sizeof(current),1,f);
    fwrite(&current,sizeof(current),1,g);
    }
    fcloseall();
    }
    /**/ int Copy_run(FILE **f,FILE **fx,int ele_start,int &ele_new_run)
    {
    int cur=ele_start,old,Eof;
    do
    {
    fwrite(&cur,sizeof(cur),1,*fx);
    old=cur;
    Eof=fread(&cur,sizeof(cur),1,*f);
    if(
    Eof<=0)
    {
    ele_new_run=NULL;
    return -
    1;// het file
    }
    }
    while(
    old<=cur);
    ele_new_run=cur;
    return
    0;
    }
    void Distribute_Run(char *fa,char *fax[],int &q)
    {
    int current,old,Eof,new_run=0,tx;
    int i=0;
    FILE *f,*fx[15];
    f=fopen(fa,"w+");
    for(
    i=0;i<n;i++)
    fx[i]=fopen(fax[i],"w+");
    Eof=fread(&current,sizeof(current),1,f);
    if(
    Eof<=0) return;
    do
    {
    Eof=Copy_run(&f,&fx[i],current,new_run);
    current=new_run;
    i=i%n+1;
    q++;
    }
    while(
    Eof>0);
    }
    /**/ void Distribute(char *fa,char *fax[],int &q)
    {
    FILE *f,*fx[7];
    f=fopen(fa,"w+");
    int j;
    for(
    int i=0;i<n;i++)
    {
    remove(fax[i]);
    fx[i]=fopen(fax[i],"w+");
    }
    j=n;
    q=0;
    int current,old;
    do
    {
    if(
    j<n-1) j++;
    else
    j=0;
    q++;
    fread(&current,sizeof(current),1,f);
    do
    {
    old=current;
    fwrite(&current,sizeof(current), 1, fx[j]);
    fread(&current,sizeof(current),1,f);
    }
    while(!
    feof(f)&&old<current);
    }
    while(!
    feof(f));
    }
    /**/ void Merge(char *fa[],int &q)
    {
    FILE *f[20];
    int i,j,k1,k2,min,mx,Eof,x,tx;
    int t[20],ta[20];
    int current[100],cur;
    for(
    i=0;i<2*n;i++)
    {
    t[i]=i;
    f[i]=fopen(fa[i],"w+");
    }
    do
    {
    if(
    q<n) k1=q;
    else
    k1=n;
    for(
    i=0;i<k1;i++)
    {
    fread(&current[i],sizeof(current[i]), 1, f[t[i]]);
    ta[i]=t[i];
    }
    q=0;
    j=n;
    do
    {
    k2=k1;
    q++;
    do
    {
    i=0;mx=0;
    min=current[i];
    while(
    i<k2-1)
    {
    i++;
    x=current[i];
    if(
    x<min)
    {
    min=x;
    mx=i;
    }
    }
    fwrite(&min,sizeof(min),1,f[t[j]]);
    Eof=fread(&cur, sizeof(cur), 1, f[ta[mx]]);
    if(
    Eof<=0)
    {
    remove(fa[ta[mx]]);
    ta[mx]=ta[k2];
    ta[k2]=ta[k1];
    k1=k1-1;
    k2--;
    }
    else
    {
    if(
    min>cur)
    {
    tx=ta[mx];
    ta[mx]=ta[k2];
    ta[k2]=tx;
    k2--;
    }
    }
    }
    while(
    k2!=0);
    if(
    j<n*2-1)
    j++;
    else
    j=n;
    }
    while(
    k1!=0);
    for(
    i=0;i<n;i++)
    {
    tx=t[i];
    t[i]=ta[n+i];
    t[n+i]=tx;
    }
    }
    while(
    q!=1);
    fcloseall();
    }
    /**/ void Taofile(char *filename,int k)
    {
    randomize();
    int t;
    FILE *f;
    f=fopen(filename,"w+");
    for(
    int i=0;i<k;i++)
    {
    t=random(100);
    fwrite(&t,sizeof(t),1,f);
    }
    fcloseall();
    }
    void xuat(char *filename)
    {
    int cur;
    FILE *f;
    f=fopen(filename,"rb");
    while(
    fread(&cur,sizeof(cur),1,f)>0)
    printf("%5d",cur);
    fcloseall();
    }
    /**/ void main()
    {
    char *filename[]={"D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt","D:\\TC\\f1.txt"};
    char*f="D:\\TC\\Viet.txt";
    clrscr();
    Taofile(f,20);
    int q;
    printf("Truoc Khi Sap Xep: \n");
    xuat(f);
    for(
    int i=0;i<n;i++)
    {
    Distribute(f,filename,q);
    Merge(filename,q);
    Copy(f,filename[0]);
    }
    printf("\n Sau Khi Sap Xep: \n");
    xuat(f);
    getch();
    }
     

    Bình Luận Bằng Facebook

  2. trangia1221

    trangia1221 Member Chính Thức

    32
    0
    6
    không ai giúp e hết vậy ta.............
     

Chia sẻ trang này