DynamicArray.h
#ifndef UNTITLED_DYNAMICARRAY_H
#define UNTITLED_DYNAMICARRAY_H
//动态增长内存,将存放数据的内存放到堆上
//size记录当前数组中具体的元素个数
//capacity内存空间一共可以存放多少元素
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义动态数组
typedef struct DynamicArray{
int *pArr;//存放数据的地址
int size;//当前多少个元素
int capacity;//最大能容纳多少个元素
}Dynamic_Array;//重命名
//对结构体的操作
//初始化 返回结构体,指针指向
Dynamic_Array * InitArray();
//插入
void PushBackArray(Dynamic_Array *arr,int value);//数组 值
//根据位置删除
void RemoveByPosArray(Dynamic_Array *arr,int pos);
//根据值删除
void RemoveByValueArray(Dynamic_Array *arr,int value);
//释放动态数组的内存
void FreeSpaceArray(Dynamic_Array *arr);
//查找
int FindArray(Dynamic_Array *arr,int value);
//打印
void PrintArray(Dynamic_Array *arr);
//清空数组
void ClearArray(Dynamic_Array *arr);
//获得动态数组容量
int CapacityArray(Dynamic_Array *arr);
//获得动态数组当前的元素个数
int SizeArray(Dynamic_Array *arr);
//根据位置获得某个位置元素
int AtArray(Dynamic_Array *arr,int pos);
#endif //UNTITLED_DYNAMICARRAY_H
DynamicArray.cpp
#include "DynamicArray.h"
Dynamic_Array * InitArray(){
//申请内存
Dynamic_Array * myArray = (Dynamic_Array*)malloc(sizeof(Dynamic_Array));
//初始化
myArray->size=0;
myArray->capacity=20;
myArray->pArr = (int*)malloc(sizeof(int)*myArray->capacity);
return myArray;
}
//插入
void PushBackArray(Dynamic_Array *arr,int value){
if(arr==NULL){
return;
}
//判断空间是否足够
if(arr->size==arr->capacity){
//1申请更大的内存空间 新空间为旧空间的两倍
int* newSpace =(int*)malloc(sizeof(int)* arr->capacity * 2);
//2拷贝数据到新空间 注意拷贝的是字节
memcpy(newSpace,arr->pArr,arr->capacity * sizeof(int));
//3释放旧空间内存
free(arr->pArr);
//更新容量 新的地址
arr->capacity = arr->capacity *2;
arr->pArr = newSpace;
}
//插入新元素
arr->pArr[arr->size] = value;
arr->size++;
}//数组 值
//根据位置删除
void RemoveByPosArray(Dynamic_Array *arr,int pos){
if(arr==NULL){
return;
}
//判断位置是否有效
if(pos<0 || pos>=arr->size){
return;
}
//删除元素
for(int i = pos;i<=arr->size;i++){
arr->pArr[i]=arr->pArr[i+1];
}
arr->size--;
}
//根据值删除value第一次出现的位置
void RemoveByValueArray(Dynamic_Array *arr,int value){
if(arr==NULL){
return;
}
//找到值的位置
int pos = FindArray(arr,value);
//删除
RemoveByPosArray(arr,pos);
}
//释放动态数组的内存
void FreeSpaceArray(Dynamic_Array *arr){
if(arr==NULL){
return;
}
if(arr->pArr != NULL){
free(arr->pArr);
}
free(arr);
}
//查找
int FindArray(Dynamic_Array *arr,int value){
if(arr==NULL){
return -1;
}
//找到值的位置
int pos = -1;
for(int i = 0;i<arr->size;i++){
if(arr->pArr[i]==value){
pos=i;
break;
}
}
return pos;
}
//打印
void PrintArray(Dynamic_Array *arr){
if(arr==NULL){
return;
}
for(int i = 0;i<arr->size;i++){
printf("%d",arr->pArr[i]);
}
printf(" \n ");
}
//清空数组
void ClearArray(Dynamic_Array *arr){
if(arr==NULL){
return;
}
arr->size=0;
}
//获得动态数组容量
int CapacityArray(Dynamic_Array *arr){
if(arr==NULL){
return -1;
}
return arr->capacity;
}
//获得动态数组当前的元素个数
int SizeArray(Dynamic_Array *arr){
if(arr==NULL){
return -1;
}
return arr->size;
}
//根据位置获得某个位置元素
int AtArray(Dynamic_Array *arr,int pos){
//if(arr==NULL){
//return -1;
//}
//如果值为-1 返回无效
return arr->pArr[pos];
}
mian.cpp
#include <iostream>
#include "DynamicArray.h"
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "DynamicArray.h"
int main(){
//初始化动态数组
Dynamic_Array *myArray=InitArray();
//打印容量
printf("数组容量:%d\n", CapacityArray(myArray));
printf("数组大小:%d\n", SizeArray(myArray));
//插入元素
for(int i = 0;i<30;i++){
PushBackArray(myArray,i);
}
printf("数组容量:%d\n", CapacityArray(myArray));
printf("数组大小:%d\n", SizeArray(myArray));
//打印
PrintArray(myArray);
//删除
RemoveByPosArray(myArray,0);
RemoveByValueArray(myArray,27);
PrintArray(myArray);
//查找
int pos=FindArray(myArray,5);
printf("位置5查找到:%d %d\n",pos, AtArray(myArray,pos));
//销毁
FreeSpaceArray(myArray);
return 0;
}