您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 动态数组的基本应用与实现实验报告
设计动态数组的基本应用与实现1.1需求陈述数组是应用程序中经常要用到的一种数据结构。虽然通过数组可以对大量的数据和对象进行有效的管理,但很多情况下,在程序运行之前,并不能够确切地知道数组中会有多少元素,这时候数组到底声明为多大,就是一个很麻烦的问题。在C++中,动态内存分配技术可以保证程序在运行过程中按照实际需要申请适量的内存,使用结束后还可以释放。这样就使得在运用数组时更加方便,有效。1.2需求分析1.2.1功能分析表1函数库功能分析项目功能函数Array主体函数主函数:intmain()运行函数:Array::run()数组的操作插入元素:Array::insert(constint&index,constint&value)删除元素:Array::remove(constint&index)追加元素:Array::append(constint&value)查看数组大小:Array::size()查看数组容量:Array::capacity()查看数组是否为空:Array::empty()类的函数构造函数:Array::Array(constint&capcity):_size(0),_capacity(capcity)拷贝构造函数:Array::Array(constArray&other):_size(other._size),_capacity(other._capacity)析构函数:Array::~Array()1.2.2数据分析动态数组的基本应用与实现1数组最初默认为空,并且容量为10。由于使用动态内存分配,所以在存入数据时不必担心数组大小的影响,数组容量不够时可以自动分配新的内存存储数据。对数组进行不同的操作时,数组也会根据实际需要进行动态的内存分配。这样使得数组的应用更加方便、灵活,同时提高了效率。为提高函数的可靠性,我们对每个函数的测试准备了2-3套测试数据。1.2.3技术约束本函数库的测试系统已在codeblocks下编译通过。1.3总体设计1.3.1数据结构数组所采用的数据结构是类。声明一个数组类,在将对数组进行的各项操作声明为类的函数,通过调用各个函数来实现对数组的各项操作功能。具体定义形式为:classArray{int_size;//元素个数int_capacity;//容量int*items;//动态数组public:Array(constint&capcity=16);//构造函数Array(constArray&other);//拷贝构造函数Array&operator=(constArray&other);//~Array();//析构函数voidinsert(constint&index,constint&value);//插入函数voidremove(constint&index);//删除函数voidappend(constint&value);//追加函数voidrun();//运行函数};动态数组的基本应用与实现21.3.2函数功能a.主函数(选择界面函数):intmain()功能:使用户来选择要对数组进行的操作。关键代码:Arraya(10);//声明一个动态数组类的对象cout**********************************************************\tendl;cout**************请选择你想对动态数组的操作******************\t\tendl;cout1、插入元素2、追加元素3、查看数组大小\t\tendl;cout4、查看数组容量5、删除元素6、显示元素\t\tendl;cout**********************************************************\tendl;cout提示:输入0即可退出程序\tendl;cout目前数组为空,建议追加元素后再进行其他操作\t\tendl;cout**********************************************************\tendl;a.run();测试数据:优点:让用户自己选择需要进行的操作,更加人性化。b.插入元素函数:Array::insert(constint&index,constint&value)设计思想:首先选择要插入元素的位置,位置错误则报错;位置正确则进行下一步判断。如果数组容量可以继续存放数据,则把items+index所指向的内存空间的数据全部拷贝到items+(index+1)所指向的内存地址上,然后把所要插入的元素赋值给所选择的数组下标位置tmp[index]上,这样完成元素插入过程。如果当前数组容量不能继续存放数据,则需要重新申请内存用于存放数据,然后完成元素插入。功能:把新元素插入数组中两元素之间关键代码:if(index0||index=_size)//如果输入下标位置小于零或大于等于元素个数则报错cout输入位置不正确!\tendl;动态数组的基本应用与实现3if(_size_capacity){//如果当前容量可以继续存放元素memmove(items+(index+1),items+index,(_size-index)*sizeof(int));//items[index]=value;//把要插入的元素存入所选位置}else{_capacity*=2;//容量不够,再开辟同样长度内存空间int*tmp=newint[_capacity];//用指针tmp指向new动态分配的长度为_capacity*sizeof(int)的内存空间memcpy(tmp,items,index*sizeof(int));//memcpy(tmp+(index+1),items+index,(_size-index)*sizeof(int));//tmp[index]=value;//把要插入的元素存入所选位置delete[]tmp;//注销指针tmp,使程序释放用new开辟的内存空间}++_size;//插入一个元素所以元素个数加一}测试数据:优点:可以把想要存入数组的元素放入数组中任意位置(数组末尾除外)c.追加元素函数:Array::append(constint&value)设计思想:首先判断当前数组容量是否可以继续存放数据,若可以,则直接将该元素存放于数组末尾,完成元素追加。若容量不够,则需要继续申请内存空间,然后将该元素存于数组末尾即可。功能:把元素直接存放于数组末尾。关键代码:动态数组的基本应用与实现4if(_size_capacity){//如果当前容量可以继续存放元素items[_size]=value;//直接把元素存入数组末尾}else{_capacity*=2;//容量不够,再开辟同样长度内存空间int*tmp=newint[_capacity];//用指针tmp指向new动态分配的长度为_capacity*sizeof(int)的内存空间memcpy(tmp,items,_size*sizeof(int));//tmp[_size]=value;//直接把元素存入数组末尾delete[]tmp;//注销指针tmp,使程序释放用new开辟的内存空间}++_size;//追加一个元素所以元素个数加一}测试数据:d.删除元素函数:Array::remove(constint&index)设计思想:首先判断要删除的元素位置是否正确,若不正确,则报错。若输入正确,则精选下一步判断。首先元素个数_size减一,判断所选位置是否等于元素个数_size,即要删除的元素是否为最后一位。若是,则直接将最后一位元素抹掉即可,若不是最后一位,则把items+(index+1)所指向的内存空间中的数据拷贝到items+index所指向的内存地址上,此时会将tmp[index]元素覆盖,即将其删除。功能:删除数组中任意一个元素。关键代码:if(index0||index=_size)//如果输入的下标位置小于零或大于元素个数则cout输入位置不正确!\tendl;//输出错误--_size;//如果输入正确则元素个数减一if(index!=_size)//memmove(items+index,items+(index+1),(_size-index)*sizeof(int));//动态数组的基本应用与实现5}测试数据:优点:可以删除不想要的元素。e.查看数组大小函数:Array::size()设计思想:直接返回数组中的元素个数即可。功能:查看数组中的元素个数。关键代码:return_size;测试数据:优点:可以查看数组中元素个数。f.查看数组容量函数:Array::capacity()设计思想:数组一开始默认容量_capacity为10,当容量不够时会自动申请同长内存空间。直接返回_capacity即可。功能:查看数组容量。关键代码:return_capacity;测试数据:动态数组的基本应用与实现61.初始数组容量:2.申请内存空间后:优点:可以准确查看数组容量变化。g.运行函数:Array::run()设计思想:由用户根据选择界面选择要进行的操作,函数根据switch结构来调用上述几个函数实现其功能。功能:调用各个函数以实现操作功能。关键代码:charkey;inti,num,value;//num是下标位置变量,value是元素值变量cout请输入你的选择:\tendl;cinkey;while(key!='0'){switch(key){case'1':{//插入元素if(_size1){//如果数组为空则显示无法插入cout目前数组无法插入元素!\t\t\tendl;break;}else{cout请输入插入元素的位置:\tendl;cinnum;if(num_size-1){//如果输入的位置不存在cout您输入的位置无法插入元素!\t\t\tendl;break;}else{cout请输入插入元素的值:\tendl;动态数组的基本应用与实现7cinvalue;insert(num,value);//执行插入函数break;}}}case'2':{//追加元素cout请输入追加元素的值:\tendl;cinvalue;append(value);//执行追加函数break;}case'3':{//查看数组大小cout动态数组的大小为:\tsize()endl;//执行查看数组大小函数break;}case'4':{//查看数组容量cout动态数组的容量为:\tcapacity()endl;//执行查看数组容量函数break;}case'5':{//删除元素if(_size1){//如果数组为空cout目前数组无法删除元素!\t\t\tendl;break;}else{cout请输入你想删除的元素的位置:\tendl;cinnum;if(num_size-1){//如果输入的位置不存在cout您输入的位置为空白,无法删除!\t\t\tendl;break;}else{remove(num);//执行删除元素函数break;}}}case'6':{if(_size1)//如果数组为空cout目前数组为空,无法显示!\tendl;else{cout目前数组元素为:endl;for(i=0;i=_size-1;i++)//依次输出数组元素coutitems[i]endl;}}default:break;//如果输入错误则重新输入}cout请输入你的选择:\tendl;cinkey;}}动态数组的基本应用与实现8测试数据:(这里只给出部分选择界面
本文标题:动态数组的基本应用与实现实验报告
链接地址:https://www.777doc.com/doc-4474254 .html