动态数组的基本应用与实现实验报告.doc

上传人:小飞机 文档编号:2768973 上传时间:2023-02-24 格式:DOC 页数:11 大小:151KB
返回 下载 相关 举报
动态数组的基本应用与实现实验报告.doc_第1页
第1页 / 共11页
动态数组的基本应用与实现实验报告.doc_第2页
第2页 / 共11页
动态数组的基本应用与实现实验报告.doc_第3页
第3页 / 共11页
动态数组的基本应用与实现实验报告.doc_第4页
第4页 / 共11页
动态数组的基本应用与实现实验报告.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《动态数组的基本应用与实现实验报告.doc》由会员分享,可在线阅读,更多相关《动态数组的基本应用与实现实验报告.doc(11页珍藏版)》请在三一办公上搜索。

1、精选优质文档-倾情为你奉上设计动态数组的基本应用与实现1.1需求陈述数组是应用程序中经常要用到的一种数据结构。虽然通过数组可以对大量的数据和对象进行有效的管理,但很多情况下,在程序运行之前,并不能够确切地知道数组中会有多少元素,这时候数组到底声明为多大,就是一个很麻烦的问题。在C+中,动态内存分配技术可以保证程序在运行过程中按照实际需要申请适量的内存,使用结束后还可以释放。这样就使得在运用数组时更加方便,有效。1.2需求分析1.2.1功能分析表1 函数库功能分析项目功能函数Array主体函数主函数:int main()运行函数:Array:run()数组的操作插入元素:Array:insert

2、(const int & index, const int & value)删除元素:Array:remove(const int& index) 追加元素:Array:append(const int& value) 查看数组大小:Array:size()查看数组容量:Array:capacity()查看数组是否为空:Array:empty()类的函数构造函数:Array:Array(const int& capcity) :_size(0), _capacity(capcity)拷贝构造函数:Array:Array(const Array& other) :_size(other._siz

3、e), _capacity(other._capacity)析构函数:Array:Array()1.2.2数据分析数组最初默认为空,并且容量为10。由于使用动态内存分配,所以在存入数据时不必担心数组大小的影响,数组容量不够时可以自动分配新的内存存储数据。对数组进行不同的操作时,数组也会根据实际需要进行动态的内存分配。这样使得数组的应用更加方便、灵活,同时提高了效率。为提高函数的可靠性,我们对每个函数的测试准备了23套测试数据。1.2.3技术约束本函数库的测试系统已在code blocks下编译通过。1.3总体设计1.3.1 数据结构数组所采用的数据结构是类。声明一个数组类,在将对数组进行的各项

4、操作声明为类的函数,通过调用各个函数来实现对数组的各项操作功能。具体定义形式为:class Array int _size;/元素个数 int _capacity;/容量 int* items;/动态数组public: Array(const int& capcity = 16);/构造函数 Array(const Array& other);/拷贝构造函数 Array& operator = (const Array& other);/ Array();/析构函数 void insert(const int& index, const int& value);/插入函数 void remov

5、e(const int& index);/删除函数 void append(const int& value);/追加函数 void run();/运行函数;1.3.2 函数功能a. 主函数(选择界面函数):int main()功能:使用户来选择要对数组进行的操作。关键代码: Array a(10);/声明一个动态数组类的对象 cout*tendl;cout*请选择你想对动态数组的操作*ttendl;cout 1、插入元素 2、追加元素 3、查看数组大小 ttendl;cout 4、查看数组容量 5、删除元素 6、显示元素 ttendl;cout*tendl;cout提示:输入0即可退出程序

6、tendl;cout 目前数组为空,建议追加元素后再进行其他操作ttendl;cout*tendl; a.run();测试数据: 优点:让用户自己选择需要进行的操作,更加人性化。b. 插入元素函数:Array:insert(const int & index, const int & value)设计思想:首先选择要插入元素的位置,位置错误则报错;位置正确则进行下一步判断。如果数组容量可以继续存放数据,则把items + index所指向的内存空间的数据全部拷贝到items + (index + 1)所指向的内存地址上,然后把所要插入的元素赋值给所选择的数组下标位置tmpindex上,这样完成

7、元素插入过程。如果当前数组容量不能继续存放数据,则需要重新申请内存用于存放数据,然后完成元素插入。功能:把新元素插入数组中两元素之间关键代码: if (index = _size )/如果输入下标位置小于零或大于等于元素个数则报错 cout 输入位置不正确!tendl; if (_size _capacity) /如果当前容量可以继续存放元素 memmove(items + (index + 1), items + index, (_size - index) * sizeof(int);/ itemsindex = value;/把要插入的元素存入所选位置 else _capacity *=

8、 2;/容量不够,再开辟同样长度内存空间 int* tmp = new int_capacity; /用指针tmp指向new动态分配的长度为_capacity*sizeof(int)的内存空间 memcpy(tmp, items, index * sizeof(int);/ memcpy(tmp + (index + 1), items + index, (_size - index)* sizeof(int);/ tmpindex = value;/把要插入的元素存入所选位置 delete tmp;/注销指针tmp,使程序释放用new开辟的内存空间 +_size;/插入一个元素所以元素个数加

9、一测试数据:优点:可以把想要存入数组的元素放入数组中任意位置(数组末尾除外)c.追加元素函数:Array:append(const int & value)设计思想:首先判断当前数组容量是否可以继续存放数据,若可以,则直接将该元素存放于数组末尾,完成元素追加。若容量不够,则需要继续申请内存空间,然后将该元素存于数组末尾即可。功能:把元素直接存放于数组末尾。关键代码:if (_size _capacity) /如果当前容量可以继续存放元素 items_size = value;/直接把元素存入数组末尾 else _capacity *= 2;/容量不够,再开辟同样长度内存空间 int* tmp

10、= new int_capacity;/用指针tmp指向new动态分配的长度为_capacity*sizeof(int)的内存空间 memcpy(tmp, items, _size * sizeof(int);/ tmp_size = value;/直接把元素存入数组末尾 delete tmp;/注销指针tmp,使程序释放用new开辟的内存空间 +_size;/追加一个元素所以元素个数加一测试数据:d. 删除元素函数:Array:remove(const int& index) 设计思想:首先判断要删除的元素位置是否正确,若不正确,则报错。若输入正确,则精选下一步判断。首先元素个数_size减

11、一,判断所选位置是否等于元素个数_size,即要删除的元素是否为最后一位。若是,则直接将最后一位元素抹掉即可,若不是最后一位,则把items + (index + 1)所指向的内存空间中的数据拷贝到items + index 所指向的内存地址上,此时会将tmpindex元素覆盖,即将其删除。 功能:删除数组中任意一个元素。 关键代码: if (index = _size)/如果输入的下标位置小于零或大于元素个数则 cout 输入位置不正确!tendl;/输出错误 -_size;/如果输入正确则元素个数减一 if (index != _size)/ memmove(items + index,

12、items + (index + 1), (_size - index) * sizeof(int);/测试数据:优点:可以删除不想要的元素。e.查看数组大小函数 :Array:size() 设计思想:直接返回数组中的元素个数即可。功能:查看数组中的元素个数。关键代码:return _size;测试数据:优点:可以查看数组中元素个数。f.查看数组容量函数:Array:capacity() 设计思想:数组一开始默认容量_capacity为10,当容量不够时会自动申请同长内存空间。直接返回_capacity即可。功能:查看数组容量。关键代码:return _capacity; 测试数据:1.初始数

13、组容量:2.申请内存空间后:优点:可以准确查看数组容量变化。g. 运行函数:Array:run()设计思想:由用户根据选择界面选择要进行的操作,函数根据switch结构来调用上述几个函数实现其功能。功能:调用各个函数以实现操作功能。关键代码:char key;int i ,num,value;/num是下标位置变量,value是元素值变量cout 请输入你的选择:t key;while(key!=0)switch(key)case 1:/插入元素 if(_size 1)/如果数组为空则显示无法插入 cout目前数组无法插入元素!tttendl; break; elsecout请输入插入元素的位

14、置:tnum;if(num _size-1)/如果输入的位置不存在 cout您输入的位置无法插入元素!tttendl; break; else cout请输入插入元素的值:t value; insert(num, value);/执行插入函数 break; case 2:/追加元素cout请输入追加元素的值:t value;append(value);/执行追加函数break;case 3:/查看数组大小cout动态数组的大小为:tsize()endl;/执行查看数组大小函数break;case 4:/查看数组容量cout动态数组的容量为:tcapacity()endl;/执行查看数组容量函数

15、break;case 5:/删除元素 if(_size 1)/如果数组为空 cout目前数组无法删除元素!tttendl; break; elsecout请输入你想删除的元素的位置:tnum;if(num _size-1)/如果输入的位置不存在 cout您输入的位置为空白,无法删除!tttendl; break; elseremove(num);/执行删除元素函数break; case 6: if(_size 1)/如果数组为空 cout目前数组为空,无法显示!tendl; else cout目前数组元素为:endl; for(i = 0;i = _size-1;i+)/依次输出数组元素 co

16、ut itemsi endl; default:break;/如果输入错误则重新输入cout请输入你的选择:tkey;测试数据:(这里只给出部分选择界面)1. case 5:(要求删除数组元素)2. case 6:(要求显示数组元素)优点:使程序整体结构清晰,可以调用各个函数实现其功能。1.3.3 各功能完整界面体现:(见下页)1.4 完整代码详见程序文件动态数组的基本应用与实现.CPP(函数文件)1.5 函数库及测试系统评价本程序是为了更加直观地理解、体验动态数组的使用以及发现其在使用过程中需要注意的问题,同时有助于在学习数组过程中更好地理解数组内存的动态分配的过程,有利于同学们更加深入了解数组在面向对象的程序设计中的用途。遗憾的是,由于时间原因,本程序仅仅演示了有关数组的最基本的应用,还有许多功能没有一一实现,并且还存在着一些算法不够精妙,语法不够简洁,以及代码冗长等问题,未能对其进行深入优化,有待进一步的学习、解决。该测试系统能够对已设计好的函数进行比较全面的测试,可以测试许多特殊情况,避免函数执行出现死角。专心-专注-专业

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号