首页 > 其他分享 >kx-000007-顺序表-扩容

kx-000007-顺序表-扩容

时间:2022-11-30 03:00:11浏览次数:79  
标签:000007 顺序 capacity int pNew etype kx plist inc

  1. 顺序表结构体定义。具体的结构体定义请查看头文件: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;

     

  2. 扩容函数
    /**
    * @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;
    }//性能时高时低,性能低时是因为表满,需要扩容,将数据拷贝,导致的性能降低

     

标签:000007,顺序,capacity,int,pNew,etype,kx,plist,inc
From: https://www.cnblogs.com/kxwslmsps/p/16937278.html

相关文章

  • kx-000005-求表长与表容量
    顺序表结构体定义。具体的结构体定义请查看头文件:https://www.cnblogs.com/kxwslmsps/p/16937235.htmltypedefstatusint;//定义函数结果状态typedefintetyp......
  • kx-000006-判空,判满
    顺序表结构体定义。具体的结构体定义请查看头文件:https://www.cnblogs.com/kxwslmsps/p/16937235.htmltypedefstatusint;//定义函数结果状态typedefintetyp......
  • kx-000004-顺序表-打印
    顺序表定义请参考:https://www.cnblogs.com/kxwslmsps/p/16937235.html打印顺序表/***@brief功能:打印顺序表\n*@param[in]plist:表结构指针*@param[in]op:操作......
  • kx-000002-顺序表-初始化
    顺序表头结点定义请参考:https://www.cnblogs.com/kxwslmsps/p/16937235.html顺序表的初始化函数/***@brief功能:初始化顺序表\n*@param[in]plist:表结构指针*@p......
  • kx-000003-顺序表-清空与销毁
    顺序表结构体定义请参考:https://www.cnblogs.com/kxwslmsps/p/16937235.html清空顺序表/***@brief功能:清空顺序表--将当前表长度置0\n*@param[in]plist:表结构指......
  • kx000001-顺序表-头文件格式
    1/**2*@filemySList.h3*@brief顺序表头文件4*@details定义了函数返类型status及对应的返回值状态标记宏常量5*@details定义了操作函数类型:myOpFun......
  • kx-00003-顺序表宏常量、结构体定义
    头文件说明及格式/***@filemySList.h*@brief顺序表头文件*@details定义了函数返类型status、函数结果状态代码、宏常量*@details定义了操作函数类型:myOpFu......
  • kx-00002-顺序表宏常量、结构体定义
    /***@filemySList.h*@brief顺序表头文件*@details声明了顺序表的各个实现函数*/#ifndef__mySList_H__#define__mySList_H__#define_CRT_SECURE_NO_WARN......
  • kx-00001-顺序表宏常量、结构体定义
    /***@filemySList.h*@brief顺序表头文件*@details声明了顺序表的各个实现函数*/#ifndef__mySList_H__#define__mySList_H__#define_CRT_SECURE_NO_WARN......
  • 应用程序无法正常启动(0xc000007b)最佳解决方案
    1.问题描述我卸载程序的时候,把vc++运行库给卸载掉了,打开vm虚拟机的时候,就出现了应用程序无法正常启动(0xc000007b)的错误2.运行库版本我们的绝大数软件,比如vm、qq、vc+......