現正在做一個項目,要使用動態數組,本想在網站上找一個代碼,由於這個項目比較急,本想在網站上找個現成的代碼直接用,可是找來找到,就覺得adm_qxx兄寫的還算規則,可後來發現動態數組最重要的動態擴充部分竟然沒有實現,所以我就修改了adm_qxx的代碼,並貼在下面。
#include <stdio.h>#include <stdlib.h>#include <string.h>#define INIT_DATA_NUM 10#define FALSE 0#define TRUE 1typedef 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;}