オブジェクトをスタックにプッシュするためのこのコードがあります。前のノード(newNode.next)をtopと等しくする必要がある理由と、topをtopと等しくする理由を誰かが説明できる場合、各行の機能を理解するのに問題があります。 newNode。
void push(AnyClass newbObj)
{
Node newNode = Node(newObj);
newNode.next = top;
top = newNode;
}
これは、リンクリストの実装のように見えます。リンクされたリストでは、各アイテムにリスト内の次のアイテムへのポインター(参照)があります。
変数top
はリストの先頭にあるノードへの参照であるように思われるため、スタックの最上位を表します。
次に、リストが次のようになり始めたと仮定します。
item 1 -> item 2 -> etc...
^----top
最初の行は、パラメーターを正しいタイプにキャストしているだけです。代わりに、代わりにこの行を完全に削除するように定義push()
することもできます。Node
新しいノードを先頭に挿入したいので、最初に、以下を使用して、リストの残りの部分を指していることを確認する必要があります。
newNode.next = top; //Point newNode's 'next' field to the current top of the list
これは私たちにこのようなものを与えます
newNode -> item 1 -> item 2 -> etc...
^----top
しかしtop
、まだ古いアイテムを指しているので、今それを更新します:
top = newNode; //Re-assign top to point to the new head of the list
これで、リストは次のようになります。
newNode -> item 1 -> item 2 -> etc...
^----top
これで完了です。
ステップごとに説明させてください。
- newNodeは、コードを使用して作成された新しいノードです
Node newNode = Node(newObj);
。スタックの一番上に配置したい(つまりプッシュ)- 現在、スタックの一番上に、topと呼ばれる他のノードがあります。
- 現在の最上位ノードを1つ下にプッシュしたい
次のコードで、新しいノードを現在の最上位ノードにリンクします。
newNode.next = top
その後、次のコードで新しいノードをスタックの最上位にします。
top = newNode
編集
4行目を強調する人もいます。
newNode.next = top
newNode
はという名前の変数を持っている ことを意味しますnext
memory address
これは、前のトップノードのを保存します。newNode
そのため、現在のトップノード( )を介して前のトップノードにアクセスする場合は、次の方法で簡単にアクセスできます。
Node prevTopNode = (Node)top.next
コメントを追加しました。お役に立てば幸いです。
void push(AnyClass newbObj)
{
Node newNode = Node(newObj); //create a new node of the stack containing the data (newbObj)
newNode.next = top; //the new node has thw prevois top of the stack the successor
top = newNode; //the new node is now the top of the tsack
}