Если 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 put: newObject.
^ newObject

а также OrderedCollection>>removeFirst:

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, также не имеют структуры указателей. Не как язык сценариев, он должен реализовать некоторую фундаментальную структуру данных, такую ​​как дерево, диаграмма (см. Сценарии: программирование на более высоком уровне для 21-го века), а затем поднять еще один вопрос:

Как Smalltalk реализует древовидную структуру данных?

1 ответ

Решение

В Smalltalk есть указатели повсюду, как и в Java. Вы не можете делать C-подобные вещи, такие как указатели приращения, но myVar := OrderedCollection new Значит это myVar указатель, указывающий на пустой OrderedCollection,

Да, вы можете смоделировать стек, используя OrderedCollection, используя addFirst: толкать элементы и removeFirst: а также removeFirst поп элементы. (Точно так же вы можете имитировать очередь, нажимая элементы с addFirst: и удаляя их removeLast,

Вы можете реализовать деревья в Smalltalk так же, как на любом языке. Например, я написал очень простую реализацию дерева для игры на молнии. Посмотрите на класс ZTree, который реализует очень общую древовидную структуру - узел может иметь любое количество дочерних элементов.

Другие вопросы по тегам