亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os5.c

?? 這個程序實現了內存空間的動態管理和分配
?? C
字號:
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define getjcb(type) (type*)malloc(sizeof(type))
#define getsub(type)  (type*)malloc(sizeof(type))

int num,num2;  //要調度的作業數和要回收的區域數
int m=0;     //已分配作業數
int flag;     //分配成功標志
int isup,isdown;   //回收區域存在上鄰和下鄰的標志
int is=0;

struct jcb{
		char name[10];
		char state;
		int ntime; //所需時間
	    int size;  //所需空間大小
        int addr;  //所分配分區的首地址
		struct jcb *link;
	} *ready =NULL, *p,*q,*as=NULL;//作業隊列ready,已分配作業隊列as
		typedef struct jcb JCB;
struct subarea{         //分區塊
	    char name[10];
	    int addr;    //分區首地址
		int size;    //分區大小
		char state;
		struct subarea *link;
  } *sub=NULL,*r,*s,*cur; //空閑分區隊列sub,當前分區指針cur
        typedef struct subarea SUB;


void sort() /* 建立對作業按到達時間進行排列的函數,直接插在隊列之尾*/
{
 JCB *first;
 if(ready==NULL)  ready=p;
 else{
   first=ready;
   while(first->link!=NULL)
       first=first->link;
   first->link=p;
   p->link=NULL;
  }
}

void sort3()      /*建立對已分配作業隊列的排列函數,直接插在隊列之尾*/
{
 JCB *fir;
 if(as==NULL) as=q;
 else{
   fir=as;
   while(fir->link!=NULL)
     fir=fir->link;
   fir->link=q;
   q->link=NULL;
  }
  m++;
}

void input() /* 建立作業控制塊函數*/
{
 int i;
 printf("\n請輸入要調度的總作業數:");
 scanf("%d",&num);
 for(i=0;i<num;i++)
  {
   printf("\n作業號No.%d:\n",i);
   p=getjcb(JCB);
   printf("\n輸入作業名:");
   scanf("%s",&p->name);
   printf("\n輸入作業的大小:");
   scanf("%d",&p->size);
   printf("\n輸入作業所需運行時間:");
   scanf("%d",&p->ntime);
   p->state='w';
   p->link=NULL;
   sort(); /* 調用sort函數*/
  }
 printf("\n 按任一鍵繼續......\n");
 getch();
}





void input2()     /*建立要回收區域的函數*/
{
 JCB *k;
 int has;
 q=getjcb(JCB);
 printf("\n輸入區域名(作業名):");
 scanf("%s",&q->name);
 p=as;
 while(p!=NULL)
  {if(strcmp(p->name,q->name)==0)  /*在已分配作業隊列中尋找*/
       {
        q->addr=p->addr;
        q->size=p->size;
        has=1;    /*輸入作業名存在標志位*/
        if(p==as)  as=p->link;    /*在已分配作業隊列中刪除該作業*/
        else
          {k=as;
	       while(k->link!=p)  k=k->link;
	       k->link=k->link->link;      /*刪除*/
	      }
	    printf("輸出該作業首地址:%d\n",q->addr);
        printf("輸出該作業大小:%d\n\n",q->size);
        q->link=NULL;
        break;
       }
   else
       {p=p->link; has=0;}   /*輸入作業名不存在標志*/
  }
 if(has==0)
  {printf("\n輸入作業名錯誤!請重新輸入!\n");
   input2();
  }  
}



void print()
{printf("\n\n\n\n");
 printf("\t\t**************************************\n");
 printf("\t\t\t三.存儲管理實驗演示\n");
 printf("\t\t**************************************\n\n\n");
 printf("\t\t\t\t藍小花\n");
 printf("\t\t\t\t計算機學院\n");
 printf("\t\t\t\t軟件4班\n");
 printf("\t\t\t\t3204007102\n");
 printf("\t\t\t\t2006年12月\n");
 printf("\n\n\n");
 printf("\t\t\t按任意鍵進入演示");
 getch();
 system("cls");
}



void init_sub()       /*初始化空閑分區表*/
{
 r=getsub(SUB);
 strcpy(r->name,"one"); r->addr=5; r->size=10; r->state='n';
 sub=r;
 s=getsub(SUB);
 strcpy(s->name,"two"); s->addr=20; s->size=120; s->state='n';
 sub->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"three"); s->addr=160; s->size=40; s->state='n'; 
 r->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"four"); s->addr=220; s->size=10; s->state='n'; 
 r->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"five"); s->addr=250; s->size=20; s->state='n'; 
 r->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"six"); s->addr=300; s->size=80; s->state='n'; 
 r->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"seven"); s->addr=400; s->size=60; s->state='n'; 
 r->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"eight"); s->addr=480; s->size=300; s->state='n'; 
 r->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"nine"); s->addr=850; s->size=150; s->state='n'; 
 r->link=s;r=s;
 s=getsub(SUB);
 strcpy(s->name,"ten"); s->addr=1200; s->size=60; s->state='n'; 
 r->link=s;
}
//--------------------------------------------------------------------------
void disp()    /*空閑分區表的顯示函數*/
{
 printf("\n\n");
 printf("\t\t 分區          首地址           長度          狀態 \n");
 r=sub;
 while(r!=NULL)
   {
    printf("\t\t %s\t\t%d\t\t%d\t\t%c\n",r->name,r->addr,r->size,r->state);
    r=r->link;
   }
 printf("\n");
}

//--------------------------------------------------------------------------
void disp2()   /*顯示已分配內存的作業表函數*/
{
 printf("\n\n");
 printf("\t\t 作業名         首地址          長度          狀態 \n");
 p=as;
 while(p!=NULL)
   {
    printf("\t\t %s\t\t%d\t\t%d\t\t%c\n",p->name,p->addr,p->size,p->state);
    p=p->link;
   }
 printf("\n\n");
}


//--------------------------------------------------------------------------
void assign2(JCB *pr) /*首次適應作業分區*/
{
 SUB *k;
 r=sub;   /*從空閑表頭開始尋找*/
 while(r!=NULL)
  {
   if(((r->size)>(pr->size))&&(r->state=='n'))   /*有空閑分區大于作業大小的情況*/
	  {
	   pr->addr=r->addr;
	   r->size-=pr->size;
	   r->addr+=pr->size;
	   flag=1;       /*分配成功標志位置1*/
	   q=pr;
	   q->state='r';
	   sort3();     /*插入已分配作業隊列*/
	   printf("作業%s的分區為[%s],首地址為%d.\n",p->name,r->name,pr->addr);
	   break;
	  }
   else if(((r->size)==(pr->size))&&(r->state=='n'))    /*有空閑分區等于作業大小的情況*/
	  {
	   pr->addr=r->addr;
	   flag=1;    /*分配成功標志位置1*/
	   q=pr;
	   sort3();	    /*插入已分配作業隊列*/
	   s=sub;       /*空閑分區已完成分配,應刪除*/
	   while(s->link!=r)  s=s->link;
	   s->link=s->link->link;	 /*刪除空閑分區*/
	   printf("作業%s的分區為[%s],首地址為%d.\n",p->name,r->name,pr->addr);
	   break;
	 }
   else
         {r=r->link;  flag=0;}
}
 if(flag==0)           /*作業過大的情況*/
 {
  printf("作業%s長度過大,內存不足,分區分配出錯!\n",p->name);
  is=1;
 }
}

//--------------------------------------------------------------------------
void reclaim2(JCB *pr)       /*首次適應與循環首次適應區域回收*/
{
 SUB *k;
 r=sub;
 while(r!=NULL)
 {
  if(r->addr==((pr->addr)+(pr->size)))     /*回收區域有下鄰*/
    {
	  pr->size+=r->size;
	  s=sub;
	  isdown=1;     /*下鄰標志位置1*/
	  while(s!=NULL)
	  {
	   if(((s->addr)+(s->size))==(pr->addr))   /*有下鄰又有上鄰*/
	    {
	     s->size+=pr->size;
	     k=sub;
	     while(k->link!=r)  k=k->link;
	     k->link=k->link->link;
	     isup=1;      /*上鄰標志位置1*/
	     break;
	    }
	   else
	    {s=s->link; isup=0;}    /*上鄰標志位置0*/  
	  }
 	  if(isup==0)               /*有下鄰無上鄰*/
	   { 
	     r->addr=pr->addr;
	     r->size=pr->size;
	   }
	 break;	   
    }
 else 
   {r=r->link; isdown=0;}     /*下鄰標志位置0*/
 }  
 if(isdown==0)              /*區域無下鄰*/
    { 
      s=sub;
      while(s!=NULL) 
	  {
	   if(((s->addr)+(s->size))==(pr->addr))   /*無下鄰但有上鄰*/
	     {
	      s->size+=pr->size; 
	      isup=1;        /*上鄰標志位置1*/
	      break;
	     }
	   else 
	     { s=s->link; isup=0;}     /*上鄰標志位置0*/
	  }
	  if(isup==0)           /*無下鄰且無上鄰*/
	       { 
	         k=getsub(SUB);   /*重新生成一個新的分區結點*/
	         strcpy(k->name,pr->name);
	         k->addr=pr->addr;
	         k->size=pr->size;
	         k->state='n';
	         r=sub;
	         while(r!=NULL)
	         {
	          if((r->addr)>(k->addr))   /*按分區首地址排列,回收區域插在合適的位置*/
	            {
	              if(r==sub)       /*第一個空閑分區首址大于回收區域的情況*/
	                  { k->link=r; sub->link=k; }
	              else
	                 {
	                  s=sub;
	                  while(s->link!=r)  s=s->link;    
	                  k->link=r;
	                  s->link=k;
	                 }
	              break;
	            }
	          else r=r->link;
	         }
	        if(r==NULL)     /*所有空閑分區的首址都大于回收區域首址的情況*/
	           {
	             s=sub;
	             while(s->link!=NULL)  s=s->link;
	             s->link=k;
	             k->link=NULL;
	           }
	       }    
    }
 printf("\n區域%s己回收.",pr->name);
}

menu()
{
  printf("\n\n\n\t\t**************************************\n");
 printf("\t\t\t存儲管理實驗演示\n");
 printf("\t\t**************************************\n\n\n");
 printf("\t\t\t 1. 顯示空閑分區                  \n");
 printf("\t\t\t 2. 分配和回收作業                    \n");
 printf("\t\t\t 0. 退出                    \n");
 printf("\t\t\t請選擇你要的操作:");
 switch(getchar())
{
    case '1':
       system("cls");
        disp();
        getch();
        system("cls");
         menu();
        break;
 case '2':
            system("cls");
            printf("\n首次適應算法");
            input();
            printf("\n");
            while(num!=0)
              {
                p=ready;
                ready=p->link;
                p->link=NULL;
                assign2(p);
                num--;
              }
            printf("\n顯示回收后的空閑分區表和已分配作業表...");
            getch();
            printf("\n\t\t              完成分配后的空閑分區表             \n");
            disp();
            printf("\n\t\t                  已分配作業表                   \n");
            disp2();
            if(is==0)
               printf("\n 全部作業已經被分配內存.");
            else printf("\n 作業沒有全部被分配內存.\n");

            printf("\n\n按任意鍵進行區域回收.");
            printf("\n");

            while(as!=NULL)
              {getch();
               input2();
               printf("按任意鍵繼續...");
               getch();
               printf("\n");
               reclaim2(q);
               printf("\n顯示回收后的空閑分區表和已分配作業表...");
               getch();
               printf("\n\t\t              回收后的空閑分區表             \n");
               disp();
               printf("\n\t\t                已分配作業表                 \n");
               disp2();
               printf("\n繼續回收...(Enter)");
              }
            printf("\n所有已分配作業已完成!");
            printf("\nPress any key to return...");
            getch();
            system("cls");
            menu();
            break;

    case '0':
           system("cls");
           break;
           
    default:
           system("cls");
           menu();
           
}
}




void main()     /*主函數*/
{
 init_sub();
 print();
 menu();
} 	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲码国产岛国毛片在线| 亚洲国产人成综合网站| 亚洲综合在线五月| 久久国产尿小便嘘嘘| 在线中文字幕一区| 国产蜜臀av在线一区二区三区| 一级女性全黄久久生活片免费| 国产精品自产自拍| 欧美精品日韩综合在线| 中文字幕亚洲在| 国产在线观看一区二区| 欧美日本免费一区二区三区| 国产精品人成在线观看免费| 另类综合日韩欧美亚洲| 欧美日本不卡视频| 亚洲视频精选在线| 成人晚上爱看视频| 久久久久久久久久美女| 蓝色福利精品导航| 欧美丰满少妇xxxbbb| 亚洲一区二区综合| 色网站国产精品| 亚洲欧美激情插| 成人黄色国产精品网站大全在线免费观看 | 欧美在线观看视频一区二区| 中文一区在线播放 | 石原莉奈在线亚洲三区| 色8久久精品久久久久久蜜| 国产精品久久久久久久岛一牛影视| 亚洲自拍偷拍欧美| 欧美亚洲综合久久| 亚洲综合色丁香婷婷六月图片| 99久久精品国产网站| 国产精品丝袜在线| av电影天堂一区二区在线| 中文字幕 久热精品 视频在线 | 首页国产欧美日韩丝袜| 欧美日韩另类一区| 日本vs亚洲vs韩国一区三区| 3751色影院一区二区三区| 免费在线观看视频一区| 日韩欧美一二三| 国产成人在线色| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 精品国产免费视频| 国产美女主播视频一区| 国产日韩精品一区二区浪潮av| 国产成人综合精品三级| 国产精品麻豆99久久久久久| 色av综合在线| 水野朝阳av一区二区三区| 日韩亚洲欧美在线| 国产精品中文字幕欧美| 日韩一区中文字幕| 欧美精品第1页| 精品一区二区免费在线观看| 中文字幕国产精品一区二区| 色偷偷88欧美精品久久久| 视频在线观看国产精品| 久久久无码精品亚洲日韩按摩| www.一区二区| 日韩高清不卡一区二区三区| 精品国产免费一区二区三区香蕉 | 欧美国产丝袜视频| 在线中文字幕一区| 久久66热偷产精品| 亚洲免费观看视频| 精品国产区一区| 91丨porny丨首页| 日本在线不卡视频| 国产精品传媒在线| 日韩欧美卡一卡二| 91视频com| 韩国成人精品a∨在线观看| 亚洲激情中文1区| 欧美精品一区在线观看| 在线欧美日韩国产| 国产不卡在线播放| 蜜桃久久久久久| 亚洲久草在线视频| 国产性做久久久久久| 7777精品伊人久久久大香线蕉| 成人av资源网站| 激情五月婷婷综合| 午夜久久久影院| 一个色在线综合| 精品国产乱码91久久久久久网站| 色94色欧美sute亚洲13| 懂色av一区二区夜夜嗨| 日韩精品每日更新| 亚洲午夜久久久久久久久电影院| 国产日韩精品视频一区| 精品国产乱码久久久久久1区2区| 欧美日韩一级大片网址| 91视频免费播放| 国产+成+人+亚洲欧洲自线| 蜜桃av一区二区| 天天射综合影视| 亚洲午夜免费福利视频| 亚洲日穴在线视频| 国产精品美女久久久久久久久久久| 精品久久人人做人人爰| 日韩欧美一区二区久久婷婷| 欧美日韩在线一区二区| 色94色欧美sute亚洲线路二| va亚洲va日韩不卡在线观看| 国产成人精品免费在线| 韩国一区二区三区| 国产在线精品一区二区夜色| 日韩黄色免费电影| 水野朝阳av一区二区三区| 午夜成人免费电影| 丝袜诱惑亚洲看片| 日本视频一区二区| 麻豆视频观看网址久久| 日本va欧美va欧美va精品| 青青草原综合久久大伊人精品优势 | 日本成人中文字幕在线视频| 午夜电影网亚洲视频| 丝袜亚洲另类欧美| 喷白浆一区二区| 蜜桃一区二区三区在线观看| 老司机午夜精品| 狠狠网亚洲精品| 国产精品一区二区在线播放 | 一区二区三区四区五区视频在线观看| 亚洲精品乱码久久久久久久久 | 在线免费观看视频一区| 日本韩国视频一区二区| 在线国产亚洲欧美| 欧美日韩一级视频| 精品美女在线播放| 国产精品女主播av| 亚洲自拍偷拍图区| 久久精品理论片| 成人激情小说乱人伦| 色综合久久久久久久久| 欧美精品久久天天躁| 欧美大片免费久久精品三p| 2020国产精品久久精品美国| 国产精品久久久久久户外露出 | 欧美日韩激情一区| 精品国产91乱码一区二区三区 | 亚洲精品一区二区三区蜜桃下载| 中文文精品字幕一区二区| 亚洲日穴在线视频| 免费观看在线综合| 懂色av中文字幕一区二区三区| 欧美影院一区二区三区| 精品国产一区二区三区四区四| 中文字幕va一区二区三区| 亚洲一区二区三区四区在线观看| 老汉av免费一区二区三区 | 7777精品伊人久久久大香线蕉的 | 亚洲欧洲综合另类| 麻豆精品视频在线观看视频| av高清久久久| 日韩精品专区在线影院观看| 亚洲色图另类专区| 精品一区二区三区在线播放视频| 97久久精品人人爽人人爽蜜臀| 欧美一区二区三区视频| 国产精品久久久久四虎| 另类欧美日韩国产在线| 色综合久久88色综合天天免费| 日韩精品中文字幕一区| 亚洲综合小说图片| 国产成人丝袜美腿| 欧美一区二区视频观看视频| 亚洲码国产岛国毛片在线| 国产精品一区二区免费不卡 | 色综合久久久网| 26uuu久久天堂性欧美| 亚洲成人av一区| 91老师国产黑色丝袜在线| 久久综合色播五月| 日本在线不卡视频一二三区| 色国产综合视频| 国产精品国产成人国产三级| 精品在线一区二区三区| 欧美肥胖老妇做爰| 亚洲成人综合在线| 日本乱人伦一区| 中文欧美字幕免费| 国产高清无密码一区二区三区| 777亚洲妇女| 亚洲电影在线播放| 精品视频在线免费看| 亚洲欧美日韩人成在线播放| 成人精品国产一区二区4080| www日韩大片| 久久不见久久见免费视频7| 91精品欧美综合在线观看最新 | 欧美色视频一区| 一区二区在线观看视频在线观看| k8久久久一区二区三区| 国产精品午夜久久| www.欧美亚洲| 亚洲免费观看在线观看| 91久久精品午夜一区二区|