Data structures 如果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

由于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 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++等一样流行的原因之一。变量没有类型,但值是强类型的(在某种意义上,您可能不会破坏类型系统)。例如,见。