qq_35153501 2016-11-30 16:51 采纳率: 0%
浏览 807

求解答 大神帮个忙 改了声明错误更多了 如何更改

  • 写回答

1条回答 默认 最新

  • shen_wei 2016-12-01 07:10
    关注
     #define n 10
    #define m 10
    #define minisize 100
    struct
    {
        float address;
        float length;
        int flag;
    }used_table[n];
    struct
    {
        float address;
        float length;
        int flag;
    }free_table[m];
    
    int allocate(char J,float xk)
    {
        int i,k;
        float ad;
        k=-1;
        for(i=0;i<m;i++)
        {
            if(free_table[i].length>=xk&&free_table[i].flag==1)
            {
                if(k==-1 || free_table[i].length < free_table[k].length)
                {   
                    k=i;
                }
            }
        }
        if(k==-1)
        {
            cout<<"无可用空闲区"<<endl;
            return 0;
        }
        if(free_table[k].length-xk<=minisize)
        {
            free_table[k].flag=0;
            ad=free_table[k].address;
            xk=free_table[k].length;
        }
        else
        {
            free_table[k].length=free_table[k].length-xk;
            ad=free_table[k].address+free_table[k].length;
        }
        i=0;
        while(used_table[i].flag!=0&&i<n)
            i++;
        if(i>=n)
        {
            cout<<"无表目填写已分分区,错误"<<endl;
            if(free_table[k].flag==0)
            {
                free_table[k].flag=1;
            }
            else
                free_table[k].length=free_table[k].length+xk;
            return 0;
        }
        else
        {
            used_table[i].address=ad;
            used_table[i].length=xk;
            used_table[i].flag=1;
        }
        return 1;
    }
    
    int reclaim(char J)
    {
        int i,k,j,s,t;
        float S,L;
        s=0;
        while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n)
            s++;
        if(s>=n)
        {
            cout<<"找不到该作业"<<endl;
            return 0;
        }
    
        used_table[s].flag=0;
    
        S=used_table[s].address;
        L=used_table[s].length;
        j=-1;
        k=-1;
        i=0;
    
        while(i<m&&(j==-1||k==-1))
        {
            if(free_table[i].flag==0)
            {
                if(free_table[i].address+free_table[i].length==S)
                    k=i;
                if(free_table[i].address==S+L)
                    j=i;
            }
            i++;
        }
        if(k!=-1)
            if(j!=-1)
            {
                free_table[k].length=free_table[j].length+free_table[k].length+L;
                free_table[j].flag=0;
            }
            else
                free_table[k].length=free_table[k].length+L;
        else
            if(j!=-1)
            {
                free_table[j].address=S;
                free_table[j].length=free_table[j].length+L;
            }
            else
            {
                t=0;
                while(free_table[t].flag==1&&t<m)
                    t++;
                if(t>=m)
                {
                    cout<<"内存空闲表没有空间,收回空间失败"<<endl;
                    used_table[s].flag=J;
                    return 0;
                }
                free_table[t].address=S;
                free_table[t].length=L;
                free_table[t].flag=1;
            }
            return 1;
    }
    int main()
    {
        int i,a;
        float xk;
        char J;
    
        free_table[0].address=10240;
        free_table[0].length=102400;
        free_table[0].flag=1;
        for(i=1;i<m;i++)
            free_table[i].flag=0;
    
        for(i=0;i<n;i++)
            used_table[i].flag=0;
        while(1)
        {
            cout<<"选择功能项(0-退出,1-分配内存,2-回收内存,3-显示内存)"<<endl;
            cout<<"选择功项(0~3):";
            cin>>a;
            switch(a)
            { 
            case 0:exit(0);
            case 1:
                cout<<"输入作业名J和作业所需长度xk:";
                cin>>J>>xk;
                allocate(J,xk);
                break;
            case 2:
                cout<<"输入要回收分区的作业名";
                cin>>J;
                reclaim(J);
                break;
            case 3:
                cout<<"输出空闲区表:"<<endl;
                //m = getch();
                cout<<"   起始地址  分区长度  标志"<<endl;
                for(i=0;i<m;i++)
                    cout<<free_table[i].address<<free_table[i].length<<free_table[i].flag<<endl;
                cout<<"按任意键,输出已分分区表"<<endl;
                for(i=0;i<n;i++)
                    if(used_table[i].flag!=0)
                        cout<<used_table[i].address<<used_table[i].length<<used_table[i].flag<<endl;
                    else
                        cout<<used_table[i].address<<used_table[i].length<<used_table[i].flag<<endl;
                break;
            default:
                cout<<"没有该选项"<<endl;
            }
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖