a15630176380 2017-08-07 04:32 采纳率: 100%
浏览 1038
已采纳

新手小问题,就把三个简单的函数写出来就好

求大神帮写个题...

//==========下面是代码,完成相应函数==========

const int ARRAY_GROWUP = 10;

//数组结构体定义
struct ArrayStruct
{
int iCurMaxElementCount; //当前数组最大能容纳元素个数
int iCurElementCount; //当前元素数
int * pHead; //指针头部
};

//功能:生成一个数组,参数为最初元素个数
//参数:int iStartElementCount 数组初始化大小
//返回:成功返回指针,否则返回 NULL
ArrayStruct * Array_Init(int iStartElementCount)
{
if (iStartElementCount <= 0 )
return NULL;

ArrayStruct * pReturn;

pReturn = new ArrayStruct;
if (pReturn == NULL)
    return NULL;

pReturn->pHead = new int[iStartElementCount];
if (pReturn->pHead == NULL)
{
    delete pReturn;
    return NULL;
}
pReturn->iCurMaxElementCount = iStartElementCount;
pReturn->iCurElementCount = 0;//表明当前没有元素
return pReturn;

}

// ========== 完成下面的函数

//功能:向数组增加一个元素,如果元素超过上述 Array_Init
// 函数的 iStartElementCount 参数时,请考虑如何适应
// 可以假定一次增大ARRAY_GROWUP个元素容量,但要保证在内存中数据为线性存放
//参数:ArrayStruct *pArray 要处理的数组结构体指针
// const int iAppendElement 要增加的元素
//返回:成功时返回 true ,失败时返加 false
bool Array_AddElement(ArrayStruct *pArray,const int iAppendElement)
{

}

//功能:删除指定索引的元素,要保证元素在内存为线性不间隔存放
//参数:ArrayStruct *pArray 要处理的数组结构体指针
// const int iRemovedIndex 要删除的元素索引
//返回:成功时返回 true ,失败时返加 false
bool Array_RemoveElementAt(ArrayStruct *pArray,const int iRemovedIndex)
{
}

//功能:返回指定索引的元素
//参数:const ArrayStruct *pArray 要处理的数组结构体指针
// const int iIndex 要取的索引值
// int & iReturn 成功时的值
//返回:成功为 true 失败为 false
bool Array_GetElement(const ArrayStruct *pArray,const int iIndex,int & iReturn)
{
}

//功能:删除一个数组
//参数:自已定义
//返回:无(12分)
void Array_Release(/* 请在这里填上参数 */)
{

  • 写回答

4条回答 默认 最新

  • 关注

    开刀

    const int ARRAY_GROWUP = 10;
    //数组结构体定义
    struct ArrayStruct
    {
    int iCurMaxElementCount; //当前数组最大能容纳元素个数
    int iCurElementCount; //当前元素数
    int * pHead; //指针头部
    };
    //功能:生成一个数组,参数为最初元素个数
    //参数:int iStartElementCount 数组初始化大小
    //返回:成功返回指针,否则返回 NULL
    ArrayStruct * Array_Init(int iStartElementCount)
    {
        if (iStartElementCount <= 0 )
            return NULL;
        ArrayStruct * pReturn;
    
        pReturn = new ArrayStruct;
        if (pReturn == NULL)
            return NULL;
    
        pReturn->pHead = new int[iStartElementCount];
        if (pReturn->pHead == NULL)
        {
            delete pReturn;
            return NULL;
        }
        pReturn->iCurMaxElementCount = iStartElementCount;
        pReturn->iCurElementCount = 0;//表明当前没有元素
        return pReturn;
    }
    
    // ========== 完成下面的函数
    //功能:向数组增加一个元素,如果元素超过上述 Array_Init
    // 函数的 iStartElementCount 参数时,请考虑如何适应
    // 可以假定一次增大ARRAY_GROWUP个元素容量,但要保证在内存中数据为线性存放
    //参数:ArrayStruct *pArray 要处理的数组结构体指针
    // const int iAppendElement 要增加的元素
    //返回:成功时返回 true ,失败时返加 false
    bool Array_AddElement(ArrayStruct *pArray,const int iAppendElement)
    {
       if(pArray->iCurElementCount == pArray->iCurMaxElementCount)
       {
           //重新分配
           int *pTempArray;
           pTempArray = new int[pArray->iCurMaxElementCount+ARRAY_GROWUP];
            if(!pTempArray)
                return false;
            //copy到新分配的
           memcpy(pTempArray,pArray->pHead, sizeof(int)*pArray->iCurElementCount);
            //删除以前的
           delete pArray->pHead;
            //重新设置参数
           pArray->pHead= pTempArray;
            pArray->iCurMaxElementCount+=ARRAY_GROWUP;
           *(pArray->pHead+pArray->iCurElementCount)=iAppendElement;
           pArray->iCurElementCount++;
       }
       else
       {
           *(pArray->pHead+pArray->iCurElementCount)=iAppendElement;
           pArray->iCurElementCount++;
       }
        return true;
    }
    //功能:删除指定索引的元素,要保证元素在内存为线性不间隔存放
    //参数:ArrayStruct *pArray 要处理的数组结构体指针
    // const int iRemovedIndex 要删除的元素索引
    //返回:成功时返回 true ,失败时返加 false
    bool Array_RemoveElementAt(ArrayStruct *pArray,const int iRemovedIndex)
    {
        if(pArray->iCurElementCount >iRemovedIndex && iRemovedIndex>=0)
        {
            int nRemain=pArray->iCurElementCount-iRemovedIndex-1;
            memmove(pArray->pHead+iRemovedIndex,pArray->pHead+iRemovedIndex+1,sizeof(int)*nRemain);
            return true;
        }
        return false;
    }
    //功能:返回指定索引的元素
    //参数:const ArrayStruct *pArray 要处理的数组结构体指针
    // const int iIndex 要取的索引值
    // int & iReturn 成功时的值
    //返回:成功为 true 失败为 false
    bool Array_GetElement(const ArrayStruct *pArray,const int iIndex,int & iReturn)
    {
        if(pArray->iCurElementCount >iIndex && iIndex>=0)
        {
            iReturn= *(pArray->pHead+iIndex);
            return true;
        }
    
        iReturn=-1;
        return false;
    }
    //功能:删除一个数组
    //参数:自已定义
    //返回:无(12分)
    void Array_Release(ArrayStruct **pArray)
    {
        delete (*pArray)->pHead;
        delete (*pArray);
        pArray=NULL;
    }
    

    来操刀给你解决~这个主要是vector原理,认真回答题了,给个辛苦分吧~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?