最好使用一个固定的列表,或者不使用



我是科罗拉多梅萨大学的csci学生。部门负责人教授了一种链接列表的基本方法:

struct nodeType
{
    int id;
    nodeType *link;
};
void createList(nodeType *&head, nodetype *&tail)
{
    head = new nodetype;
    tail = new nodetype;
    head->id=-1; //some initialize value
    head->link=tail;
    tail->link=NULL;
}
void insertList(nodeType *&head, nodeType *&tail)
{
    nodetype *knew,*prior, *next;
    knew = new nodetype;
    knew ->name = name
    prior = head;
    next = head->link;
    while(next != tail && knew->id > next->id)
    {
        prior = next;
        next = next->link;
    }
    prior->link = knew;
    knew->link = next;
}

她教这门课的原因很明显。有了固定的头和尾,可以更容易地从中插入,就像你调用上面的函数一样,然后编写一个函数来附加这两个节点内的所有数据,在编写删除函数时也稍微容易一些,因为你从不删除头或尾,因此更难丢失列表和创建垃圾。

我的算法教授说,在"现实世界"中,无论在哪里我都会遇到列表,一个不接地气的列表会更好。其他语言,使用STL和在互联网上,我找不到实现头和尾的列表函数。

我只想为在实际的现实世界中编程做好准备,而不是我的教授们认为的现实世界,所以我的问题是:使用其中一个更好,使用我觉得更容易的方法更好,还是在处理每个问题时都考虑到两者?

提前感谢你花时间帮助我解决这场争执。

在"真实世界"中,您将使用其他程序员设计、实现、优化和测试的列表,但您永远不知道它是否"接地气",因为这只是一个实现细节。

从你的算法课程中重要的是:

  • 性能特征。链表或向量是否具有更快的随机访问速度?更快的追加?更快地移除第一个元素?使用正确的容器并不是过早的优化。

  • 看到足够多不同的实现样式,这样,如果您必须使用调试器逐步完成代码,您就不会感到非常困惑。如果您看到列表末尾的测试返回true,但下一个节点指针不是NULL,那么如果您以前从未见过"固定"的列表实现,您可能会非常困惑。

相关内容

  • 没有找到相关文章

最新更新