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

求大神帮写个题...

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

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原理,认真回答题了,给个辛苦分吧~

#include
const int ARRAY_GROWUP = 10;
using namespace std;

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

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;

}

bool Array_AddElement(ArrayStruct *pArray,const int iAppendElement)
{
if(pArray->iCurMaxElementCount==pArray->iCurElementCount){
pArray->iCurMaxElementCount = pArray->iCurMaxElementCount + ARRAY_GROWUP;
}
pArray->iCurElementCount++;
*(pArray->pHead + (pArray->iCurElementCount - 1)) = iAppendElement;
return true;
}

bool Array_RemoveElementAt(ArrayStruct *pArray,const int iRemovedIndex)
{
if(pArray->iCurElementCount==0 || pArray->iCurElementCount<=iRemovedIndex){
std::cout << "没有元素删除" << endl;
return false;
}
for(int i=iRemovedIndex;iiCurElementCount;i++){
*(pArray->pHead + i) = *(pArray->pHead + i + 1);
}
pArray->iCurElementCount--;
return true;
}

bool Array_GetElement(const ArrayStruct *pArray,const int iIndex,int & iReturn)
{
if(iIndex= pArray->iCurElementCount){
std::cout << "数组下标越界" << endl;
return false;
}
iReturn = *(pArray->pHead + iIndex);
return true;
}

void Array_Release(ArrayStruct *pArray)
{
pArray->iCurElementCount = 0;
pArray->iCurMaxElementCount = 0;
pArray->pHead = nullptr;
delete pArray;
}

int main(int argc, const char * argv[]) {
// insert code here...
ArrayStruct *array = Array_Init(10);
for(int i=0;iiCurMaxElementCount;i++){
Array_AddElement(array, i);
}
Array_RemoveElementAt(array, 3);
for(int i=0;iiCurElementCount;i++){
int x;
bool b = Array_GetElement(array, i, x);
if(b){
std::cout << x << endl;
}
}
Array_Release(array);
cout << array->iCurMaxElementCount << endl;
//避免野指针
array = nullptr;
return 0;
}
有很多工作还没做,比如内存管理,以及代码的健壮性较弱等,实在没空就简单写写,运行过了,基本正常,有什么问题说一声我在改

a15630176380
a15630176380 谢了
大约 3 年之前 回复
qq_34658785
卖太妃糖的古尔丹 回复小乌龟在大乌龟背上: 好像是哦,忘记了,我现在是iOS开发,已经很久不用C++了
大约 3 年之前 回复
what951006
小乌龟在大乌龟背上 回复卖太妃糖的古尔丹: 要传指针的指针才有意义~
大约 3 年之前 回复
qq_34658785
卖太妃糖的古尔丹 回复a15630176380: 对啊,Array_Release是删除数组的函数,不是你让写的吗,你自己看你提的问题
大约 3 年之前 回复
qq_34658785
卖太妃糖的古尔丹 回复a15630176380: 没置0啊,赋值为0那个是删除数组函数里的啊
大约 3 年之前 回复
qq_34658785
卖太妃糖的古尔丹 没置0啊,赋值为0那个是删除数组函数里的啊
大约 3 年之前 回复
a15630176380
a15630176380 就那个Array_Release函数里边
大约 3 年之前 回复
a15630176380
a15630176380 最后一个返回指定索引元素那为啥给它们置0呢
大约 3 年之前 回复

看的好晕呀,可以直接拍照上来吗?感觉是要实现链表数据结构

a15630176380
a15630176380 就是实现三个 上面功能的小函数
大约 3 年之前 回复

不知道你着不着急,要是不着急,今天晚上8点之前又没人回答的话,我给你写一下,现在上班,没空写

qq_34658785
卖太妃糖的古尔丹 回复a15630176380: 写完了自己看看吧,有问题的话说一声
大约 3 年之前 回复
a15630176380
a15630176380 回复卖太妃糖的古尔丹: = = 是C++的 最好能四点前写
大约 3 年之前 回复
qq_34658785
卖太妃糖的古尔丹 另外你这个应该是C++的吧
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问