Data structures 如果Squeak不是脚本语言,那么树数据结构在哪里?
由于Squeak是一个开源环境,我们可以看到数据结构的实现,如Data structures 如果Squeak不是脚本语言,那么树数据结构在哪里?,data-structures,smalltalk,squeak,Data Structures,Smalltalk,Squeak,由于Squeak是一个开源环境,我们可以看到数据结构的实现,如OrderedCollection>>addFirst: addFirst: newObject "Add newObject to the beginning of the receiver. Answer newObject." firstIndex = 1 ifTrue: [self makeRoomAtFirst]. firstIndex := firstIndex - 1. array at: firstIndex pu
OrderedCollection>>addFirst
:
addFirst: newObject
"Add newObject to the beginning of the receiver. Answer newObject."
firstIndex = 1 ifTrue: [self makeRoomAtFirst].
firstIndex := firstIndex - 1.
array at: firstIndex put: newObject.
^ newObject
removeFirst: n
"Remove first n object into an array"
| list |
list := Array new: n.
1 to: n do: [:i |
list at: i put: self removeFirst].
^ list
和OrderedCollection>>首先移除:
addFirst: newObject
"Add newObject to the beginning of the receiver. Answer newObject."
firstIndex = 1 ifTrue: [self makeRoomAtFirst].
firstIndex := firstIndex - 1.
array at: firstIndex put: newObject.
^ newObject
removeFirst: n
"Remove first n object into an array"
| list |
list := Array new: n.
1 to: n do: [:i |
list at: i put: self removeFirst].
^ list
然后我可以操作堆栈数据结构,对吗
我被告知Smalltalk没有指针结构;虽然像Java这样的语言也没有指针结构,而不是作为脚本语言,但它应该实现一些基本的数据结构,如树、图(由引用),然后提出进一步的问题:
Smalltalk如何实现树数据结构?Smalltalk到处都有指针,就像Java一样。您不能像增量指针那样执行类似C的操作,但是myVar:=OrderedCollection new
意味着myVar
是指向空OrderedCollection
的指针
是的,您可以使用OrderedCollection模拟堆栈,方法是使用addFirst:
推送元素,使用removeFirst:
和removeFirst
弹出元素。(类似地,您可以通过使用addFirst:
推送元素并使用removeLast
删除它们来模拟队列
你可以像在任何语言中一样在Smalltalk中实现树。例如,我编写了一个用于玩弄的类。看看类ZTree
,它实现了一个非常通用的树结构-一个节点可以有任意数量的子节点。Smalltalk到处都有指针,就像Java一样。你不能像incr这样做类似于C的事情元素指针,但myVar:=OrderedCollection new
表示myVar
是指向空OrderedCollection
的指针
是的,您可以使用OrderedCollection模拟堆栈,方法是使用addFirst:
推送元素,使用removeFirst:
和removeFirst
弹出元素。(类似地,您可以通过使用addFirst:
推送元素,并使用removeLast
删除它们来模拟队列。)
你可以像在任何语言中一样在Smalltalk中实现树。例如,我编写了一个用于玩弄的。看看类ZTree
,它实现了一个非常通用的树结构-一个节点可以有任意数量的子节点。我试图提高你问题的英语水平。如果我改变了你的意思,请纠正我。我不明白你为什么要把脚本语言和树数据结构联系起来。顺便说一句“脚本语言”是一种非表达式的IMHO。像perl、Tcl这样的脚本语言代表了一些胶水,比如unix中的pipe,但它们不适合在算法领域使用,然而,small talk作为一种OO语言,它应该实现算法、数据结构等。这是观点,frind:)我试图提高你问题的英语水平。如果我改变了你的意思,请纠正我。我不明白你为什么要把脚本语言和树数据结构联系起来。顺便说一句“脚本语言”是一种非表达式的IMHO。像perl、Tcl这样的脚本语言代表了一些胶水,比如unix中的pipe,但它们不适合在算法领域使用,然而,small talk作为一种OO语言,它应该实现算法、数据结构等。这是opionion,frind:)“指针算法”是Smalltalk和Java“缺失”的术语。“缺失”在这里的意思是“在这种语言中没有意义”,而不是“天哪,我们忘记了”。我看过你的ZTree代码,听起来不错:)谢谢你的回答,我想知道Smalltalk是一种无类型语言,现代计算机语言除了脚本语言之外都有类型,可能是无类型的,这是SMALLATE不能像java、C++等一样流行的原因之一。它不是一种无类型语言。变量没有类型,但值是强类型的(在某种意义上,您可能不会破坏类型系统)。例如,“指针算术”是Smalltalk和Java“缺失”的术语。“缺失”在这里的意思是“在这种语言中没有意义”,而不是“天哪,我们忘记了”。我看过你的ZTree代码,听起来不错:)谢谢你的回答,我想知道Smalltalk是一种无类型语言,除了脚本语言之外,现代计算机语言有类型,可能是无类型的,这是SMALLATE不能像java、C++等一样流行的原因之一。变量没有类型,但值是强类型的(在某种意义上,您可能不会破坏类型系统)。例如,见。