【问题标题】:Why Queue Give me 0 in last display function为什么队列在最后一个显示功能中给我 0
【发布时间】:2022-01-02 17:41:17
【问题描述】:
#include <iostream>
#define size 100
using namespace std;
class Q
{
private:
    int item[size];
    int front, rear;

public:
    Q()
    {
        front = -1;
        rear = -1;
    }
    bool is_empty();
    bool is_full();
    void enque(int num);
    void deque();
    void display();
};
bool Q::is_full()
{
    return rear == size - 1;
}
void Q::enque(int num)
{
    if (is_full())
        cout << "Sorry Enque Is Full !!" << endl;
    if (front == -1)
        front = 0;
    rear++;
    item[rear] = num;
}
bool Q::is_empty()
{
    return front == -1;
}
void Q::deque()
{
    if (is_empty())
    {
        cout << "Q is Empty You Can't Deque From it" << endl;
        exit(0);
    }
    if (front == rear)
    {
        front = -1;
        rear = -1;
    }
    else
        front++;
}
void Q::display()
{
    for (int i = front; i <= rear; i++)
    {
        cout << item[i] << "\t";
    }
    cout << endl;
}
int main()
{
    Q q;
    q.enque(1);  // front=0; //rear=0
    q.enque(2);  // front=0  //rear=1
    q.display(); // display fron 0 to 1
    q.deque();
    q.deque();

    q.display();

    return 0;
}

当我尝试将我的代码与另一个代码进行比较时,我的代码在第二个显示中给出 0,但其他代码给我 -1,如果队列为空,他要求我打印 -1 那么为什么当队列为空时它给我 0如果有人帮我解决这个问题我会很感激 输出 -1 的第二个代码 #包括

#define size 100
using namespace std;
class Queue
{
private:
    int front, rear;
    int items[size];

public:
    Queue();
    bool isempty();
    bool isfull();
    void enqueue(int x);
    int dequeue();
    void dispaly();
};
Queue::Queue()
{
    rear = -1;
    front = -1;
}
bool Queue::isempty()
{
    if (front > rear || front == -1)
        return true;
    return false;
}
bool Queue::isfull()
{
    if (rear == size - 1)
        return true;
    return false;
}
void Queue::enqueue(int x)
{
    if (isfull())
    {
        cout << "Queue is overflow\n";
        return;
    }
    if (front == -1)
    {
        front = 0;
    }
    rear++;
    items[rear] = x;
}
int Queue::dequeue()
{
    if (isempty())
    {
        cout << "Queue is underflow\n";
        exit(0);
    }
    int x = items[front];
    if (rear == front)
    {
        front = -1;
        rear = -1;
    }
    else
        front++;
    return x;
}
void Queue::dispaly()
{
    cout << "Elements in queue : ";
    for (int i = front; i <= rear; i++)
    {
        cout << items[i] << "\t";
    }
    cout << endl;
}
int main()
{
    Queue Q;
    Q.enqueue(1);
    Q.enqueue(2);
    Q.dispaly();
    Q.dequeue();
    Q.dequeue();
    Q.dispaly();
    return 0;
}

【问题讨论】:

  • 使用调试器逐行执行代码时,您观察到了什么?任何意外的变量变化?
  • 我试试这个,但还没有找到错误@πάνταῥεῖ
  • display 函数中考虑循环条件i &lt;= rear...当front == rear 时循环将迭代多少次(当front == -1rear == -1 都为真时) ?如果队列is_empty(),也许你根本不应该循环?
  • 你从不检查它是否为空,你无条件打印item[-1],它具有未定义的行为。
  • 打印item[-1] 与打印-1 不同(并且比打印差很多)。

标签: c++ data-structures


【解决方案1】:

我们应该检查Q是否包含元素,然后开始打印。

void Queue::display()
{
    if (is_empty())
    {
        cout << "Q is Empty You Can't Deque From it" << endl;
        return;
    }
    cout << "Elements in queue : ";
    for (int i = front; i <= rear; i++)
    {
        cout << items[i] << "\t";
    }
    cout << endl;
}

【讨论】:

    【解决方案2】:

    您应该在运行循环以显示队列之前检查空大小写, 因为目前您正在为前后的 -1 值运行循环。

     void Queue::dispaly()
        {   if(isEmpty()){
    return;
    }
            cout << "Elements in queue : ";
            for (int i = front; i <= rear; i++)
            {
                cout << items[i] << "\t";
            }
            cout << endl;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 2017-04-04
      • 2022-08-16
      • 2021-09-30
      • 2021-05-18
      • 1970-01-01
      相关资源
      最近更新 更多