2017-02-27 7 views
-1

私はクラスキューを作成し、最小値と最大値を見つける必要があります。最大値は正しいが、最小値はそうではない。正確な結果を得るために何番の値を 頭と尾の値を変更する必要がありますか?私はゼロのためにそれらを変更する場合は、最初の要素となり、両方の最大値と最小 queue自分のクラスキューの最小値を見つける

class myQueue 
{ 
private: 
    int size, head, tail, *data; 
    public: 
    myQueue(int size = 1) : 
      size(size) 
    { 
     data = new int[size]; 
     head = -1; 
     tail = -1; 
    } 

    ~myQueue() // 
    { 
     delete[] data; 
    } 

    void myEnqueue(int el) 
    { 
     data[tail] = el; 
     tail = (tail + 1) % size; 
    } 

    int maxEl() 
    { 
     int *temp = &data[head]; 
     int max = *temp; 
     while (*temp != data[tail]) 
     { 
      temp++; 
      max = (max > *temp) ? max : *temp; 
     } 
     return max; 
    } 

    int minEl() 
    { 
     int *temp = &data[head]; 
     int min = *temp; 
     while (*temp != data[tail]) 
     { 
      temp++; 
      min = (min < *temp) ? min : *temp; 
     } 
     return min; 
    } 
}; 
int main() 
{ 
    myQueue q(5); 
    int n = 0, el; 
    while (n < 5) 
    { 
     cin >> el; 
     q.myEnqueue(el); 
     n++; 
    } 
    cout << "The arithmetic mean of the elements = " << q.srArifm(5) << "\n"; 
    cout << "Maximum queue element = " << q.maxEl() << "\n"; 
    cout << "Minimum queue element =" << q.minEl() << "\n"; 
    system("pause"); 
    return 0; 
} 

答えて

0

オブジェクトが構築された後、あなたのtail-1です。

data[-1]=el; 

あなたの最後の要素は常に潜在的に大きな負の数であることでゴミを持っています

あなたはこのような何かをしMyQueue::myEnqueueあなたの方法の最初の要素を追加します

Headが-1であることも悪い考えです。

修正:

  1. あなたの頭と尾があるべき0
  2. 要素を追加する

    あなたのコードは次のようになります。私は頭の値を変更すべきかの数の

    if (tail == size) 
    { 
        tail = 0; 
    } 
    data[tail++] = el; 
    
+0

正しい結果を得るためには尾が必要ですか?もしそれらを0に変更すると、最初の要素は最大値と最小値の両方になります – choko

+0

@chokoは修正済みで編集されました – mpiatek

+0

@choko最新の編集を確認します。このバージョンでは、キューがいっぱいになったときに要素を置き換えます – mpiatek

関連する問題