操作系统课程实验,想了一个下午了。。。三个省略号处是需要进行补充的内容,哪位达人帮帮忙啊 

#include "stdio.h"
#include "stdlib.h"
#include "iostream"
#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n 值为10*/
#define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/
#define minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于minisize,
则将该空闲分区全部分配,若大于minisize,则切割分配*/
using namespace std;
struct
{
    char name;
    float address; /*已分配分区起始地址*/
    float length; /*已分配分区长度,单位为字节*/
    int flag; /*已分配区表登记栏标志,用"0"表示空栏目*/
    }used_table[n]; /*已分配区表*/
struct
{
    float address; /*空闲区起始地址*/
    float length; /*空闲区长度,单位为字节*/
    int flag; /*空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配*/
}free_table[m]; /*空闲区表*/

int Getfree_table(float address,float size)
{
    if(address==0) return -1;

    for(int i=0;i<m;i++)
    {
        if((free_table[i].address+free_table[i].length==address)&&(free_table[i].flag==1))
            return i;
    }

    return -1;
}

int Getfree_table2(float address,float size)
{
    for(int i=0;i<m;i++)
    {
        if(address+size==free_table[i].address)
    
            return i;
    }
        return -1;
}

int GetTable()
{
    for(int i=0;i<n;i++)
    {
        if(used_table[i].flag==0)    { 
            cout<<i<<endl;
        return i;
        }
    }
    return -1;

}

int GetTable2(char J)//求分配表NAME为J  
{
    for(int i=0;i<n;i++)
    {
        if(used_table[i].name==J)
            return i;
    }
    return -1;
}


int GetTable3()//求空间表FLAG为0  
{

    …………
}

void allocate(char J,float xk) 
{
.......
}/*给J作业,采用分配算法分配xk大小的空间*/


void reclaim(char J) /*回收作业名为J的作业所占主存空间*/
{
    int f=GetTable2(J);
    float size=used_table[f].length;
    float address=used_table[f].address;
    used_table[f].length=0;
    used_table[f].address=0;
    used_table[f].flag=0;
    
    //判断是否有上先临界空间
    //判断是否有下先临界空间
    int top=Getfree_table(address,size);
    int bottom=Getfree_table2(address,size);
    ……

    ……

}


int main( )
{
    int i,a;
    float xk;
    char J;
    /*空闲分区表初始化:*/
    free_table[0].address=0; /*起始地址假定为10240*/
    free_table[0].length=10240; /*长度假定为10240,即10k*/
    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)
    {
        printf("选择功能项(0-退出,1-分配主存,2-回收主存,3-显示主存)\n");
        printf("选择功能项(0~3) :");
        scanf("%d",&a);
        switch(a)
        {
            case 0: exit(0); /*a=0程序结束*/
            case 1: /*a=1分配主存空间*/
                allocate(char J,float xk) ;
                break;
            case 2: /*a=2回收主存空间*/
                reclaim(char J);
                break;
            case 3: /*a=3显示主存情况*/
                /*输出空闲区表和已分配表的内容*/
                printf("输出空闲区表:\n 起始地址 分区长度 标志\n");
                for(i=0;i<m;i++)
                printf("%6.0f%9.0f%6d\n",free_table[i].address,free_table[i].length,
                free_table[i].flag);
                printf(" 按任意键,输出已分配区表\n");
                getch();
                printf(" 输出已分配区表:\n起始地址 分区长度 标志\n");
                for(i=0;i<n;i++)
                if(used_table[i].flag!=0)
                printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length,
                used_table[i].flag);
                else
                printf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].length,
                used_table[i].flag);
                break;

            default:printf("没有该选项\n");
        }/*case*/
    }/*while*/
    return 1;
}/*主函数结束*/
[em2][em2][em2][em2][em2][em2]