- 顺序表结构体定义。具体的结构体定义请查看头文件:https://www.cnblogs.com/kxwslmsps/p/16937235.html
typedef status int; // 定义函数结果状态 typedef int etype; // 元素数据类型 #define CAPACITY 10 // 定义初始容量 typedef struct tag_seqList { etype* pbase; //< 表基址 int capacity; //< 表容量 int size; //< 表长度 }mySList;
- 扩容函数
/** * @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; }//性能时高时低,性能低时是因为表满,需要扩容,将数据拷贝,导致的性能降低