我是科罗拉多梅萨大学的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,那么如果您以前从未见过"固定"的列表实现,您可能会非常困惑。