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;
}
- C++编写容器列表
- 【c++】用c++的vector容器编写简单的通讯录
- C中可变参数列表函数的编写
- 自定义列表容器
- 数组列表容器
- 列表容器list
- C++--容器
- servlet2.3的容器列表
- A020-列表容器之ListView
- A021-列表容器之GridView
- A022-列表容器之ExpandableListView
- Python内置容器之列表
- STL-顺序容器-列表list
- 编写自己的list容器
- 动手编写一个IOC容器
- 【C/C++】STL容器
- VC++列表控件的编写
- C++/C 宏列表
- java web项目(spring项目)中集成webservice ,实现对外开放接口
- npm install 报错vue --save失败
- 怎么删除以前系统的LVM分区(Ubuntu)
- Ubuntu14.04 tensorflow安装手册
- Leetcode Sort Colors
- C++编写容器列表
- JQuery和flot插件结合动态显示服务器CPU及内存状态
- 时间管理
- Scala入门到精通——第二十四节 高级类型 (三)
- 将一个集合转化为多个集合(一维集合转为二维集合)
- css3中通过设置box-pack和box-align让div里面的各种元素垂直和水平居中的方法
- 技术构思:通过2-of-2多重签名,构建实现类闪电支付
- git的使用及遇到的问题(本地代码托管到github)
- Matlab中tic和toc用法