练习期末考试题,"Data Structures"课

Practice final exam questions, "Data Structures" class

本文关键字:Data Structures 考试 练习      更新时间:2023-10-16

我正在为数据结构课做我的练习期末考试,我有几个问题希望得到帮助:

  1.  

    void BST::traverse(Vertex *V)  // post order traversal recursively
    {   
      if (V != NULL) 
        {
          traverse(V->Left);        
          traverse(V->Right);       
          cout << V->elem << endl;     
        }
    }
    

    我需要将其更改为深度优先搜索。 我相信我必须在每次递归时重新访问根才能这样做,但我很困惑,因为那样我永远不会离开根。 也许是暂时的根? 不确定!

  2. 对于我们的链表实现,我必须描述使用复制构造函数的 2 种情况。 我知道它是为函数调用而调用的。 但另一个原因是什么?

  3. 为什么我们使用大 O 表示法 [例如 O(n^2( 而不是说 2n^2 + 3n + 4(。 我知道我们在这样做时会忽略常量,但是我能给出的答案还有更多吗?

  4. 时间与空间的复杂性。 对我来说最明显的是合并排序与快速排序,但是如果测试要求更多,您能想到另一个吗? 我们在课堂上讲了这么多,我不敢相信我不能说出更多。

  1. 如果您只是向其添加搜索代码,它已经是深度优先搜索。

  2. 您已经有将BST作为参数按值传递给函数的情况。您再次复制对象的时间是什么时候?(提示:一个也与功能有关(

  3. 因为当n很大时,2n 将比等式中的其他任何东西大得多,所以你只需省略常量和其他所有内容。Big-O 表示法绝对不是为了精确,它只是让你知道随着输入变得非常大,问题的解决方案是如何扩展的。当n变得足够大时,复杂性是如此之大,以至于其他东西相形见绌,基本上是 2n

  4. 你必须更具体地说明这一点。您是否正在寻找两种以速度换取空间的算法?

3 个大 O 表示法只引用主导项。当 n 变大时,这是结果中最重要的部分。

4 考虑气泡排序 - 我曾经不喜欢它,因为它需要很长时间,但只需要空间来容纳更多的项目。