1

私はプライオリティ キューのような並べ替えられたキューに取り組んでいます。私はすでにリストでそれを行いましたが、すでにうまく機能しています。今、私は配列でそれをしたいと思います。しかし、新しい要素を追加してソートされた配列に挿入するという論理的な問題が少しあります。

最終的な出力は次のようになります:
優先度: 5 値: x
優先度: 4 値: iso
.... (など)
したがって、優先度が最も高い要素はインデックス = 0
にある必要があります。わかりません (はい、それを切り替えるのは本当に単純なことだと知っていますが、私はそれを行うことができません:/)それを行う方法...

私はすでにいくつかのことを試しましたが、私は立ち往生しています... :/誰か助けてもらえますか?

これが私のコードです:

public class Queue {

private QueueElem[] a;

public Queue(int capacity) 
{
    QueueElem[] tempQueue = new QueueElem[capacity];
    a= tempQueue;
}

public void enqueue(int p, String v) 
{
    QueueElem neu = new QueueElem(p,v);
    int i=0;

        while(i<a.length) 
        {
            if (a[i] == null) 
            {
                a[i] = neu;
                break;
            }   
            i++;
        }
}

public void writeQueue()
{
    int i=0;
    while((i< a.length) && (a[i] != null))
    {
        System.out.println("Priority: " + a[i].priority + " Value: " + a[i].value);
        i++;
    }
}

public static void main(String args[])
{
    Queue neu = new Queue(10);
    neu.enqueue(4,"iso");
    neu.enqueue(2,"abc");
    neu.enqueue(5,"x");
    neu.enqueue(1,"abc");
    neu.enqueue(4,"bap");
    neu.enqueue(2,"xvf");
    neu.enqueue(4,"buep");  
}
 }//end class Queue


class QueueElem {
int priority;
String value = new String();

public QueueElem(){ }

public QueueElem(int p, String v)
{
    this.priority = p;
    this.value = v;
}

public int getPrio()
{
    return this.priority;
}

public String getValue()
{
    return this.value;
}   
}
4

2 に答える 2

0

なぜ誰かが生の配列で作業したいのかわかりません...特にリストで実装した今では。

生の配列に要素を挿入する方法を知りたい場合は、ArrayList のコードを調べてください。その下で生の配列が使用されているからです。すべての要素を挿入ポイントの右側に移動する必要があります。これは、ループでコピーするか、System.arraycopy() を使用して行うことができます。しかし、最も厄介な部分は、要素を追加すると配列のサイズが 1 増加するため、新しい配列を作成する必要がある可能性が高いことです (データとまったく同じサイズの配列を使用しているか、より大きな配列を使用しているかによって異なります)。 ArrayList で行われるように)。

于 2013-05-16T20:04:48.680 に答える