phi*_*urn 13 lisp scheme circular-list
我注意到Scheme和Lisp(我猜)支持循环列表,我在C/C++中使用循环列表来"简化"元素的插入和删除,但它们有什么用呢?
Scheme确保它们可以构建和处理,但是为了什么?
是否存在需要为圆形或尾部圆形的"杀手级"数据结构?
说它支持'循环列表'有点多.您可以在Lisp中构建各种循环数据结构.就像许多编程语言一样.关于Lisp在这方面没有太多特别之处.采用典型的"算法和数据结构"一书并实现任何循环数据结构:图形,环,......一些Lisps提供的是可以打印和读取循环数据结构.对此的支持是因为在典型的Lisp编程领域中,循环数据结构很常见:解析器,关系表达式,单词网络,计划,......
数据结构包含循环是很常见的.真正的"循环列表"并不经常使用.例如,考虑运行任务的任务调度程序,并在一段时间后切换到下一个任务.任务列表可以是循环的,以便在"最后"任务之后,调度程序执行"第一个"任务.实际上没有'last'和'first' - 它只是一个循环的任务列表,而调度程序运行它们没有结束.您还可以在窗口系统中拥有一个窗口列表,并使用一些键命令切换到下一个窗口.窗口列表可以是循环的.
当您需要廉价的下一步操作并且数据结构的大小事先未知时,列表非常有用.您始终可以将另一个节点添加到列表中,或从列表中删除节点.列表的通常实现使得获得下一个节点并且便宜地添加/移除项目.从数组中获取下一个元素也相对简单(增加索引,在最后一个索引转到第一个索引),但添加/删除元素通常需要更昂贵的移位操作.
此外,由于很容易构建循环数据结构,因此在交互式编程期间可能会这样做.如果然后使用内置例程打印循环数据结构,那么打印机是否可以处理它是个好主意,否则它可能永远打印循环列表...