-4

オブジェクトをスタックにプッシュするためのこのコードがあります。前のノード(newNode.next)をtopと等しくする必要がある理由と、topをtopと等しくする理由を誰かが説明できる場合、各行の機能を理解するのに問題があります。 newNode。

void push(AnyClass newbObj)
{
  Node newNode = Node(newObj);
  newNode.next = top;
  top = newNode;
}
4

3 に答える 3

2

これは、リンクリストの実装のように見えます。リンクされたリストでは、各アイテムにリスト内の次のアイテムへのポインター(参照)があります。

変数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

これで完了です。

于 2013-01-26T22:21:18.747 に答える
1

ステップごとに説明させてください。

  1. newNodeは、コードを使用して作成された新しいノードですNode newNode = Node(newObj);。スタックの一番上に配置したい(つまりプッシュ)
  2. 現在、スタックの一番上に、topと呼ばれる他のノードがあります。
  3. 現在の最上位ノードを1つ下にプッシュしたい
  4. 次のコードで、新しいノードを現在の最上位ノードにリンクします。

    newNode.next = top

  5. その後、次のコードで新しいノードをスタックの最上位にします。

    top = newNode

編集

4行目を強調する人もいます。

newNode.next = topnewNodeはという名前の変数を持っている ことを意味しますnext

memory addressこれは、前のトップノードのを保存します。newNodeそのため、現在のトップノード( )を介して前のトップノードにアクセスする場合は、次の方法で簡単にアクセスできます。

Node prevTopNode = (Node)top.next

于 2013-01-26T22:14:59.673 に答える
0

コメントを追加しました。お役に立てば幸いです。

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
}
于 2013-01-26T22:10:28.420 に答える