自己做的内存连续分配模拟程序!!!希望大家给些意见!!!谢谢
#include<stdio.h>#include<malloc.h>
#include<string.h>
#define size 10
typedef struct lnode
{
char name;
int num;
int address;
int usize;
struct lnode *next;
}node,*linknode;
linknode s,r;
int num=0,address=0;
void init_link()
{
linknode x;
s=(linknode)malloc(sizeof(node));
s->next=NULL;
r=(linknode)malloc(sizeof(node));
r->next=NULL;
x=(linknode)malloc(sizeof(node));
x->next=r->next;
r->next=x;
x->num=0;
x->address=0;
x->usize=1024;
x->name=' ';
}
void share()
{
linknode p,q,f,h,g;
char name1;
int num1;
p=(linknode)malloc(sizeof(node));
printf("请输入进程名!!!!\n");
scanf("%c",&name1);
p->name=name1;
p->num=num++;
printf("请输入进程大小!!\n");
scanf("%d",&num1);
p->usize=num1;
q=r->next;
g=r;
f=s->next;
h=s;
while(q!=NULL)
{
if(p->usize>q->usize)
{
g=q;
q=q->next;
}
else
if((q->usize)-(p->usize)<=size)
{
g->next=q->next;
break;
}
else
{
q->usize=(q->usize)-(p->usize);
p->address=q->address;
q->address=(q->address)+(p->usize);
break;
}
}
if(q!=NULL)
{
if(f==NULL)
{
p->next=f;
s->next=p;
}
else
{
while(f!=NULL)
{
if(p->address<f->address)
{
h->next=p;
p->next=f;
break;
}
h=f;
f=f->next;
}
if(f==NULL)
{
p->next=f;
h->next=p;
}
}
printf("分配成功!!\n");
}
else
printf("内存不足,无法分配!!\n");
}
void reback()
{
char a;
linknode p,q,t;
printf("请输入要回收的进程名!!!\n");
scanf("%c",&a);
p=s->next;
q=s;
while(p!=NULL)
{
if(a==(p->name))
{
q->next=p->next;
p->next=NULL;
break;
}
else
{
q=p;
p=p->next;
}
}
if(p==NULL)
printf("无此进程\n");
else
{
p->name=' ';
p->num=0;
t=r->next;
q=r;
while(t!=NULL)
{
if(t->address>p->address)
{
q->next=p;
p->next=t;
break;
}
else
{
q=t;
t=t->next;
}
}
if(t==NULL)
{
p->next=NULL;
q->next=p;
}
}
}
void zhengli()
{
linknode p,q;
p=r->next;
q=r;
while(p!=NULL)
{
if(q->address+q->usize==p->address)
{
q->usize=q->usize+p->usize;
q->next=p->next;
p=p->next;
}
else
{
q=p;
p=p->next;
}
}
}
void xianshi(linknode l)
{
linknode p;
p=l->next;
printf("进程名 分区号 起始地址 分区大小 \n");
while(p!=NULL)
{
printf("%c %8d%8d%8d\n",p->name,p->num,p->address,p->usize);
p=p->next;
}
}
void open()
{
printf("*******************************************************\n");
printf("******作者-------------------------冯亮****************\n");
printf("******计算机---------------------0602班****************\n");
printf("******平台-----------vc++6.0,windows xp****************\n");
printf("*******************************************************\n");
printf("请选择操作!!!!!!!!!!!!!!!\n");
printf("0-------------------退出\n");
printf("1-------------------分配内存\n");
printf("2-------------------回收内存\n");
printf("3-------------------显示内存使用情况\n");
printf("4-------------------使用说明\n");
}
void readme()
{
printf("*******************使用手册****************************\n");
printf("***按提示输入你所要的操作******************************\n");
printf("***进程名为一个字节************************************\n");
printf("谢谢使用!!!^_^!!!!!!!*******************************\n");
printf("*******************************************************\n\n");
}
main()
{
int i=-1;
init_link();
while(i)
{
open();
scanf("%d",&i);
getchar();
switch(i)
{
case 0:
break;
case 1:
share();
break;
case 2:
reback();
zhengli();
break;
case 3:
printf("进程队列****************************\n");
xianshi(s);
printf("************************************\n");
printf("空闲队列****************************\n");
xianshi(r);
printf("************************************\n");
break;
case 4:
readme();
break;
default :
printf("error\n");
break;
}
}
}
个人能力问题。。。没有注释不好意思