话不多说,直接上代码,本次项目申请与释放内存借助于c语言的malloc与free函数,而不用c++的new与delete:
动态数组的头文件DynamicArray.h
#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H
#include
#include
#include
typedef struct Array_Dynamic { //定义动态链表
int size;//数组长度
int capacity;//容量
int* ptrAdd;//数组地址
};
//初始化链表
Array_Dynamic* init_Array();
//尾插元素
void push_back(Array_Dynamic* array, int value);
//按位置删除元素
bool deleteElem_pos(Array_Dynamic* array, int pos);
//按值删除元素
bool deleteElem_value(Array_Dynamic* array, int value);
//按照位置查找某个元素
int findElem_pos(Array_Dynamic* array, int pos);
//按照值查找某个元素 ,并且返回其元素位置,返回-1表示找不到
int findElem_value(Array_Dynamic* array, int value);
//打印元素
void print(Array_Dynamic* array);
//获取链表的容量
int getcapacity(Array_Dynamic* array);
//获取链表的大小
int getSize(Array_Dynamic* array);
//获取链表的首元素
int getFrontElem(Array_Dynamic* array);
//释放动态数组内存
void freeArray(Array_Dynamic* array);
#endif
动态数组的源文件DynamicArray.cpp
#include "DynamicArray.h"
Array_Dynamic* init_Array()
{
Array_Dynamic* array_dynamic = (Array_Dynamic*)malloc(sizeof(Array_Dynamic));
array_dynamic->capacity = 20;
array_dynamic->size = 0;
array_dynamic->ptrAdd =(int*) malloc (sizeof(int) * array_dynamic->capacity);
return array_dynamic;
}
void push_back(Array_Dynamic* array, int value)
{
if (array==NULL)
{
return ;
}
if (array->size==array->capacity) //需要扩容,一般为原来的两倍
{
//申请更大的内存空间
int* expandSpace = (int*)malloc(array->capacity * sizeof(int));
//拷贝到新空间,最后一个为拷贝多大
memcpy(expandSpace, array->ptrAdd, array->capacity * sizeof(int));
//释放原空间
free(array->ptrAdd);
//更新
array->capacity = array->capacity * 2;
array->ptrAdd = expandSpace;
}
array->ptrAdd[array->size] = value;
++array->size;
}
bool deleteElem_pos(Array_Dynamic* array, int pos)
{
if (array==NULL||array->ptrAdd==NULL)
{
return false;
}
for (int i=pos;i<array->size-1;i++)
{
array->ptrAdd[i] = array->ptrAdd[i + 1];
}
array->size--;//更新大小
return true;
}
bool deleteElem_value(Array_Dynamic* array, int value)
{
if (array == NULL || array->ptrAdd == NULL)
{
return false;
}
//先查找是否有该元素
int pos = findElem_value(array, value);
if (pos ==-1)
{
return false;
}
deleteElem_pos(array, pos);
return true;
}
int findElem_pos(Array_Dynamic* array, int pos)
{
if (array==nullptr||array->ptrAdd==nullptr)
{
return 0;
}
if (pos>array->size-1||pos<0)
{
return 0;
}
return array->ptrAdd[pos - 1];
}
int findElem_value(Array_Dynamic* array, int value)
{
if (array == nullptr || array->ptrAdd == nullptr)
{
return -1;
}
for (int i=0;i<array->size;++i)
{
if (value==array->ptrAdd[i])
{
return i;
break;
}
}
return -1;
}
void print(Array_Dynamic* array)
{
if (array==nullptr||array->ptrAdd==NULL)
{
return;
}
for (int i=0;i<array->size;++i)
{
std::cout << array->ptrAdd[i] << " ";
}
std::cout << std::endl;
}
int getcapacity(Array_Dynamic* array)
{
if (array == nullptr)
{
return 0;
}
else
return array->capacity;
}
int getSize(Array_Dynamic* array)
{
return array->size;
}
int getFrontElem(Array_Dynamic* array)
{
if (array->ptrAdd == nullptr || array == nullptr)
return 0;
else
return array->ptrAdd[0];
}
void freeArray(Array_Dynamic* array)
{
if (array==NULL)
{
return ;
}
if (array->ptrAdd!=NULL)
{
free(array->ptrAdd);
}
free(array);
}
主函数:
#include
#include "DynamicArray.h"
#include
void test()
{
std::vector<int>vec = { 1,2,3,4,5,6,7,22,33,44,55,100 };
//建立链表同时初始化
Array_Dynamic *array = init_Array();
//尾插元素
for (auto it:vec)
{
push_back(array, it);
}
print(array);
//获取元素数目
std::cout << "the number elems:" << getSize(array)<<std::endl;
//获取容量
std::cout << "the capacity of array:" << getcapacity(array)<<std::endl;
//输出首元素
std::cout << "首元素:" << getFrontElem(array) << std::endl;
//查找第四个元素
if (findElem_value(array,3))
{
std::cout << "第四个元素为:" << findElem_pos(array, 3) << std::endl;
}
else
{
std::cout << "无该元素" << std::endl;
}
//查找55
if (findElem_value(array,55))
{
std::cout << "第" << findElem_value(array, 55) + 1 <<"元素为"<<55<< std::endl;
}
//删除第二个元素
deleteElem_pos(array, 1);
std::cout << "删除第二个元素后:";
print(array);
//删除值为44的元素
deleteElem_value(array, 44);
std::cout << "删除44后:";
print(array);
//释放动态数组
freeArray(array);
}
int main()
{
test();
std::system("pause");
return 0;
}
输出结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)