动态数组的基本应用与实现实验报告_第1页
动态数组的基本应用与实现实验报告_第2页
动态数组的基本应用与实现实验报告_第3页
动态数组的基本应用与实现实验报告_第4页
动态数组的基本应用与实现实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、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._size), _capacity

3、(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 remove(const int&

5、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即可退出程序 tendl;cout 目前

6、数组为空,建议追加元素后再进行其他操作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 *= 2;/容量不够,再开辟同

8、样长度内存空间 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 = new int_cap

10、acity;/用指针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, items + (inde

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

13、:优点:可以准确查看数组容量变化。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请输入插入元素的位置:tnum;if(num

14、 _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;/执行查看数组容量函数break;case 5:

15、/删除元素 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+)/依次输出数组元素 cout itemsi endl; default:break;/如果输入错误则重新输入cout请输入你的选择:tkey;测试数据:(这里只给出部分选择界面)1. case 5:(要求删除数组元素)2. case 6:(要求显示数组元素)优点:使程序整体结构清晰,可以调用各个函数实现其功能。1.3.3 各功能完整界面体现:(见下页)1.4 完整代码详见程序文件动态数组的基本应用与实现.CPP(函数文件)1.5 函数库及测试系统评价本程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论