您现在的位置:计算机技术学习网 > 技术中心 > 编程开发 > C >

C语言课程设计_存储管理分区分配算法

来源:不详 责任编辑:栏目编辑 发表时间:2013-07-02 02:28 点击:
存储管理分区分配算法 代码

/***pcb.c***/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 32767
typedef struct node   /*设置分区描述器*/
{
   int address,size;
   struct node *next;
}RECT;
/*函数原型*/
RECT *assignment(RECT *head,int application);
void acceptment1(RECT *head,RECT *back1);
void acceptment2(RECT *head,RECT *back1) ;
int backcheck(RECT *head,RECT *back1);
void print(RECT *head);
/*变量声明*/
RECT *head,*back,*assign1,*p;
int application1,maxblocknum;
char way;
/*主函数*/
main()
{
   char choose[10];
   int check;
   head=malloc(sizeof(RECT)); /*建立可利用区表的初始状态*/
   p=malloc(sizeof(RECT));
   head->size=MAX;
   head->address=0;
   head->next=p;
   maxblocknum=1;
   p->size=MAX;
   p->address=0;
   p->next=NULL;
   print(head);  /*输出可利用表初始状态*/
   printf("Enter the way(best or first(b/f)\n");/*选择适应策略*/
   scanf("%c",&way);
   do{
      printf("Enter the assign or accept(as/ac)\n");
      scanf("%s",choose); /*选择分配或回收*/
      if(strcmp(choose,"as")==0) /*as为分配*/
      {
         printf("Input application:\n");
         scanf("%d",&application1);/*输入申请空间大小*/
         assign1=assignment(head,application1);/*调用分配函数*/
         if(assign1->address==-1)/*分配不成功*/
            printf("Too large application!,assign fails!!\n\n");
         else
            printf("Success!!ADDRESS=%5d\n",assign1->address); /*分配成功*/
         print(head); /*输出*/
      }
      else
         if(strcmp(choose,"ac")==0) /*回收*/
         {
            back=malloc(sizeof(RECT));
            printf("Input Adress and Size!!\n");
            scanf("%d%d",&back->address,&back->size);/*输入回收地址和大小*/
            check=backcheck(head,back); /*检查*/
            if(check==1)
            {
               if(tolower(way)=='f')/*首先适应算法*/
                  acceptment1(head,back); /*首先适应*/
               else
                  acceptment2(head,back);/*最佳适应*/
               print(head);
            }
         }
   }while(!strcmp(choose,"as")||!strcmp(choose,"ac"));
}
/*分配函数*/
RECT *assignment(RECT *head,int application)
{
   RECT *after,*before,*assign;
   assign=malloc(sizeof(RECT)); /*分配申请空间*/
   assign->size=application;
   assign->next=NULL;
   if(application>head->size||application<=0)
      assign->address=-1; /*
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Glib实例学习(2)双链表
    • C程序员要学C++吗?
    • C++中实现Singleton的正确方法
    • 编程思维训练(一)
    • 【编程好习惯】引入中间变量使程序更易读
    • 在C++中通过模板规避潜在错误
    • 在C++中通过模板去除强制转换
    • 【编程好习惯】减少搜索头文件的目录数
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1