2017-11-05 2 views
0

少し助けてもらえます。したがって、heapsizeは配列内の要素の数として宣言されます。データは配列です。なぜheapsize ++をやるの? maxSizeは、配列のサイズとして宣言されます。ヒープに要素を追加すると、最後の位置に移動します。なぜheapsizeを最初に増やし、heapsizeが最後の空の位置になるので、単にデータをheapsizeに入れないでください。ありがとう!最大ヒープでの挿入

public void insert(int item) 
{ 
    int position; 
    if (isFull()) throw new Exception(); 
    heapsize++; 
    data[heapsize-1] = item; 
    position = heapsize - 1; 
    while (position>0 && data[(position-1)/2]) 
    { 
     swap(position, (position-1/2)); 
     position = (position-1)/2; 
    } 
} 
+0

は 'IF(データ[(位置1)/ 2] <データ[位置])' – roottraveller

+0

混乱やバギーコードであるべきです。あなたはそれを取り除き、あなた自身でコード化できませんか?あなたが出来たら良かったのに。 –

+0

'heapsize'をインクリメントするとスタイルが変わります。挿入前後で差はありません。より大きな問題は、while文の条件文が壊れていることです。 'position'の項目をその親と比較する必要があります。あなたが書いたものは、あなたが挿入する項目が0でない限り、常にその項目をルートに移動します。 –

答えて

0

maxSizeheapsizeは、アイテムがヒープに挿入されるたびmaxSize。だからに等しい未満であるか、またはすることができ、現在のヒープ内の要素の数のトラックを保持し、一方、ヒープの最大容量でありますheapsizeは、1だけ増加します。

また、あなたは代わりにdata[heapsize-1] = item;

data[heapsize] = item;を記述する必要があり、挿入後heapsizeを増やすことができます。

関連する問題