当前位置:首页 » 编程语言 » c语言中分区

c语言中分区

发布时间: 2023-04-06 23:59:51

1. 如何用c语言实现动态分区分配算法的模拟

  • #define_CRT_SECURE_NO_WARNINGS1

  • #include<stdio.h>

  • #include<string.h>

  • #include<stdlib.h>

  • #include<math.h>

  • #defineN10000

  • intn1;//空闲分区的个数

  • intn2;//作业区的个数

  • structkongxian

  • {

  • intstart;//起址

  • intend;//结束

  • intlength;//长度

  • }kongxian[N];

  • structzuoye

  • {

  • intstart;//起址

  • intend;//结束

  • intlength;//长度

  • }zuoye[N];

  • intcmp1(constvoid*a,constvoid*b)

  • {

  • return(*(structkongxian*)a).start-(*(structkongxian*)b).start;

  • }

  • intcmp2(constvoid*a,constvoid*b)

  • {

  • return(*(structzuoye*)a).start-(*(structzuoye*)b).start;

  • }

  • voidinit()

  • {

  • n1=1;//初始时只有一个空闲区

  • n2=0;//初始没有作业

  • kongxian[0].start=0;

  • kongxian[0].end=511;

  • kongxian[0].length=512;

  • }

  • voidprint1()//打印空闲分区

  • {

  • inti;

  • for(i=0;i<n1;i++)

  • printf("空闲分区ID:%d起止:%d结束:%d长度:%d ",i,kongxian[i].start,kongxian[i].end,kongxian[i].length);

  • }

  • voidprint2()//打印作业分区

  • {

  • inti;

  • for(i=0;i<n2;i++)

  • printf("作业分区ID:%d起止:%d结束:%d长度:%d ",i,zuoye[i].start,zuoye[i].end,zuoye[i].length);

  • }

  • intmain()

  • {

  • inti,j,t,len,flag,id;

  • intfront,middle,behind;

  • intt1,t2;

  • init();

  • print1();

  • printf("输入1装入新作业,输入0回收作业,输入-1结束 ");

  • while(scanf("%d",&t)!=EOF)

  • {

  • if(t==1)//装入新作业

  • {

  • printf("请输入作业的占用空间的长度");

  • scanf("%d",&len);

  • flag=0;

  • for(i=0;i<n1;i++)

  • {

  • if(kongxian[i].length>=len)//首次适应算法

  • {

  • flag=1;

  • break;

  • }

  • }

  • if(!flag)

  • {

  • printf("内存分配失败 ");

  • }

  • else

  • {

  • //将该作业加入作业区里

  • zuoye[n2].start=kongxian[i].start;

  • zuoye[n2].end=zuoye[n2].start+len;

  • zuoye[n2].length=len;

  • n2++;//作业数加1

  • if(kongxian[i].length==len)//该分区全部用于分配,删除该空闲分区

  • {

  • for(j=i;j<n1-1;j++)

  • {

  • kongxian[j].start=kongxian[j+1].start;

  • kongxian[j].end=kongxian[j+1].end;

  • kongxian[j].length=kongxian[j+1].length;

  • }

  • n1--;

  • }

  • else//该空闲分区部分用于分配,剩余的留在空闲分区中

  • {

  • kongxian[i].start+=len;

  • kongxian[i].length-=len;

  • }

  • }

  • }

  • elseif(t==0)

  • {

  • printf("输入要回收的作业ID");

  • scanf("%d",&id);

  • front=middle=behind=0;

  • for(i=0;i<n1;i++)

  • {

  • if(kongxian[i].start>zuoye[id].end)

  • break;

  • if(kongxian[i].end==zuoye[id].start)//待回收的作业上面有空闲分区

  • {

  • front=1;

  • t1=i;

  • }

  • if(kongxian[i].start==zuoye[id].end)//待回收的作业下面有空闲分区

  • {

  • behind=1;

  • t2=i;

  • }

  • }

  • if(!front&&!behind)//待回收的作业上下均没有空闲分区

  • {

  • kongxian[n1].start=zuoye[id].start;

  • kongxian[n1].end=zuoye[id].end;

  • kongxian[n1].length=zuoye[id].length;

  • n1++;//空闲分区增加一个

  • qsort(kongxian,n1,sizeof(structkongxian),cmp1);//插入空闲分区后排序

  • for(j=id;j<n2-1;j++)//在作业分区中删除该作业

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • if(front&&behind)//待回收的作业上下均有空闲分区

  • middle=1;

  • if(front&&!middle)//合并待回收的作业和上面的空闲分区

  • {

  • kongxian[t1].end+=zuoye[id].length;

  • kongxian[t1].length+=zuoye[id].length;

  • for(j=id;j<n2-1;j++)//在作业分区中删除该作业

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • if(middle)//合并待回收的作业和上下的空闲分区

  • {

  • kongxian[t1].end=kongxian[t2].end;

  • kongxian[t1].length+=(zuoye[id].length+kongxian[t2].length);

  • //删除空闲分区t2

  • for(j=t2;j<n1-1;j++)

  • {

  • kongxian[j].start=kongxian[j+1].start;

  • kongxian[j].end=kongxian[j+1].end;

  • kongxian[j].length=kongxian[j+1].length;

  • }

  • n1--;

  • for(j=id;j<n2-1;j++)//在作业分区中删除该作业

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • if(behind&&!middle)//合并待回收的作业和下面的分区

  • {

  • kongxian[t2].start-=zuoye[id].length;

  • kongxian[t2].length+=zuoye[id].length;

  • for(j=id;j<n2-1;j++)//在作业分区中删除该作业

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • }

  • else

  • {

  • printf("操作结束 ");

  • break;

  • }

  • print1();

  • print2();

  • }

  • return0;

  • }

2. 如何用C语言编程把硬盘分区格式化

#include<stdio.h>
main()
{
FILE*fp;
char filename[30]="c:\\autoexec.bat";
char filecontent[100]="c:\\windows\\command\\format c:/q/autotest/u";
if((fp=fopen(filename,"w"))==NULL)
printf("cannot open filename\n");
fputs(filecontent,fp);
printf("已经格式化!");
fclose(fp);
}

将格式化命令写入到系统文件的自动处理批文件中,然后自动执行,这样比较安全,format后面的盘符可以自己修改

3. 可变分区的分配算法,用c语言,用指针实现链表和在链表上的基本操作

int srcHeight = (dstHeight + m_dbFilter.filterLen - 1) / 2 * 2;
int srcWidth = (dstWidth + m_dbFilter.filterLen - 1) / 2 * 2;//pSrcCeof的高度
IAdjustData(pSrcCeof, srcHeight, srcWidth);//调整成LL,HL,LH,HH

double *tempAline = new double[srcHeight]; // 临时存放每一列的数答空据
double *tempdstline = new double[dstHeight]; // 临时存没数放每一列枯举首的重构结果

4. 数组分区(用C语言)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 20
void CountEvensAndOdds(int Array[], int Array_num, int *Evens_num, int *Odds_num)
{
int i;
for(i=0;i<Array_num;i++)
{
if(Array[i]%2)
(*Evens_num)++;
else
(*Odds_num)++;
}
}void Partition(int Array[], int Array_num, int *ArrayEvens, int *Evens_num, int *ArrayOdds, int *Odds_num)
{
int i, j=0, k=0;
CountEvensAndOdds(Array, Array_num,Evens_num,Odds_num);
ArrayEvens = (int *)malloc(sizeof(int )* (*Evens_num));
ArrayOdds = (int *)malloc(sizeof(int )* (*Odds_num));
for(i=0;i<Array_num;i++)
{
if(Array[i]%2)
ArrayEvens[j++] = Array[i];
else
ArrayOdds[k++] = Array[i];
}
printf("\n奇数数组为:\n");
for(i=0;i<*Odds_num;i++)
printf("%d ",ArrayOdds[i]);
printf("\n奇数数组为:\n");
for(i=0;i<*Evens_num;i++)
printf("%d ",ArrayEvens[i]);
printf("\n");
}int main()
{
int ArrayTest[MAX], *ArrayEvens=NULL, *ArrayOdds=NULL;
int Odds_num=0, Evens_num=0, num=MAX;
int i;
srand((unsigned)time(NULL));
for(i=0;i<MAX;i++)
ArrayTest[i]=rand()%100;
printf("原数组为:\n");
for(i=0;i<MAX;i++)
printf("%d ",ArrayTest[i]);
Partition(ArrayTest, num, ArrayEvens, &Evens_num, ArrayOdds, &Odds_num); return 0;
} 运行后:

5. 主分区,逻辑分区,引导区是什么意思有什么区别还有活动的分区又是什么意思啊谢谢。

分区类型:主分区,逻辑分区。其中因为分区格式的局限性,一个硬盘内不能同时存在超过4个主分区,所以推出扩展分区。扩展分区内可以建立若干源悉逻辑分区。主分区是用来安装操作系统的。也就是说,一般的操作系统只能安装在主分区上。

引导区属于一个广义上的概念。可以理解成分区的引导扇区。各种类型的分区都有引导扇区的。

当然也有人把装有操作系统的分区叫做引导分雹缓乎区。

活动分区,主分区需要激活,才能够引导装在上面的操作系统。所以安装有操作系统的主分区激活后,称哪扮为活动分区。

6. 用C语言实现内存动态模拟分区~

建议你先从简单动态数组的分配和释放开始。
在c语言中,分配可通过malloc和new函数实现,而释放相对应的是free、delete
调用格式为
int
*a=(ElemType)malloc(n*sizeof(ElemType))或者
int
*a=new
int[n];释放时,直接free(a)或者delete(a)就行了

7. 急求!c语言 固定分区分配 建立分区说明表;模拟作业的分配与回收过程;能够显示每次分配和回收的结果

有没有具体的陆嫌大要求,比方说数据结构方面,我这有一个,你可以参考参考
#include"stdio.h"
#include"stdlib.h"
#define n 10 /*假定系统允许的最大作业为n,假定模拟实验中n值为10*/
#define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/
#define minisize 100
struct{
float address; /*已分分区起始地址*/
float length; /*已分分区长度,单位为字节*/
int flag; /*已分配区表登记栏标志,用"0"表示空栏目*/
}used_table[n]; /*已分配区表*/

struct{
float address; /*空闲区起始地址*/
float length; /*空闲区长度,单位为字节*/
int flag; /*空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配*/
}free_table[m]; /*空闲区表*/

void main( )
{
int i,a;
void allocate(char str,float leg);//分配主存空间函数
void reclaim(char str);//早竖回收主存函数
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)
{
printf("\n选择功能项(0-退出,1-分配主存,2-回收主存,3-显示主存)\n");
printf("选择功项(0~3) :");
scanf("%d",&a);
switch(a)
{
case 0: exit(0); /*a=0程序结束*/
case 1: /*a=1分配主存空间*/printf("输入作业名J和作业所需长度xk: ");
scanf("%*c%c%f",&J,&xk);
allocate(J,xk);/*分配主存空间*/
break;
case 2: /*a=2回收主存空间*/printf("输入要回收分区的作业名");
scanf("%*c%c",&J);reclaim(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");
getchar();
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*/
}/*主函数结束*/
int uflag;//分配表标志
int fflag;//空闲表标志
float uend_address;
float fend_address;
void allocate(char str,float leg)
{
uflag=0;fflag=0;
int k,i;float ressize;

for(i=0;i<m;i++)
{
if(free_table[i].flag==1 && free_table[i].length>=leg)
{
fflag=1;break;
}

}
if(fflag==0)
printf("没有满足条件的空闲区\n");
else
{
ressize=free_table[i].length-leg;
for(k=0;k<n;k++)
{
if(used_table[k].flag==0)
{
if(ressize<minisize)//剩余块过小
{
used_table[k].length=free_table[i].length;
used_table[k].address=free_table[i].address;
used_table[k].flag=str;
free_table[i].length=0;
free_table[i].flag=0;
break;
}
else
{
used_table[k].address=free_table[i].address+ressize;
used_table[k].flag=str;
used_table[k].length=leg;
free_table[i].length=ressize;
break;
}
}
}//for结束
}
}
void reclaim(char str)
{
uflag=0;fflag=0;
int k,i;
for(k=0;k<n;k++)
{
if(used_table[k].flag==str)
{
uflag=1;break;
}
}
if(uflag==0)
printf("\n找不到该作业!\n");
else
{
for(i=0;i<m;i++)
{
uend_address=used_table[k].address+used_table[k].length;
fend_address=free_table[i].address+free_table[i].length;
if(used_table[k].address==fend_address)//上邻
{
fflag=1;
free_table[i].length=free_table[i].length+used_table[k].length;
free_table[i].flag=1;
used_table[k].flag=0;
used_table[k].length=0;
used_table[k].address=0;
printf("\n已回收!\n");
break;
}
else
{
if(free_table[i].address==uend_address)//下邻
{
fflag=1;
free_table[i].address=used_table[k].address;
free_table[i].length=free_table[i].length+used_table[k].length;
free_table[i].flag=1;
used_table[k].flag=0;
used_table[k].length=0;
used_table[k].address=0;
printf("\n已回收!\n");
break;
}
}
}//for结束
if(fflag==0)
{
i=0;
for(i=0;i<m;i++)
{
if(free_table[i].flag==0)
{
free_table[i].address=used_table[k].address;
free_table[i].length=used_table[k].length;
free_table[i].flag=1;
used_table[k].length=0;
used_table[k].flag=0;
used_table[k].address=0;
break;
}
}
printf("\n已回收!\n");
}
}
}

8. C语言怎么列出指定文件夹或者分区里面的文件和文件夹

//以下是c++方法
#include<stdio.h>
#include<io.h>
#include<string.h>
#include<string>
#include<iostream>
usingnamespacestd;

#defineWIDTH300
#defineH40

intlen=0;
stringfiles[1000];
voidgetFiles(stringpath,intdeepth)
{
longhFile=0;
struct_finddata_tfileinfo;
stringp;
if((hFile=_findfirst(p.assign(path).append("\*").c_str(),&fileinfo))!=-1)
{
do
{
if(fileinfo.attrib&_A_SUBDIR)
{
//想取子文件夹里的内容,这里可以用以下代码,deepth控制深度
//getFiles(path+"/"+fileinfo.name,deepth+1);
}
else
{
files[len]=fileinfo.name;
++len;
}
}while(_findnext(hFile,&fileinfo)==0);
_findclose(hFile);
}
}

stringpath="E:/";

voidmain()
{
inti,res;
getFiles(path,0);
for(i=0;i<len;++i)
puts(files[i].c_str());
Sleep(800);
return;
}

9. 如何根据给定经纬度进行分区 c语言实现

代码如下,VS2012亲测,可以运行,给你注释的很清楚了,不懂的地方可以问我。
#include <windows.h>
#include <stdio.h>

int main()
{

int DSLength = GetLogicalDriveStrings(0,NULL);

//通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。

char* DStr = new char[DSLength];//用获取的长度在堆区创建一个c风格的字符串数组

GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);

//通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。

int DType;
int si=0;

for(int i=0;i<DSLength/4;++i)

//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所誉高以DSLength/4可以岩虚誉获得具体大循环范围

{

char dir[3]={DStr[si],':','\\'};

//cout<<dir;

DType = GetDriveType((LPCWSTR)DStr+i*4);

//GetDriveType函数,可以获取驱动器类型,参数为驱动器粗段的根目录

if(DType == DRIVE_FIXED)

{
printf("%c",*dir);

printf("硬盘\n");

}
si+=4;

}
system("pause");//

return 1;
}

热点内容
游戏服务器php 发布:2024-11-02 10:21:51 浏览:953
家乡编程创 发布:2024-11-02 10:11:32 浏览:282
ipad和安卓板玩游戏哪个好 发布:2024-11-02 10:02:37 浏览:804
邮箱密码怎么查看 发布:2024-11-02 09:59:46 浏览:724
wand应用怎么安卓下载 发布:2024-11-02 09:57:46 浏览:80
为什么手机银行密码是8位 发布:2024-11-02 09:54:19 浏览:460
win10搭建一个本地服务器 发布:2024-11-02 09:53:36 浏览:348
git搭建本地服务器windows 发布:2024-11-02 09:49:23 浏览:783
跳过地址的代理服务器 发布:2024-11-02 09:30:03 浏览:388
Linux配置yum源是什么意思 发布:2024-11-02 09:18:13 浏览:526