2017-02-27 83 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

当您添加第一个元素的方法MyQueue::myEnqueue做这样的事情:

data[-1]=el; 

你的最后一个元素总是有它的垃圾是潜在的巨大负数。 Head正在-1也是一个坏主意。

修复:

  1. 你的头部和尾部应该是0
  2. 添加元素的

    你的代码应该是:

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

什么号码,我应该改变头的值并尾巴得到正确的结果?如果我将它们更改为零,则第一个元素将变为最大值和最小值 – choko

+0

@choko使用修补程序编辑 – mpiatek

+0

@choko检查我的最新编辑。该版本在队列正确填满时处理替换元素 – mpiatek

相关问题