您的位置:首页 > 编程语言 > C语言/C++

C语言实现动态数组

2011-08-22 11:36 417 查看
现正在做一个项目,要使用动态数组,本想在网站上找一个代码,由于这个项目比较急,本想在网站上找个现成的代码直接用,可是找来找到,就觉得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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: