【发布时间】: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 <= rear...当front == rear时循环将迭代多少次(当front == -1和rear == -1都为真时) ?如果队列is_empty(),也许你根本不应该循环? -
你从不检查它是否为空,你无条件打印
item[-1],它具有未定义的行为。 -
打印
item[-1]与打印-1不同(并且比打印差很多)。
标签: c++ data-structures