0

データ ファイルからキュー クラスを作成する必要があります。これは基本的に、最初の列に文字があり、2 番目の列に対応する数字がある 2 列の .dat ファイルです。このプログラムには、高優先度と低優先度の 2 つのキューがあります。

* アスタリスクと関連する数字は、ハイ キューとロー キューからの削除を交互に繰り返しながら、キューからそれらを削除する回数を示します。

問題なくキューにデータを入力できます (優先度が高くなるだけです)。ただし、キューから文字を削除すると、アクセスできないはずのキューから文字が削除されます。

main.cpp のスニペット:

  //This is the main.cpp where characters are sent into the queue.

    if (number1 == 1 && character != '*')  //if number is 1, sends to high priority queue
    { 
        myHigh.addToQueue(character);  
    } 

    else if (number1 == 2 || number1 == 3 ||number1 == 4 || number1 == 5 && character != '*') 
    {
        myLow.addToQueue(character);
    }

    for (int i=1; i<=number1; i++) 
    {
        if (character == '*') 
        {      
            myHigh.takeAway();                
            myLow.takeAway();
            number1/=i;
            i=1;
        }         
    }

arrayQueue クラスのスニペット:

//this is in the arrayQueue class, it should remove values from the queue
int arrayQueue::takeAway()
{
    char letter;

    if (empty())
        return -1;
    else 
    {
        letter = queueArray[remove];    
        remove = (remove+1)%maxSize;
        count--;
        size--;
        cout << letter << " has been serviced and removed from the queue" << endl;
        return letter;        
    }
}

これで、myHigh.takeAway(); を使用するだけで問題なく動作します。- 値は正常に削除されます。ただし、myLow.takeAway(); を使用すると、-- myHigh.takeAway() がなくても、優先度の高いキューにのみあるはずの値が削除されます。

myLow.takeAway() のみを実行している出力の一部を以下に示します。W は優先度の高いキューにありますが、myLow.takeAway() を実行すると削除されますか?

//OUTPUT
R has been added to the queue and is assigned number 1
T has been added to the queue and is assigned number 2
W has been added to the queue and is assigned number 1
A has been added to the queue and is assigned number 3
W has been serviced and removed from the queue
T has been serviced and removed from the queue

何が起こっているのかを誰かに理解してもらうのに十分な情報が含まれていることを願っています。どんな助けでも大歓迎です!

4

0 に答える 0