#include <stdio.h>
#include <stdlib.h>
#include "JWArray_event.h"
//////////////////////////////////////////////////////////////////////////
//基础线性表函数
//////////////////////////////////////////////////////////////////////////
/************************************************************************/
/* 创建指定大小的顺序线性表,nIncrSize参数用于当存储空间不够时重新分配存储 */
/************************************************************************/
JWArray_event* JWArrayCreate_event(const int nInitSize, const int nIncrSize)
{
JWArray_event *pArray;
if (NULL == (pArray = (JWArray_event *)malloc(sizeof(JWArray_event))))
{
return NULL;
}
if (NULL == (pArray->pElem = (JWArrayElem_event *)malloc(nInitSize * sizeof(JWArrayElem_event))))
{
free(pArray);
return NULL;
}
pArray->nLength = 0;
pArray->nTotalSize = nInitSize;
pArray->nIncrSize = nIncrSize;
return pArray;
}
/************************************************************************/
/* 销毁线性表 */
/************************************************************************/
void JWArrayDestroy_event(JWArray_event *pArray)
{
if (NULL != pArray)
{
if (NULL != pArray->pElem)
{
free(pArray->pElem);
}
free(pArray);
}
}
/************************************************************************/
/* 清空线性表 */
/************************************************************************/
void JWArrayMakeEmpty_event( JWArray_event *pArray )
{
pArray->nLength = 0;
}
JWArray_BOOL JWArrayIsEmpty_event(JWArray_event *pArray)
{
return pArray->nLength == 0 ? JWARRAY_TRUE : JWARRAY_FALSE;
}
JWArray_BOOL JWArrayIsFull_event(JWArray_event *pArray)
{
return pArray->nLength >= pArray->nTotalSize ? JWARRAY_TRUE : JWARRAY_FALSE;
}
int JWArrayGetLength_event(JWArray_event *pArray)
{
return pArray->nLength;
}
/************************************************************************/
/* 获得指定索引(0~长度-1)的值 */
/************************************************************************/
JWArray_BOOL JWArrayGetAt_event(JWArray_event *pArray, const int nIndex, JWArrayElem_event *pElem)
{
//判断输入索引是否合法,包含表为空的情况
if (nIndex < 0 || nIndex > (pArray->nLength-1))
{
return JWARRAY_FALSE;
}
//获得当前索引的值
*pElem = pArray->pElem[nIndex];
return JWARRAY_TRUE;
}
/************************************************************************/
/* 设置指定索引(0~长度-1)的值 */
/************************************************************************/
JWArray_BOOL JWArraySetAt_event(JWArray_event *pArray, const int nIndex, const JWArrayElem_event elem)
{
//判断输入索引是否合法,包含表为空的情况
if (nIndex < 0 || nIndex > (pArray->nLength-1))
{
return JWARRAY_FALSE;
}
//设置当前索引的值
pArray->pElem[nIndex] = elem;
return JWARRAY_TRUE;
}
/************************************************************************/
/* 在指定索引(0~长度)前插入新值,索引==长度时表示在末尾添加新值 */
/************************************************************************/
JWArray_BOOL JWArrayInsert_event(JWArray_event *pArray, const int nIndex, const JWArrayElem_event elem)
{
int i;
JWArrayElem_event *pNewElem;
//判断输入索引是否合法
if (nIndex < 0 || nIndex > pArray->nLength)
{
return JWARRAY_FALSE;
}
//如果表满则重新分配更大的表
if (JWARRAY_TRUE == JWArrayIsFull_event(pArray))
{
pNewElem = (JWArrayElem_event *)realloc(pArray->pElem, (pArray->nTotalSize + pArray->nIncrSize) * sizeof(JWArrayElem_event));
if (NULL == pNewElem)
{
return JWARRAY_FALSE;
}
else
{
pArray->pElem = pNewElem;
pArray->nTotalSize += pArray->nIncrSize;
}
}
//指定位置插入值
for (i = pArray->nLength; i > nIndex; i--)
{
pArray->pElem[i] = pArray->pElem[i-1];
}
pArray->pElem[nIndex] = elem;
pArray->nLength++;
return JWARRAY_TRUE;
}
/************************************************************************/
/* 同样是插入,保证插入后的结果按照pCompare来排列 */
/************************************************************************/
JWArray_BOOL JWArrayOrderInsert_event(JWArray_event *pArray, const JWArrayElem_event elem, JWArray_CompareFunc_event pCompare)
{
int i, nIndex;
JWArrayElem_event *pNewElem;
//找到要插入的位置
nIndex = -1;
for (i = 0; i < pArray->nLength -1; i++)
{
if (JWARRAY_TRUE == pCompare(pArray->pElem[i], elem) &&
JWARRAY_FALSE == pCompare(pArray->pElem[i+1], elem))//注意双边条件的判断
{
nIndex = i;
break;
}
}
if (nIndex == -1 && pArray->nLength >= 1)
{
if (JWARRAY_TRUE == pCompare(pArray->pElem[pArray->nLength -1], elem))//单独考虑最后一个元素的比较
{
nIndex = pArray->nLength -1;
}
}
nIndex++;//找到的索引位置后插入,没有找到满足条件或长度不为0则在第一个位置插入
//如果表满则重新分配更大的表
if (JWARRAY_TRUE == JWArrayIsFull_event(pArray))
{
pNewElem = (JWArrayElem_event *)realloc(pArray->pElem, (pArray->nTotalSize + pArray->nIncrSize) * sizeof(JWArrayElem_event));
if (NULL == pNewElem)
{
return JWARRAY_FALSE;
}
else
{
pArray->pElem = pNewElem;
pArray->nTotalSize += pArray->nIncrSize;
}
}
//指定位置插入值
for (i = pArray->nLength; i > nIndex; i--)
{
pArray->pElem[i] = pArray->pElem[i-1];
}
pArray->pElem[nIndex] = elem;
pArray->nLength++;
return JWARRAY_TRUE;
}
/************************************************************************/
/* 删除指定索引的值(0~长度-1) */
/************************************************************************/
JWArray_BOOL JWArrayDelete_event(JWArray_event *pArray, const int nIndex, JWArrayElem_event *pElem)
{
int i;
//判断输入索引是否合法,包含表为空的情况
if (nIndex < 0 || nIndex > (pArray->nLength-1))
{
return JWARRAY_FALSE;
}
//删除指定位置的值
if (NULL != pElem)
{
*pElem = pArray->pElem[nIndex];
}
for (i = nIndex; i < (pArray->nLength-1); i++)
{
pArray->pElem[i] = pArray->pElem[i+1];
}
pArray->nLength--;
return JWARRAY_TRUE;
}
/************************************************************************/
/* 在线性表中遍历找到满足pCompare函数的索引返回索引号,没找到则返回-1 */
/************************************************************************/
int JWArrayLocate_event(JWArray_event *pArray, const JWArrayElem_event elem, JWArray_CompareFunc_event pCompare)
{
int i;
for (i = 0; i < pArray->nLength; i++)
{
if (JWARRAY_TRUE == pCompare(pArray->pElem[i], elem))//找到满足要求的索引项
{
return i;
}
}
return -1;
}
/************************************************************************/
/* 在线性表中遍历对每个遍历到的元素调用pTraverse函数 */
/************************************************************************/
void JWArrayTraverse_event(JWArray_event *pArray, JWArray_TraverseFunc_event pTraverse)
{
int i;
for (i = 0; i < pArray->nLength; i++)
{
pTraverse(&(pArray->pElem[i]));
}
}
/************************************************************************/
/* 定义单个元素的输出,对不同的JWArrayElem_event输出要更改该参数,主要用于调试 */
/************************************************************************/
JWArray_BOOL JWArrayPrintfElem_event(JWArrayElem_event *pElem)
{
printf("%d-%d\t", pElem->nOccurTime, pElem->nType);
return JWARRAY_TRUE;
}
/************************************************************************/
/* 输出当前线性表的详情,主要用于调试 */
/************************************************************************/
void JWArrayDump_event(JWArray_event *pArray)
{
i
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
VS2008_C_事件驱动编程.zip (11个子文件)
VS2008_C_事件驱动编程
EventDrive
JWArray.h 2KB
EventDrive.vcproj 4KB
EventDrive.vcproj.WWW-54DE972B255.wenzhou.user 1KB
Main.c 6KB
JWArray_event.h 3KB
JWArray_event.c 13KB
JWArray_window.h 3KB
JWArray_window.c 12KB
JWArray_base.h 168B
事件驱动编程.sln 896B
事件驱动编程.suo 19KB
共 11 条
- 1
资源评论
文大侠666
- 粉丝: 1200
- 资源: 109
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功