リンクリスト>
— , , , , ( ) , , .
すべての産業言語に、データ構造としてのリンクリストのサポートが組み込まれているわけではありません。ただし、クラスまたは構造として自分で実装することは難しくありません。関連するアルゴリズムを快適に使用できるように、Hi言語の基本定義にすでに組み込まれている双方向リンクリストを追加します。
まず、実験リストのインスタンスを作成しましょう。
VAR list = <"I", "will", "be">
上記の例では、3つのノードに対して双方向リンクが自動的に作成されます。
Hiのリンクされた空でないリストには、常に現在または「アクティブ」なノードが1つあります。デフォルトでは、これは最後に追加された要素であり、現在は「be」です。これを確認しましょう:
PRINT list.current # "be"
リストにさらに2つの要素を追加しましょう。
list.insert "back", "!" # list : "I", "will", "be", "back", "!"
組み込みのinsertメソッドは、アクティブノードの直後に新しい要素を追加し、新しいリンクを自動的に構築して、最後に追加された要素を最新にします(insertFirstメソッドを使用して最初の新しいリストノードを追加および作成できます)。
削除は、現在の要素に対して同様の方法で実行されます。
list.remove 1 # list : "I", "will", "be", "back"
ただし、一度に複数の要素を削除できます。このため、最初に削除する最初のノードへのポインターを設定する必要があります。
VAR secList = list
secList.prev 2
secList.remove 2 # secList : "I", "back"
この場合、削除されたノードの前の前のノードが現在のノードになります。リストの最初の要素が削除されると、新しい最初の要素が現在の要素になります。
要素に新しい値を割り当てるだけで、現在のノードを別のノードに置き換えることができます。
secList.urrent = "smile" # secList : "smile ", "back"
すべてのノードを削除できます。つまり、次のようにリストを空にすることができます。
secList = <>
次のように最初と最後のノードに移動すると便利です。
list.first
LET last = list.last #
したがって、リストを使用してさまざまな操作を簡単に実行できます。
PRINT list # "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list