C++大作业,求问下面三个重大选题备案制度哪个最简单~

c++大作业--动态内存分区分配方式模拟
&上学期完成了一道c++大作业,主要是模拟动态内存分区分配方式,题目如下:
 假设初始态下,可用内存空间为640K,并有下列请求序列,请分别用首次适应算法和最佳适应算法为作业分配和回收内存块,并显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图。
&作业1申请130K
&作业2申请60K
&作业3申请100k
&作业2释放60K
  ......
一、算法的基本思想
&根据题目要求,使用首次适应算法和最佳适应算法分别实现内存的动态分区,因此说明一下这两种算法的基本思想:
首次适应算法中,空闲分区链是按地址递增的次序链接的,当要分配内存空间时,就在所有空闲分区中查找满足大小要求的可用块,只要找到第一个足以满足要求的空间就停止查找,并把它分配给请求者,如果该空闲空间与所需空间大小一样,则将该分区的状态改为1,表明已被分配,若还有剩余,则将剩余空间重新划为一个空闲分区,有新的起始地址,状态为0。如果从头到尾找不到,则分配失败。
最佳适应算法的空闲链是按照空闲块的大小为序、所有空闲区按容量从小到大的顺序形成空闲分区链。在进行内存分配时候,它在满足需要的前提下,尽量分配最小的空闲块,这样每次查找分配时,从链首开始查找,第一次找到的能满足要求的必然的最佳的,若空闲空间大小与要分配的大小相同时,可直接将其状态改为1即可,若有剩余,则将剩余空闲空间重新划分为一个空闲区,然后根据空闲区的大小对链表进行重新排序,这里对空闲分区大小排序采用了快速排序算法。
首次适应算法的分区回收过程相对简单,因为分区链是按照地址顺序链接的,因此释放内存时只需要判断要释放的分区前后是否也为空闲区,如果前后有空闲分区,则需要进行合并,合并的原则是排在后面的分区合并到前面的分区中,如果前后分区都已分配,则直接将该分区状态改为0即可。
最佳适应算法分区回收时,因为它的空闲分区链是按照空间大小排列的,因此不仅要看要释放分区前后是否为空闲,还要判断其地址是否前后相接,若地址不相接,则即使要释放分区前后均为空闲区,也不能进行合并,而且每次释放后要根据释放空间的大小对链表进行重新排序,同样采用快速排序算法进行重新排序。
二、空闲分区链的结构
& 每个空闲分区链的结构如下所示:
struct SubareaNode
//分区起始地址
&&& //分区大小
//分区状态(0,1)
&&& //作业号
//分区前向指针
&&& SubareaNode
//分区后向指针
&&& SubareaNode
三、通用算法分配内存
通用算法分配内存主要是实现对内存分配,因为最佳算法与首次算法对内存的分配唯一区别是最佳算法分配完内存后,需要重新排序。因此可以把这两者共同地方统一设计。
通用算法分配内存原理是首先判断申请内存的大小能否在空闲分区中找到适合的,如果找到分两种情况,一是刚好大小一致,二是空闲分区比申请内存大小大,则需要划分空闲分区,剩余的空间为新的分区。
四、首次算法回收内存
首次算法回收内存主要是实现对内存回收,关键点是根据分区前后指针判断回收分区的前后是否有空闲。如果有需要进行合并。注意在合并时候,删除不用的节点后,需要重新定义新合并分区的新下一分区前驱指针:pNext-&next-&prior
= pfirstFree-&prior。
五、最佳算法回收内存
最佳算法回收内存主要是实现对内存回收,关键点是根据地址判断前后分区有否空闲,如果有需要合并。在回收后,需要重新排序空闲分区。
六、空闲分区的重新排序
 空闲分区的重新排序,需要定义一个空闲分区指针数组,一个空闲分区的空间大小数组,然后调用快速排序函数,根据空间大小进行排序,排序完成后,空闲分区指针数组相应也进行了重新排序,接着是根据指针数组对原来的空闲分区链表排序。
七、快速排序
 快速排序是在待排序n个记录中任取一个作为“基准”,将其余记录分为两组,第一组中各记录的值均小于或等于基准的值,第二组中各记录的值均大于或等于基准的值。对所分成两组分别重复上述方法,直到所有记录排在合适位置上。
Parr[]是空闲分区链表指针数组,arr[]是记录每个分区空间大小的整形数组。所以使用快速算法对每个分区空间大小排序,排序的同时也相应调整空闲分区链表指针的先后顺序,这样在排序后,可以利用Parr[]对原来的分区链表进行重新定义。
八、执行截图:
附注:完整程序代码查看地址:
http://blog.csdn.net/raymentblog/archive//6173073.aspx
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 2257 人关注过本帖
标题:[求助]我们要做C++大作业,请各位指点下
等 级:新手上路
帖 子:24
结帖率:100%
&&问题点数:0&&回复次数:9&&&
[求助]我们要做C++大作业,请各位指点下
我们要做C++大作业,请各位指点下.已经学了一年了,老师要求编个实现一定功能的程序.代码500行以上.但是我们都不大熟悉(上机太少)而且没学完,只懂一些基础的东西.请各位介绍几本书来看,另外......我连自己想编什么都没头绪啊................C++程序设计大作业要求
目的1.掌握面向对象程序设计的基本方法2.熟练掌握C++编程工具(Visual C++, Turbo C)3.根据问题进行学习,拓广、深化4.独立完成一个小型应用程序的设计、编码和测试
自选题目。2.
问题规模。至少有3层类结构,程序代码不少于500行3.
使用技术。体现OOP封装、继承、多态和类属4种关键技术4.
程序结构良好,没有明显错误,界面简洁实用
第10周完成问题需求和系统设计,提交系统设计说明书。经指导教师审查通过后进入编码。2.
第11~15周为编码、调试程序3.
第16周书写实验报告4.
每周必须到场进行一次进度检查
系统说明书要求提交打印版或手写版(这是检查作业的依据)。内容包括:(1)问题描述(2)类体系设计(3)各类定义的基本功能,即主要数据和函数功能描述(4)拟采用开发平台(Visual C++, Turbo C)2.
编码阶段可以修改原设计,并记录曾作过的修改、补充,以及测试中出现的问题。最后整理为程序设计作业日志。3.
实验报告根据原有的系统设计,编码阶段的工作,整理书写实验报告,内容包括:
(1)问题描述
(2)系统设计
(3)使用说明
(4)讨论4.
最后提交(电子版):(1)实验报告(2)源程序代码(CPP文件),执行文件(EXE)(3)程序设计作业日志
[此贴子已经被作者于 0:33:44编辑过]
搜索更多相关主题的帖子:
等 级:新手上路
帖 子:157
已经学了一年了?只懂一些基础的东西?
多看看别人写的程序吧
不知天堂有没有后门~~~
等 级:新手上路
帖 子:41
私以为500行还是很好糊弄的 如下cout && "line 1"
&& " line 2"
&& " line 3"
......//省略。。
&& "line 500" &&呵呵 开个玩笑 其实你可以问问周围的同学嘛 大家交流交流会有比较好的想法
等 级:新手上路
帖 子:72
3楼的想法太经典了.不过还是有点麻烦啊,直接用循环输出回更好啊~~~
等 级:新手上路
帖 子:24
现在大家都不知怎么办,上学期太懒了.现在好像突然要做个软件出来........具体要求如下...C++程序设计大作业要求
目的1.掌握面向对象程序设计的基本方法2.熟练掌握C++编程工具(Visual C++, Turbo C)3.根据问题进行学习,拓广、深化4.独立完成一个小型应用程序的设计、编码和测试
自选题目。2.
问题规模。至少有3层类结构,程序代码不少于500行3.
使用技术。体现OOP封装、继承、多态和类属4种关键技术4.
程序结构良好,没有明显错误,界面简洁实用
第10周完成问题需求和系统设计,提交系统设计说明书。经指导教师审查通过后进入编码。2.
第11~15周为编码、调试程序3.
第16周书写实验报告4.
每周必须到场进行一次进度检查
系统说明书要求提交打印版或手写版(这是检查作业的依据)。内容包括:(1)问题描述(2)类体系设计(3)各类定义的基本功能,即主要数据和函数功能描述(4)拟采用开发平台(Visual C++, Turbo C)2.
编码阶段可以修改原设计,并记录曾作过的修改、补充,以及测试中出现的问题。最后整理为程序设计作业日志。3.
实验报告根据原有的系统设计,编码阶段的工作,整理书写实验报告,内容包括:
(1)问题描述
(2)系统设计
(3)使用说明
(4)讨论4.
最后提交(电子版):(1)实验报告(2)源程序代码(CPP文件),执行文件(EXE)(3)程序设计作业日志
等 级:新手上路
帖 子:49
500行 就随便整个学生信息管理系统. 什么什么统计系统就撒..
等 级:新手上路
帖 子:24
好像太多人这样做了.........................没新意
等 级:贵宾
威 望:64
帖 子:1749
这么大个程序...你该自己先想想~``写出来有问题在大家讨论呀...
 我是指针,却丢失了目标地址!       
我是循环,却缺少了结束条件!
     我是函数,却没有人来调用!
等 级:新手上路
帖 子:72
其实也可以多找几个人一起来做这个程序啊.....我的毕业设计就是3个人一起做的~~~~~
版权所有,并保留所有权利。
Powered by , Processed in 0.732856 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights ReservedC++大作业一&&人员信息管理系统&& - 简书
C++大作业一&&人员信息管理系统&&
第一次作业
这个作业将让你去练习建立一些简单的类和使用C++的基本功能,包括: 封装,引用,动态内存开辟,简单构造函数和析构函数和const.这个程序片段未?供编或调试.做出合理的错误修正事你任务的一部分,或要求在类里明.一般的,我们会给你最基本部分的代码.如果你需要它们,你总是可以在一个类里添加额外的变量或方法.这个作业被分为三个部分来显示了如何工作.1.设计要求第一部分) 构建简单的类R1.1) 创建一个Person类,其模型在下面的代码结构里.R1.2) 人类(Persons)应该有一些属性: name, email_address, birthdate as作为表示下面类(的属性)的?述.R1.3) 按下面的要求创建一个Date类.R1.4) 每个类都应该有一个按&&运算符的输出的Print函数.这个函数应该?供打印这个类的文本表示,用cout或其他流.这些是非常简单的C++的类,它们的变量不是对象,但是只是C++部分的内在类型.而且这个变量既不是值或指针(它们也不是引用).
//file Date.h
class Date{
Date( int year, int month, int day );...
//end file Date.h
//filePerson.h
class Person{
Person(void);
Person(char * their_name, char * email, int day, int month, int year);char * GetName();
char * GetEmailAddress();
Date GetBirthDate();
void Print();
char* email_
//end file Person.h
第二部分)构建一个容器类Set container.R2.1) 建立一个set的模型PersonSet类,并且它只能保存Person的对象.R2.2) 这个set应该存储person的地址(指针),以便可以获取原始对象(非拷贝).R2.3) set的存储应该用动态数组来保存Person的指针(用new来创建),但是set不应该有界限(数组大小),它们应该在成员进行添加或移除时,适当进行扩展..R2.4) 成员不按任何特定顺序存储(无排序).R2.5) set允许存储副本(相同对象).R2.6) Add()函数应该当在添加的时候,并且需要的情况,进行扩展数组大小并且输出一串信息.R2.7) Remove()函数应该在移除的时候,并且在需要的情况,可以进行缩小数组大小并输出一串信息.R2.8) Add()函数应该带一个引用类型的参数(Person&).R2.9) 迭代应该通过NextElement()函数来?供.R2.10) NextElement()和RemoveElement()应该通过引用返回对于现在我们将去建立sets去只保存Person对象,因此类名是personSet
//file PersonSet.h
class PersonSet{
//default constructor allocate appropriate heap storage store elements on
//heap array declared like this: new Person*[initial_size];
PersonSet (int initial_size = 4);
//store element in the set if the set is full allocate more memory
~ PersonSet (void);
void Add(Person & element) ;
Person & NextElement() ;
//从set中移除最后一个成员
//如果Set空的数据超过一半,释放一些内存Person & RemoveElement();
//从Set中的index索引处移除成员
//如果Set空的数据超过一半,释放一些内存
Person & RemoveElement( int index );
int Size(); //answer the number of elements in the set.void
Print();//print the elements of the set
//void Reset();
Person ** _
//volume of the set
//number of elements in the set
Growable Sets(可扩展的Set)你的Set应该使用一个数组来存储成员并且数组应该使用new在堆上分配.当set被创建时,它有一个指定的尺寸(指数组).如果它满了,必须从堆中开辟更多的内存.这个将会在某一次Add()函数的期间.如果set中有太多空的位置了(数组),它应该去释放它的一些内存.这将发生在某一次remove函数调用的期间.建议: 如果有一半以上空间未存储Person指针(也就是上面所说的空),那么它就去释放一些内存(一半内存).你的set类应该在它扩展和缩小空间是用cout打印出一串信息.这个信息应该标明内存开辟或释放后的所能存储的最大值(capacity).这里是容器的用于基本的扩展和缩小空间的实现.你可以用这些代码来作为你实现的基本代码.
void AddElement( Person& aPerson )
// Relocate the array space
if ( size == capacity )
Person** temp = _
_elements = new Person*[capacity*2];
for( int i=0; i&i++)
_elements [i] = temp[i];
capacity*= 2;
_elements[size++] = &aP
Person& RemoveElement()
Person* p = _elements[size];//shrink the container
if(size & capacity/2)
cout && "shrinking\n";
Person** temp = __elements = new Person*[capacity/2];
for ( int i=0; i&i++)
_elements [i] = temp[i];
capacity /= 2;
return *p;
迭代:NextElement()函数为简单的迭代器?供了一个方法.NextElement()函数应该在set每次调用时都返回下一个成员.特别的,如果NextElement()函数在一个尺寸为n的set中被调用了n次,那么它应该也就迭代通过了set的所有成员(访问了所有成员)..如果你有一个n尺寸的set,如果在第n次之后(n+1)再调用NextElement()函数,将会从开头再次迭代.要实现这个或许要添加一个私有成员变量,在set中是index,来保持当前元素和每次NextElement()调用时的位置(track) ,它可以让index每次增加并且在适当的时候返回第0个索引位置.(也就是说NextElement靠私有成员_index来控制位置的.)...第三部分)添加const修饰应该在参数的地方添加const修饰符,或函数应该是const保护.对你完成程序的第一部分和第二部分进行如下改变.R3.1)这个将要求你像Print()函数那样作为const来定义.例如:void Print() const { ... }R3.2) .改变一下SetOfPersons类里的public接口,以便可以让它们需要的时候使用const修饰符.
//file SetOfPersons.hclass PersonSet
PersonSet (int initial_size = 4) ;
~ PersonSet (void) ;
void Add(Person & element) ;
Person & NextElement()
Person & RemoveElement() ;
Person & RemoveElement( int index ) ;
int Size() const ;
void Print() const ;
Person ** _
//volume of the set
//number of elements in the set
R3.3)在任何地方的const及const类里放置const的标识符,都应该有const修饰符.2.测试要求第四部分)测试规格R4.1)在完成了你的类之后,你应该可以在执行下面的主程序
//file main.cpp
#include &iostream&
#include&string.h&
#include "Date.h"
#include "Person.h"
#include " PersonSet.h"
int main()
//declare some const persons
Person *p1 = new Person("Lou", "lou@chat.ca", 20, 6, 1960);
Person *p2 = new Person("Frank", "f123@chat.ca", 20, 3, 1967);
Person *p3 = new Person("Ann", "ann@chat.ca", 20, 8, 1960);
PersonSet boys,
boys.Add( *p1);
//test to see if the same object is retrieved from the set.
if (p1 != &boys.RemoveElement( ) )
cout && "ERROR: the objects are different \n";
cout && "Good, the objects are the same \n";
boys.Add( *p1);
boys.Add( *p2);
girls.Add( *p3);
boys.Add(*(new Person("John", "f123@chat.ca", 20, 3, 1967)));
girls.Add(*(new Person("Sue", "f123@chat.ca", 20, 3, 1967)));
boys.Add(*(new Person("Frank", "frank@chat.ca", 25, 4, 1958)));
girls.Addd(*(new Person("Mary", "mary@chat.ca", 25, 4, 1955)));
boys.Add(*(new Person("John", "johnchat.ca", 12, 12, 1970)));
//print all the boys using the removeSomeElement() method and delete them
int numberOfBoys = boys.Size();
cout && "number of boys = " && numberOfBoys && "\n";
for(int i = 0; i&numberOfBi++)
Person & boy = boys.RemoveElement();
boy.Print();
//print the girls using the && operator of the SetOfPersons class
cout && "number of girls = " && girls.size() && "\n";
girls.Print();
//print of the girls birthdays and using the someElement() method
int numberOfGirls = girls.Size();
girls.Reset();
for(int i = 0; i&numberOfGi++)
girl.NextElement().GetBirthDate() .Print();
//delete all the girls from the heap
int numberOfGirls = girls.Size();
for(int i = 0; i&numberOfGi++)
Person & her = girls.RemoveElement();
最后代码的结果要求为:R4.2) 修改主程序以便它可以正确无误的演示扩展和缩小.R4.3) 你应该?供或修改主程序来测试所有要求 并且打印出执行结果.R4.4) 你的代码不应该有任何的内存泄露或多次释放.R4.5) 所有的堆对象应该在main函数返回之前释放.R4.5) 你能在添加一个新元素到数组中之前来检查界限.
Why Stock Markets CrashThis page intentionally left blankWhy Stock Markets CrashCritical Events in ComplexFinancial SystemsD i d i e r S ...
背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcode是什么样的体验? 慢慢有一些赞和感谢, 备受鼓舞, 于是我把所做过的题目用一个script跑了一下,编辑成一篇文章。这个总结页面是这么规划的: 题目名称(答案...
?《雅思写作论证论据素材大全》 ?第一大类学校教育与校园文化类 ? ?1.教育的重要性 ?段落大意:教育对于个人和社会的成功都有着非常重要的作用。 ?In today’s society, education is really important. Education h...
1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。 1、一个&.java&源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个publ...
Tabsize: 4 This file is a HOWTO for Wireshark developers interested in writing or workingon Wireshark protocol dissectors. It describes e...
天窗让汽车显得美观大气,上档次,当然天窗也有其他实用优势:抽风换气、降温节能、降噪除雾等;天窗给车主带来了如此舒适体验的同时,车主是否应该考虑精心地保养下天窗呢?今天爱车久久就与大家分享天窗的保养技巧 1.路况糟糕时爱车久久建议不要完全打开天窗,因为天窗和滑轨间的振动太大会...
你独自站在光里,身后却拖着一条又黑又长的影子。你能看得到自己,是因为有光;你能看得到影子,是因为你在光里。影子从不孤单,它总是和光结伴而来。有光的地方就一定会有影。影,并不黑暗,并不可怕。它是你的一部分,它见证光的存在,更是你活着的证明。光与影,它们不在对立的两极。它们始终...
每个女生宿舍似乎都有一些小矛盾小情绪 ,就像雨后的春笋,在某个事件的发酵下,就咕噜咕噜往外冒;而女生之间的感情阿,更像是小病毒,只有在培养皿里显微镜下才能看到快速分裂的其实在点滴的日常生活中无时不在发生变化着。 一个自我自卑且自恋着的射手女M和一个无我无知并无神的天蝎女N的...
振翅鹰飞寻旧梦,边城孤月照桑田。 难得半刻倾心慕,怎晓八分覆水还? 老树枯枝秋欲展,愁人浊酒泪将弹。 琴声远寄无来客,饮罢三巡啸九天。
夜行 前行 是脚步的使命 夜行者不语 唯有漆黑的夜里 才有星空指引 听心脏跳动的声音 鞋与地的撞击 刻下生命的记忆}

我要回帖

更多关于 重大选题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信