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] Thông Báo Tuyển mod cho toàn diễn đàn


    Forum mới lập rất cần sự giúp đỡ của các bạn vậy nên bạn nào có khả năng thì đăng kí tham gia làm mod để quản lí, phát triển diễn đàn nhé!

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: 458


    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();
    }
     
  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