求大神帮写个题...
//==========下面是代码,完成相应函数==========
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(/* 请在这里填上参数 */)
{
开刀
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原理,认真回答题了,给个辛苦分吧~
看的好晕呀,可以直接拍照上来吗?感觉是要实现链表数据结构
不知道你着不着急,要是不着急,今天晚上8点之前又没人回答的话,我给你写一下,现在上班,没空写
#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;
}
有很多工作还没做,比如内存管理,以及代码的健壮性较弱等,实在没空就简单写写,运行过了,基本正常,有什么问题说一声我在改