gpt4 book ai didi

c++ - 使用推送时队列程序中的段错误

转载 作者:行者123 更新时间:2023-11-30 02:40:00 26 4
gpt4 key购买 nike

当我尝试将元素插入队列时出现段错误,我不是使用队列的专家,所以我不知道问题出在哪里。我一直在寻找这个问题的解决方案,即使人们遇到类似的问题,我也没有帮助我解决我的问题。这是代码:

(我在 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;
}

最佳答案

你必须知道,当你添加一个新的节点到您构建的列表,您需要分配一个动态新节点的位置,然后将其添加到列表-queue-;

第二件事:当背面已经指向链接中的某个节点时您需要在背面指向的节点处创建新节点,然后使后向指针指向新节点。

新功能 (pushBack) 结果:

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

关于c++ - 使用推送时队列程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29313728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com