2016-04-05 17 views
0

私はスタックを構築するために、カーソルを使用したいが、私は本当に全体のカーソルの実装リストのアレイベースの実装(カーソルの実装)

public class cursor { 

    private int header; 
    static cursorNode[ ] cursor; 

    private static final int SPACE_SIZE = 100; 

    static 
    { 
     cursor = new cursorNode[ SPACE_SIZE ]; 
     for(int i = 0; i < SPACE_SIZE; i++) 
      cursor[ i ] = new cursorNode(null, i + 1); 
     cursor[ SPACE_SIZE - 1 ].next = 0; 
    } 
    public static int alloc() 
    { 
     int p = cursor[ 0 ].next; 
     if(p == 0) 
      return 0; 
     cursor[ 0 ].next = cursor[ p ].next; 
     cursor[ p ].next=0; 
     return p; 
    } 

    public static void free(int p) 
    { 

     cursor[ p ].next = cursor[ 0 ].next; 
     cursor[ 0 ].next = p; 
    } 
    public cursor() 
    { 
     header = alloc(); 
     cursor[ header ].next = 0; 
    } 
    public boolean isEmpty() 
    { 
     return cursor[ header ].next == 0; 
    } 
    public void addFirst(int l, Object x){ 
     int temp=alloc(); 
     cursor[temp].element=x; 
     cursor[temp].next=cursor[l].next; 
     cursor[l].next=temp; 
    } 
    public boolean removeFirst(int l){ 
     if(cursor[l].next==0) 
      return false; 
     int p =cursor[l].next; 
     cursor[l].next=cursor[p].next; 
     free(p); 
     return true; 
    } 
    public void print(int l){ 
     int p=cursor[l].next; 
     while(p!=0){ 
      System.out.print(cursor[p].element); 
      p=cursor[p].next; 
     } 
    } 


}. 

public class cursorNode { 
    Object element; 
    int  next; 

     public cursorNode(Object x){ 
      this(x, 0); 
     } 

     public cursorNode(Object x, int n) 
     { 
      element = x; 
      next = n; 
     } 


    } 

を理解していないカーソルの実装とどのように何であるか説明することができますそれを使ってスタックを構築します。 push()はaddFirst()を使用し、pop()はremoveFirst()を使用することを理解していますが、top()の動作はうまくいきます。

+0

私はあなたが何を求めているのか正確には分かりません。あなたが投稿したコードの説明や、 'top'メソッドを実装する方法の提案を探していますか? – sprinter

+0

私は両方を探しています。しかし、このコードを使用するスタックを提供することができれば、これは素晴らしいことです。 – Nicky

答えて

0

まず、投稿したコードの説明があります。これは基本的に、固定サイズのプールに格納されている複数の値のコレクションを管理する方法です。アイテムがコレクションから削除されると、再利用のために空きリストに戻されるように設計されています。それはいろいろな形でよく書かれていませんが、あなたがレビューのコメントを求めていないことを考えれば、私はそれらをスキップします。

第2に、このコードを使用してスタックを実装するにはどうすればよいですか?答え:できません。値を取得するpublicメソッドはありません(peek操作に必要)。removeFirstメソッドは、値を削除するのではなくbooleanを返します。スタックを実装するためにこのコードを変更する必要があります。

+0

getFirst()を実装する方法。 – Nicky

+0

あなたが助けを必要とする場所に関するより良い情報を私に与える必要があります。私がコードを書くように頼んでいるのであれば、私の答えはスタックを実装するためにカーソルクラスを使用しないことです。 – sprinter