最好使用基础列表,还是不?

时间:2012-02-06 20:27:54

标签: c++ list dynamic-variables dynamic-list

我是科罗拉多州梅萨大学的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和互联网,我找不到实现头尾的列表函数。

我只是想为现实世界中的编程做好准备,而不是我的教授认为是真实的世界,所以我的问题是:使用其中一个更好,使用我觉得更容易的,或者考虑到两者都解决每个问题?

提前感谢你帮我解决这个不和的时间。

1 个答案:

答案 0 :(得分:0)

在“现实世界”中,您将使用其他程序员设计,实现,优化和测试的列表,您将永远不会知道它是否“扎根”,因为这只是一个实现细节。

从算法课程中删除的重要性是:

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

  • 查看足够多的不同实现样式,这样如果您必须使用调试器逐步执行代码,您就不会感到非常困惑。如果您看到列表末端测试返回true,但下一个节点指针不是NULL,那么如果您之前从未见过“基础”列表实现,则可能会感到非常困惑。