我是科罗拉多州梅萨大学的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和互联网,我找不到实现头尾的列表函数。
我只是想为现实世界中的编程做好准备,而不是我的教授认为是真实的世界,所以我的问题是:使用其中一个更好,使用我觉得更容易的,或者考虑到两者都解决每个问题?
提前感谢你帮我解决这个不和的时间。
答案 0 :(得分:0)
在“现实世界”中,您将使用其他程序员设计,实现,优化和测试的列表,您将永远不会知道它是否“扎根”,因为这只是一个实现细节。
从算法课程中删除的重要性是:
性能特征。链接列表或向量是否具有更快的随机访问?更快追加?更快地删除第一个元素?使用正确的容器不是过早优化。
查看足够多的不同实现样式,这样如果您必须使用调试器逐步执行代码,您就不会感到非常困惑。如果您看到列表末端测试返回true,但下一个节点指针不是NULL,那么如果您之前从未见过“基础”列表实现,则可能会感到非常困惑。