现正在做一个项目,要使用动态数组,本想在网站上找一个代码,由于这个项目比较急,本想在网站上找个现成的代码直接用,可是找来找到,就觉得adm_qxx兄写的还算规则,可后来发现动态数组最重要的动态扩展部分竟然没有实现,所以我就修改了adm_qxx的代码,并贴在下面。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INIT_DATA_NUM 10
#define FALSE 0
#define TRUE 1
typedef unsigned char BOOL;
typedef int elem_t;
typedef struct
{
int iCount;
int iCapacity;
elem_t * pData;
}Array_t;
BOOL initArray( Array_t * array, int size );
BOOL setValue( Array_t * array, int index, elem_t val );
BOOL extArray(Array_t *array, int size);
elem_t * getRef( Array_t * array, int index );
elem_t getValue( Array_t * array, int index );
BOOL destroyArray( Array_t * array );
BOOL initArray(Array_t * array, int size)
{
BOOL bRet = FALSE;
int initSize = (size > 0) ? size : INIT_DATA_NUM;
array->pData = (elem_t *)malloc(initSize * sizeof( elem_t));
if (array->pData != NULL)
{
array->iCapacity = initSize;
array->iCount = 0;
bRet = TRUE;
}
return bRet;
}
BOOL extArray(Array_t *array, int size)
{
BOOL bRet = FALSE;
int extSize = (size > 0) ? size : INIT_DATA_NUM;
array->pData = (elem_t *)realloc(array->pData, (extSize + arrar->iCount) * sizeof(elem_t));
if (array->pData != NULL)
{
array->iCapacity += extSize;
bRet = TRUE;
}
return bRet;
}
BOOL setValue(Array_t *array, int index, elem_t val)
{
BOOL bRet = FALSE;
if(index >= 0 && index < array->iCapacity)
{
array->pData[index] = val;
array->iCount++;
bRet = TRUE;
}
else if (index >= array->iCapacity)
{
if (extArray(array, 0))
{
array->pData[index] = val;
array->iCount++;
bRet = TRUE;
}
}
return bRet;
}
elem_t *getRef( Array_t *array, int index )
{
elem_t * eRet = NULL;
if( index > 0 && index < array->iCount )
{
eRet = array->pData + index;
}
return eRet;
}
elem_t getValue( Array_t * array, int index )
{
return array->pData[index];
}
int getCount(Array_t *array)
{
return array->iCount;
}
BOOL destroyArray( Array_t * array )
{
free( array->pData );
array->pData = NULL;
return TRUE;
}