返回C++和时间复杂度的线性列表

Returning a Linear List in C++ and Time Complexity

本文关键字:线性 列表 时间复杂度 C++ 返回      更新时间:2023-10-16

我目前正在为数据结构考试做准备,遇到了一个我可以澄清的问题。我应该创建一个函数 InsertZero(int k, int i),它在元素 i 之后插入 k 个零,每次检查索引并抛出适当的异常。

我已经这样做了,但我坚持如何返回一个线性列表,函数定义要求我在类中这样做。我已经尝试了返回 *元素、返回 &元素和其他一些无济于事。我哪里出错了?

此外,我应该将函数的时间复杂度作为"列表长度和 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)
}

我想element数组是LinearList类的数据成员。 element是基本的C++类型(整数数组),而LinearList是派生的。我会在你的方法结束时做return *this

返回类型看起来与类的类型相同。所以你应该返回*this.看来elment应该是一个成员变量,不需要返回它。