动态数组实现(c/c++)
1. array.h
//结构体
typedef struct{
ElemType *pArr;
int length;
}Array;
//函数声明
void InitArray(Array &arr);
void TravelArray(Array arr);
void AddArrayElem(Array &arr,ElemType data);
2. array.cpp
#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h>
#include "array.h"
#include <stdlib.h>
#include <string.h>
using namespace std;
//初始化
void InitArray(Array &arr){
arr.pArr = NULL;
arr.length = 0; //当前元素个数
arr.maxlength = 0;
}
//遍历元素
void TravelArray(Array arr){
cout<<"ARRAY:";
for(int i = 0;i<arr.length;++i)
cout<<arr.pArr[i]<<" ";
cout<<endl;
}
//添加元素
void AddArrayElem(Array &arr,ElemType data){
//申请内存
int * pNew = (int *)malloc(sizeof(int)*(arr.length+1));
if(arr.pArr){ //如果arr.pArr != NULL
memcpy(pNew,arr.pArr,sizeof(int)*arr.length);
free(arr.pArr);
}
arr.pArr = pNew;
//添加数据 长度加一
arr.pArr[arr.length++] = data;
}
3. 优化
优化方案:
空间换时间 每次申请内存给1.5倍内存空间 如果length的1.5倍小于length+1 那么开辟length+1的空间
//结构体
typedef struct{
ElemType *pArr;
int length; //当前长度
int maxlength; //当前容量
}Array;
//初始化
void InitArray(Array &arr){
arr.pArr = NULL;
arr.length = 0; //当前元素个数![在这里插入图片描述](https://img-blog.csdnimg.cn/0274432b5c70495a8d3fb893e077de47.png)
arr.maxlength = 0;
}
//优化改进
//添加元素
void AddArrayElem(Array &arr,ElemType data){
if(arr.length>=arr.maxlength){
arr.maxlength = arr.maxlength + (((arr.maxlength >> 1) > 1 ) ? (arr.maxlength >> 1) : 1);
//申请内存
int * pNew = (int *)malloc(sizeof(int)*arr.maxlength);
if(!pNew)
return;
if(arr.pArr){ //如果arr.pArr != NULL
memcpy(pNew,arr.pArr,sizeof(int)*arr.length);
free(arr.pArr);
}
arr.pArr = pNew;
}
//添加数据 长度加一
arr.pArr[arr.length++] = data;
}
4. main.cpp
int main(){
Array arr;
InitArray(arr); //初始化
for(int i = 0;i<20;++i)
AddArrayElem(arr,i);
TravelArray(arr); //遍历
cout<<"arr.length = "<<arr.length<<" "<<"arr.maxlength = "<<arr.maxlength<<endl; //打印数组长度和当前容量
}
5. 示例
——————END-2021-12-31——————
记录学习,分享经验。