| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1096 人关注过本帖, 1 人收藏
标题:自己做的内存连续分配模拟程序!!!希望大家给些意见!!!谢谢
只看楼主 加入收藏
firel
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-10-4
收藏(1)
 问题点数:0 回复次数:3 
自己做的内存连续分配模拟程序!!!希望大家给些意见!!!谢谢
#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;
        }
    }
}

个人能力问题。。。没有注释不好意思
搜索更多相关主题的帖子: 内存 模拟程序 意见 
2008-04-16 18:54
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
楼主也是大二啊,可见我真的落后了,我还写不出来,顶一个,谢谢分享。

i like linux...
2008-04-16 19:18
firel
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-10-4
收藏
得分:0 
其实我也很菜
大家一起努力
2008-04-16 19:20
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
为什么叫模拟呢?想实现什么功能 介绍思路可以吧

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-06 02:15
快速回复:自己做的内存连续分配模拟程序!!!希望大家给些意见!!!谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058006 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved