对于一项任务,我的任务是创建一个带有链表的队列。我们的教授为我们提供了测试代码,以确保程序正常运行并进行评分。我的serve函数返回一个字符。但是,在主函数中,该函数在一个cout语句中被调用两次,并且它以错误的顺序返回字符。还调用了getSize函数,但是它似乎没有任何作用。
cout << boolalpha;
Queue q1 = Queue();
q1.append('m');
q1.append('a');
q1.append('b');
q1.append('b');
q1.display();
cout << q1.serve() << " " << q1.serve() << " " << q1.getSize() << endl;
显示输出:m a b b。但是,提示显示为:a m4。这显然应该显示为:m a 2。
如果我分开serve和getSize函数,它就可以正常工作,即cout << q1.serve() << " "; cout << q1.serve() << " "; cout << q1.getSize() << " ";
我也设法使我的教授难免遇到这个问题。下面,我发布了链接队列的代码。我想我在节点指针上犯了一个错误,但是我绘制了图片并重新编写了代码,无济于事。如果我已经格式化错误,我也深感抱歉,因为这是我的第一篇帖子。谢谢。
#include <iostream>
using namespace std;
struct Node {
char data;
Node* next;
};
class Queue {
private:
Node* front, * rear;
int size;
public:
Queue();
void append(char);
char serve();
bool isEmpty();
bool isFull();
int getSize();
void display();
};
Queue::Queue() {
front = rear = nullptr;
size = 0;
}
void Queue::append(char v) {
Node* p = new Node;
p->data = v;
p->next = nullptr;
if (size == 0) {
front = rear = p;
size++;
}
else if (size == 1) {
front->next = p;
rear = p;
size++;
}
else {
rear->next = p;
rear = p;
size++;
}
}
char Queue::serve() {
if (front != nullptr) {
Node* temp = front;
char v = temp->data;
front = front->next;
delete temp;
size--;
return v;
}
}
bool Queue::isEmpty() {
return size == 0;
}
bool Queue::isFull() {
return false;
}
int Queue::getSize() {
return size;
}
void Queue::display() {
Node* runner = front;
while (runner != nullptr) {
cout << runner->data << " ";
runner = runner->next;
}
cout << endl;
}
int main() {
cout << boolalpha;
Queue q1 = Queue();
q1.append('m');
q1.append('a');
q1.append('b');
q1.append('b');
q1.display();
cout << endl << q1.isEmpty() << " " << q1.isFull() << " " << q1.getSize() << endl;
cout << q1.serve() << " " << q1.serve() << " " << q1.getSize() << endl;
q1.display();
cout << endl;
/*cout << q1.isEmpty() << " " << q1.isFull() << " " << q1.getSize() << endl;
char a = q1.serve(); char b = q1.serve();
cout << a << " " << b << " " << q1.getSize() << endl;*/
}
我会给您一个大提示:您的输出是“ a m 4”,而不是“ m a 4”。答案的其余部分在下面...
。
。
。
。
。
。
cout正在从右到左运行参数,因为<<
运算符的关联性。因此,它得到的是大小,then得到队列中的第一项,then得到下一个。所以它是4,然后出列m,然后出列a。
就做
cout << q1.serve() << " ";
cout << q1.serve() << " ";
cout << q1.getSize() << endl;