找到我自己的班级队列的最少



i创建类队列,我需要找到最小值和最大值。最大值是正确的,但最小值不是。我应该更改数字 头和尾巴以获得正确的结果?如果我以零更改它们,则第一个元素既将变为最大和最小值队列

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;
}

构造对象后的tail-1

当您添加第一个元素时,您的方法MyQueue::myEnqueue会执行类似的操作:

data[-1]=el;

您的最后一个元素中总是有垃圾,这可能是负数的大数字。Head为-1也是一个坏主意。

修复:

  1. 您的头和尾巴应为0
  2. 您添加元素的代码应为:

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

最新更新