C++编写容器列表

来源:互联网 发布:百度云 域名 编辑:程序博客网 时间:2024/05/17 09:46

最近因为工作需要自己参考一些资料和自己理解编译一个链表容器用于数据的删除、添加、插入、清空。。。。还比不上list,不吝赐教。

直接上代码了

直接写在头文件里面,包含该头文件即可用:



typedef  int INT_PTR;
typedef  unsigned int UINT_PTR, *PUINT_PTR;

typedef  long LONG_PTR, *PLONG_PTR;
typedef unsigned long ULONG_PTR, *PULONG_PTR;



typedef void*                            TPHTABLE_ELEMENT;                    // 元素类型 Vl
typedef TPHTABLE_ELEMENT*                TPHTABLE_ELE_PTR;                    // 元素指针

typedef struct tag_TPHTable
{
    int                                    m_nMaxSize;                            // 数组空间大小
    int                                    m_nCount;                            // 元素个数
    TPHTABLE_ELE_PTR                    m_pEleArray;                        // 元素数组指针
}TPHTable, *LPTPHTABLE;


//创建句柄管理列表
//参数: nMaxSize  句柄数组空间大小
//返回值: 新的指针列表
inline LPTPHTABLE TPHTable_Create(int nMaxSize)
{
    if(nMaxSize<=0)
        return NULL;
    LPTPHTABLE pHT = (LPTPHTABLE)malloc(sizeof(TPHTable));
    if (pHT != NULL)
    {
        memset(pHT,0,sizeof(TPHTable));
        if(nMaxSize>0)
        {
            pHT->m_pEleArray = (TPHTABLE_ELE_PTR)malloc(sizeof(TPHTABLE_ELEMENT)*nMaxSize);
            if(NULL == pHT->m_pEleArray)
            {
                free(pHT);
                return NULL;
            }
            memset(pHT->m_pEleArray,0,sizeof(TPHTABLE_ELEMENT)*nMaxSize);
            pHT->m_nMaxSize = nMaxSize;
        
        }
    }
    return pHT;
}



//释放句柄管理列表
//参数: pHT 句柄列表指针

inline void TPHTable_Release(LPTPHTABLE pHT)
{
    if(pHT != NULL)
        return ;
    if(pHT->m_pEleArray!= NULL)
    {
        free(pHT->m_pEleArray);
    }
    free(pHT);

}


//初始化句柄管理列表
//参数: pHT句柄表指针
inline void TPHTable_Init(LPTPHTABLE pHT)
{
    if(pHT != NULL)
        return ;
    memset(pHT,0,sizeof(TPHTable));

}

//设置句柄空间大小
//参数: pHT 句柄表指针;nMaxSize句柄表空间大小
inline void TPHTable_SetSize(LPTPHTABLE pHT,int nMaxSize)
{
    if((pHT ==NULL)&&(nMaxSize< pHT->m_nMaxSize))
        return;
    if(pHT->m_nMaxSize == 0)
    {
        pHT->m_pEleArray = (TPHTABLE_ELE_PTR)malloc(sizeof(TPHTABLE_ELEMENT)*nMaxSize);
        if(NULL == pHT->m_pEleArray)
            return;
        memset(pHT->m_pEleArray,0,sizeof(TPHTABLE_ELEMENT)*nMaxSize);
        pHT->m_nMaxSize = nMaxSize;
    }
    else //扩充现有列表
    {
        TPHTABLE_ELE_PTR pTemp = (TPHTABLE_ELE_PTR)malloc(sizeof(TPHTABLE_ELEMENT) * nMaxSize);
        if(NULL == pTemp)
            return;
        memcpy(pTemp,pHT->m_pEleArray,sizeof(TPHTABLE_ELEMENT)*pHT->m_nCount);
        memset((pTemp+pHT->m_nCount),0,sizeof(TPHTABLE_ELEMENT)*(nMaxSize-pHT->m_nCount));
        free(pHT->m_pEleArray);
        pHT->m_pEleArray = pTemp;
        pHT->m_nMaxSize = nMaxSize;
    }

}

// 是否空表
// 参数:pHT 句柄表指针
// 返回值: true 表为空;false 表不空

inline bool TPHTable_IsEmpty(LPTPHTABLE pHT)
{    
    if(NULL==pHT)
        return true;
    return (pHT->m_nCount == 0);
        
}

//插入数据
//参数: pHT句柄表指针 ; e带插入数据
//返回值: 插入句柄位置
inline int TPHTable_Insert(LPTPHTABLE pHT,TPHTABLE_ELEMENT e)
{
    if(pHT->m_nCount < pHT->m_nMaxSize)
    {
        for (int i = 0;i<pHT->m_nMaxSize;i++)
        {
            if(pHT->m_pEleArray[i] == NULL)
            {
                pHT->m_pEleArray[i] = e;
                pHT->m_nCount++;
                return i+1;
            }

        }
    }
    else if (pHT->m_nMaxSize > 0)
    {
        TPHTable_SetSize(pHT,(pHT->m_nMaxSize<<1));
        pHT->m_pEleArray[pHT->m_nCount] = e;
        pHT->m_nCount++;
            return pHT->m_nCount;
    }

    return 0;
}


//get 数据
//参数: pHT句柄表指针 ; 索引位置
//返回值: 插入句柄位置
inline TPHTABLE_ELEMENT TPHTable_GetIndex(LPTPHTABLE pHT,int index)
{
    if(pHT!=NULL && pHT->m_pEleArray != NULL && index<pHT->m_nCount && index>0)
    return (pHT->m_pEleArray[index]);

}

//set 数据
//参数: pHT句柄指针 ; index 索引位置,e数据
inline TPHTABLE_ELEMENT TPHTable_SetAt(LPTPHTABLE pHT,int index,TPHTABLE_ELEMENT e)
{
    if(pHT!=NULL && pHT->m_pEleArray != NULL && index<pHT->m_nCount && index>0)
    {
        TPHTABLE_ELEMENT pTemp = pHT->m_pEleArray[index];
        pTemp = NULL;
        pHT->m_pEleArray[index] = e;
        return e;
    }
    return NULL;
    
}

//删除某一个元素
inline  void TPHTable_ReMoveAt(LPTPHTABLE pHT,int index)
{
    if(pHT == NULL || index>pHT->m_nCount)
        return;

    TPHTABLE_ELEMENT tmp =    pHT->m_pEleArray[index];
    pHT->m_pEleArray[index] = NULL;
    pHT->m_nCount--;
     delete tmp;
}


//删除全部元素
inline bool TPHTable_ReMoveAll(LPTPHTABLE pHT)
{
    if (pHT == NULL||pHT->m_nCount <1)
    {
        return false;
    }
    memset(pHT->m_pEleArray,0,sizeof(TPHTABLE_ELEMENT)*pHT->m_nCount);
    pHT->m_nCount = 0;
    pHT = NULL;
    return true;
}



原创粉丝点击