/**
* @brief 功能: 在下标index处插入元素xn
* @param[in] plist:表结构指针
* @param[in] index:元素插入的下标
* @param[in] x:待插元素
* @return 返回是否成功插入的结果状态标志
* @retval - OK(1):插入成功
* @retval - ERROR(-1):表结构不存在,插入失败
* @retval - OVERFLOW(-2):表满且扩容失败,插入失败
* @retval - ERR_PARA(-3):index范围不在[0,size],插入失败
*/
status sList_insert(mySList* plist, int index, etype x)
{
if (plist == NULL || plist->pbase == NULL)
{
return ERROR;
}
if (index < 0 || index>plist->size)// 可插入的位置取值为[0,size]任一位置
{
return ERR_PARA; // 参数pos不符合要求
}
int ret = plist->capacity == plist->size; //< 表满
if (ret && OK != sList_expand(plist, 3))
{
return OVERFLOW;
}// 表满且扩容失败
for (int i = plist->size; i > index; --i)
{
plist->pbase[i] = plist->pbase[i - 1];
} // i的含义是旧元素被移至新位置的范围[pos+1,size],空出了pos位置
plist->pbase[index] = x;
++plist->size;
return OK;
}