C语言动态数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011123091/article/details/82056503

C语言数组目前我知道两种动态数组和环形buffer,先写一个动态数组,等下写个环形bufer。

以下是代码和实验现象

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct damicArray
{
	int size;//使用量
	int capacity;
	int * pArr;
}Dynamic_Array;
Dynamic_Array* Init_Array()
{
	//就是分配damicArray的空间和pArr的空间
	Dynamic_Array * arr=NULL;
	arr=(Dynamic_Array*)malloc(sizeof(Dynamic_Array));
	arr->size=0;
	arr->capacity=20;//先分配20个空间
	arr->pArr=(int *)malloc(sizeof(int)*arr->capacity);
	return arr;
}
void PushBack_Array(Dynamic_Array* arr,int value)
{	
	int* newArr=NULL;
	//做参数检测
	if(arr==NULL)return;
	//做边界检查
	if(arr->size==arr->capacity)
	{
		//创建新空间
		newArr=(int*)malloc(sizeof(int)*arr->capacity * 2);
		if(newArr==NULL) return;
		//复制旧的数据进去
		memcpy(newArr,arr->pArr,arr->capacity*sizeof(int));
		
		//释放原来的
		free(arr->pArr);//一定要先释放到原来的
		arr->pArr=newArr;//不然先复制再释放了。
		arr->capacity=arr->capacity * 2;
	}
	//新的数据填充进去
	arr->pArr[arr->size++]=value;
}
void Print_Array(Dynamic_Array* arr)
{
	for(int i=0;i<arr->size;i++)
	{
		printf("%d\n",arr->pArr[i]);	
	}
}
void FreeSpace_Array(Dynamic_Array* arr)
{
	//参数检查
	if(arr==NULL)return;
	//因为在初始化的时候申请了两块内存所以这里释放
	if(arr->pArr!=NULL)
		free(arr->pArr);
	free(arr);
}
void Clear_Array(Dynamic_Array* arr)
{
	arr->size=0;//很巧妙,只用把size设置为0就可以
}



int main()
{
	Dynamic_Array* arr=Init_Array();
	printf("capacity is %d,size is %d\n",arr->capacity,arr->size);
	for(int i=0;i<30;i++)
	{
		PushBack_Array(arr,i);
	}
	printf("capacity is %d,size is %d\n",arr->capacity,arr->size);
	Print_Array(arr);
	FreeSpace_Array(arr);
    return 0;
}

实验现象:

猜你喜欢

转载自blog.csdn.net/u011123091/article/details/82056503