当我尝试将元素推入队列时,我遇到了分段错误,我不是一个使用队列的专家,所以我不知道问题出在哪里。 我一直在寻找这个问题的解决方案,即使人们遇到类似的问题我也没有帮助我解决我的问题。 这是代码:
(我在Dev-c ++ 5.9.2中使用了调试选项,它告诉我行“temp-> link = NULL;”导致问题,但我不知道如何修复它)
#include <iostream>
using namespace std;
struct Node {
int data;
Node* link;
};
class Queue {
public:
Queue();
~Queue();
void pushBack(int d);
bool popFront();
bool isEmpty();
void displayQueue();
private:
Node* back;
Node* front;
};
Queue::Queue() {
back = NULL;
front = NULL;
}
Queue::~Queue() {
while (!isEmpty()) {
popFront();
}
}
void Queue::pushBack(int d) {
Node* temp;
if (temp == NULL) {
return;
} else {
temp->link = NULL; <========== This is where is get the error
if (back == NULL) {
back = temp;
front = temp;
} else {
front->link = temp; <===== here too
front = temp;
}
}
}
bool Queue::popFront() {
if (front == NULL) {
return false;
} else {
Node* removeNode;
removeNode = front;
if (back == front) {
back = NULL;
front = NULL;
} else {
Node* previousFront = back;
while (previousFront->link != front) {
previousFront = previousFront->link;
}
front = previousFront;
front->link = NULL;
}
delete removeNode;
return true;
}
}
bool Queue::isEmpty() {
return (back == NULL);
}
void Queue::displayQueue() {
if (isEmpty()) {
cout << "Queue is empty!" << endl;
} else {
Node *current;
current = back;
cout << endl << "-- BACK -- ";
while (current != NULL) {
cout << current->data << " ";
current = current->link;
}
cout << "-- FRONT --" << endl << endl;
}
}
int main(){
Queue q;
q.displayQueue();
q.pushBack(20);
q.pushBack(30);
q.displayQueue();
q.pushBack(40);
q.pushBack(12);
q.displayQueue();
q.popFront();
q.displayQueue();
return 0;
}
答案 0 :(得分:2)
添加新内容时必须知道 节点到您构建的列表,您需要分配一个动态 新节点的位置,然后将其添加到列表-queue - ;
第二件事:当后面指向链接中的某个节点时 你需要在后面指向的节点上创建新节点, 然后使后指针指向新节点。
新功能(pushBack)bacomes:
void Queue::pushBack ( int d ) {
Node* temp = new Node;
temp->data = d;
temp->link = NULL;
if (back == NULL) {
back = temp;
front = temp;
}
else {
temp->link = back;
back = temp;
}
}
答案 1 :(得分:1)
您正在创建指向节点的指针,但尚未创建节点。 (其他人都说过的话)
更改
Node* temp;
- 堆叠内存
要
Node *temp = new Node()
- 堆内存
答案 2 :(得分:0)
我不是一个使用队列的专家所以我不知道问题在哪里
请注意,问题与队列无关:问题在于理解语言的工作原理。
正如Thornkey指出的那样,你的pushBack函数中有temp
var。它是一个指针,但它会指向随机数据,直到你告诉它指向什么。当你按照指针时,它可以去任何地方并获得段错误或打破程序的其他部分。