/**
* @brief 功能:扩容 n
* @param[in] plist:表结构指针
* @param[in] inc:在表当前容量capacity上扩容inc,令total=capacity+inc,
* @param[in] inc:若total<capacity*DOUBLE,则令total=capacity*DOUBLE
* @return status:返回初始化顺序表是否成功的结果状态标志
* @retval - OK(1):操作成功
* @retval - ERROR(-1):表结构不存在,不可操作
* @retval - OVERFLOW(-2):内存溢出
*/
status sList_expand(mySList* plist, int inc)
{
if (plist == NULL || plist->pbase == NULL)
{
return ERROR;
}
int c = plist->capacity * DOUBLE;
int total = (plist->capacity + inc < c) ? c : (plist->capacity + inc);
etype* pNew = NULL;
#if 1 // 用realloc,更方便
pNew = (etype*)realloc(plist->pbase, sizeof(etype) * total);
if (pNew == NULL)
{
return OVERFLOW;
}
#endif
#if 0 // 用malloc与memmove,自己实现
pNew = (etype*)malloc(sizeof(etype) * total);
if (pNew == NULL)
{
return OVERFLOW;
}
/*
for (int i = 0; i < plist->capacity; i++)
{
pNew[i] = plist->pbase[i];
}// 用malloc会发出缓冲区可能溢出的警告
*/
memmove(pNew, plist->pbase, sizeof(etype) * (plist->capacity));
free(plist->pbase);
#endif // 0
plist->pbase = pNew;
plist->capacity = total;
return OK;
}//性能时高时低,性能低时是因为表满,需要扩容,将数据拷贝,导致的性能降低