我正在学习我的数据结构考试并遇到了一个我可以使用澄清的问题。我应该创建一个函数InsertZero(int k,int i),它在元素i之后插入k个零,每次检查索引并抛出适当的异常。
我已经完成了这个,但我仍然坚持如何返回一个LinearList&函数定义要求我在课堂上。我已经尝试了返回*元素,返回和元素,以及其他几个无济于事。我哪里错了?
另外,我应该将函数的时间复杂度作为“列表长度和k的函数”。我分析了整个函数的步骤(参见注释)并提出了O(k)...这不使用列表长度,我对如何这样做感到困惑。
任何帮助将不胜感激。我正在寻找理解,而不仅仅是答案。
template <class T>
LinearList<T>& LinearList<T>::InsertZero(int i, int k)
{
//Complexity statements are in the form of
// "Number of steps" * "Number of times executed" = total
if ( i<0 || i> (MaxSize-1) || k<0) // 3 * 1 = 3
cout<<"Bad input exception thrown"<<endl;// 1 * 1 = 1
else if (k > (MaxSize-i-1) ) // 1 * 1 = 1
cout<<"NoMem exception thrown"<<endl; // 1 * 1 =1
else
{
while (k!=0) // 1 * k = k
{
element[i+1]=0; // 1 * k = k
i++; // 1 * k = k
k--; // 1 * k = k
}
return &element; // 1 * 1 = 1
}
//Total = 3+1+1+1+k+k+k+k+1 = 4k+7 = O(k)
}
答案 0 :(得分:1)
我猜element
数组是LinearList
类的数据成员。 element
是基本的C ++类型(整数数组),而LinearList
是派生的。我会在你的方法结束时做return *this
。
答案 1 :(得分:0)
返回类型看起来与类的类型相同。所以你应该返回*this
。似乎elment
应该是成员变量,并且不需要返回它。