数据结构课程设计内存分配Word文档格式.docx

上传人:b****6 文档编号:22065033 上传时间:2023-02-02 格式:DOCX 页数:14 大小:316.92KB
下载 相关 举报
数据结构课程设计内存分配Word文档格式.docx_第1页
第1页 / 共14页
数据结构课程设计内存分配Word文档格式.docx_第2页
第2页 / 共14页
数据结构课程设计内存分配Word文档格式.docx_第3页
第3页 / 共14页
数据结构课程设计内存分配Word文档格式.docx_第4页
第4页 / 共14页
数据结构课程设计内存分配Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构课程设计内存分配Word文档格式.docx

《数据结构课程设计内存分配Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计内存分配Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构课程设计内存分配Word文档格式.docx

stdlib.h"

string.h"

#defineMAX32767

typedefstructnode/*设置分区描述器*/

{

intaddress,size;

structnode*next;

}RECT;

/*函数原型*/

RECT*assignment(RECT*head,intapplication);

voidacceptment1(RECT*head,RECT*back1);

voidacceptment2(RECT*head,RECT*back1)

intbackcheck(RECT*head,RECT*back1);

voidprint(RECT*head);

/*变量声明*/

RECT*head,*back,*assign1,*p;

intapplication1,maxblocknum;

charway;

/*主函数*/

main()

charchoose[10];

intcheck;

head=malloc(sizeof(RECT));

/*建立可利用区表的初始状态*/

p=malloc(sizeof(RECT));

head->

size=MAX;

address=0;

next=p;

maxblocknum=1;

p->

next=NULL;

print(head);

/*输出可利用表初始状态*/

printf("

Entertheway(bestorfirst(b/f)\n"

);

/*选择适应策略*/

scanf("

%c"

&

way);

do{

Entertheassignoraccept(as/ac)\n"

%s"

choose);

/*选择分配或回收*/

if(strcmp(choose,"

as"

)==0)/*as为分配*/

{

Inputapplication:

\n"

%d"

application1);

/*输入申请空间大小*/

assign1=assignment(head,application1);

/*调用分配函数*/

if(assign1->

address==-1)/*分配不成功*/

Toolargeapplication!

assignfails!

!

\n\n"

else

Success!

ADDRESS=%5d\n"

assign1->

address);

/*分配成功*/

/*输出*/

}

elseif(strcmp(choose,"

ac"

)==0)/*回收*/

back=malloc(sizeof(RECT));

InputAdressandSize!

%d%d"

back->

address,&

size);

/*输入回收地址和大小*/

check=backcheck(head,back);

/*检查*/

if(check==1)

if(tolower(way)=='

f'

)/*首先适应算法*/

acceptment1(head,back);

/*首先适应*/

acceptment2(head,back);

/*最佳适应*/

}while(!

strcmp(choose,"

)||!

));

}

/*

分配函数

*/

RECT*assignment(RECT*head,intapplication)

RECT*after,*before,*assign;

assign=malloc(sizeof(RECT));

/*分配申请空间*/

assign->

size=application;

if(application>

head->

size||application<

=0)

address=-1;

/*申请无效*/

before=head;

after=head->

next;

while(after->

size<

application)/*查找适应的结点*/

before=before->

after=after->

if(after->

size==application)/*结点大小等于申请大小则完全分配*/

size==head->

size)

maxblocknum--;

before->

next=after->

address=after->

address;

free(after);

size)maxblocknum--;

after->

size=after->

size-application;

/*大于申请空间则截取相应大小分配*/

address+after->

size;

b'

)/*如果是最佳适应,将截取后剩余结点重新回收到合适位置*/

back=after;

if(maxblocknum==0)/*修改最大数和头结点值*/

size=0;

while(before!

=NULL)

if(before->

size>

size=before->

elseif(before->

maxblocknum++;

assign1=assign;

returnassign1;

/*返回分配给用户的地址*/

voidacceptment1(RECT*head,RECT*back1)/*首先适应*/

RECT*before,*after;

intinsert;

insert=0;

while(!

insert)/*将回收区插入空闲区表*/

if((after==NULL)||((back1->

address<

=after->

address)&

&

(back1->

address>

=before->

address)))

next=back1;

back1->

next=after;

insert=1;

if(back1->

address==before->

address+before->

size)/*与上一块合并*/

size+back1->

next=back1->

free(back1);

back1=before;

if(after!

=NULL&

(after->

address==back1->

address+back1->

size))

{/*与下一块合并*/

size=back1->

size+after->

if(head->

back1->

size)/*修改最大块值和最大块个数*/

size==back1->

/*最佳适应,back1为回收结点的地址*/

RECT*before,*after;

intinsert

next==NULL)/*如果可利用区表为空*/

while(after!

=NULL)/*与上一块合并*/

if(back1->

address==after->

address)

back->

after=NULL;

address)/*与下一块合并*/

before=head;

/*将回收结点插入到合适的位置*/

after=head->

do{

if(after==NULL||(after->

insert);

size)/*修改最大块值和最大块数*/

voidprint(RECT*head)/*输出链表*/

intindex,k;

before=head->

index=1;

next==NULL)

NOpartforassignment!

*****index*******address********end*********size*****\n"

----------------------------------------------------\n"

%-13d%-13d%-13d%-13d\n"

index,before->

address,before->

size-1,before->

index++;

}/*检查回收块的合法性,back1为要回收的结点地址*/

intbackcheck(RECT*head,RECT*back1)

intcheck=1;

0||back1->

0)

check=0;

/*地址和大小不能为负*/

while((before!

=NULL)&

check)/*地址不能和空闲区表中结点出现重叠*/

if(((back1->

before->

address)&

address))||((back1->

address)

&

size)))

if(check==0)

Errorinput!

returncheck;

/*返回检查结果*/

}

四.运行与测试

可以自己手动写入需要的相应文本内容,也可以系统自动生成

系统自动生成文本前或是手动建立文本前,选择1便会出错

现在我们选择2重新输入文本内容并选择输入4自由块空间,每个空间起始地址与长度自己定义,输入完选择3显示空闲表和分配表

返回选择界面,选择1申请空间

申请完毕选择3可看分配情况跟此时自由块的空闲和占用情况

完成作业后撤销作业

撤销完毕后再来查看此时自由块情况,会发现作业空间释放后自由块恢复原本大小

五、总结

在这次课设中,我发现自己c语言掌握的不够好,但是这次课设使我对操作系统的知识有了一定的了解,也巩固了c语言的知识,设计中,对程序代码的设计阶段比较困难,但是我觉得通过课设能提高我的动手能力与熟练程度。

参考文献

《数据结构》(C语言版)严蔚敏、吴伟民编著

[美]S巴斯.计算机算法:

《设计和分析引论》.朱洪等译

《数据库系统基础》姚诗斌编著

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1