0

私はJavaでいくつかのスタックの関数を実装する必要があり、解決するための演習を選択しました。たとえば、順序を壊さずにスタックの最後に新しい要素を挿入します。これどうやってするの?

// stack.java
// demonstrates stacks
// to run this program: C>java StackApp
////////////////////////////////////////////////////////////////
class Stack
{
  private int maxSize; // size of stack array
  private long[] stackArray;
  private int top; // top of stack
//--------------------------------------------------------------
  public Stack(int s) // constructor
 {
    maxSize = s; // set array size
    stackArray = new long[maxSize]; // create array
    top = -1; // no items yet
  }
//--------------------------------------------------------------
   public void makeEmpty( ) {
    top = -1;
    }

   public void push(long j) // put item on top of stack 
   {
     stackArray[++top] = j; // increment top, insert item
    }
//--------------------------------------------------------------
   public long pop() // take item from top of stack
 { return stackArray[top--]; // access item, decrement top
  }
//--------------------------------------------------------------

   public long peek() // peek at top of stack
  { return stackArray[top];
   }
//--------------------------------------------------------------
   public boolean isEmpty() // true if stack is empty
   {return (top == -1);
    }
//--------------------------------------------------------------
   public boolean isFull() // true if stack is full
    {return (top == maxSize-1);
     }
  }
//--------------------------------------------------------------
 // end class StackX
4

1 に答える 1

4

StackJVM ライブラリにはビルド済みのクラスがあります。ただし、独自のスタックを作成するためのレッスンとしてこれを行っている場合は、単一リンク リストを使用してこれを行う簡単な方法があります。

、およびその他のメソッドを表示するクラスと、リンクされたリスト内のノードを表すクラスStackの2 つのクラスが必要になります。void push(Object)Object pop()Node

Stackリストの先頭に 1 つのメンバー変数を保持Stackし、リストの末尾に 1 つのメンバー変数を保持します。ObjectをスタックにプッシュするにはNode、オブジェクトを保持するために new が必要にNodeなるため、 には、プッシュされた を参照するための "data" メンバーObjectと、"next" への "next" 参照が必要になりNodeます。

Nodeプッシュの問題の残りの部分は、新しいを作成し、プッシュされたオブジェクトを参照させ、次のノード メンバーを現在のテールにポイントし、Stackの現在のテール参照を更新することによって、ノード チェーンに要素を追加するだけです。ポッピングは、Stacks テールのによって参照されるオブジェクトを返しNode、「次の」を指すようにテールを更新しNodeます。

考慮すべき特別なケースがありますが、それらは難しくありません。Stack基本的に、エンプティをプッシュするときと、ポップするとエンプティが生成されるときに注意する必要がありますStack

peek()これをすべて行った後、必要に応じてメソッドなどを簡単に追加できます。

于 2012-06-01T14:49:52.720 に答える