gpt4 book ai didi

c++ - 链表入队和出队

转载 作者:行者123 更新时间:2023-11-30 05:37:11 28 4
gpt4 key购买 nike

我在使用 C++ 对链表实现的队列进行入队和出队时遇到了一些麻烦。我的老师说模板是禁止使用的,我无法更改他给我们的公共(public)和私有(private)功能。我不断收到段错误。我真的不明白我做错了什么。我还包含了 header 以及入队和出队函数。

标题

const int MAX_STRING = 6;

typedef char Element300[MAX_STRING + 1];

class Queue300
{

public:
Queue300();
Queue300(Queue300&);
~Queue300();
void enQueue300(const Element300);
void deQueue300(Element300);
void view300();

private:
struct Node300;
typedef Node300 * NodePtr300;
struct Node300
{
Element300 element;
NodePtr300 next;
};
NodePtr300 front, rear;
};

排队

void Queue300::enQueue300(const Element300 input)


{
NodePtr300 temp = NULL;

temp = new (std::nothrow) Node300;

if (temp == NULL)
{
cerr << "The queue is full, could not add(enqueue) any more elements." << endl;
}

else if (front == NULL && rear == NULL)
{
strcpy(temp->element, input);
rear = temp;
rear->next = NULL;
front = rear;
temp = NULL;
}

else
{
strcpy(temp->element, input);
temp = rear->next;
rear = temp;
rear->next = NULL;
temp = NULL;
}
}

出队

void Queue300::deQueue300(Element300 input)



{
NodePtr300 temp = NULL;

if (rear == NULL && front == NULL)
{
cerr << "The queue is already empty, could not delete(dequeue) any more elements." << endl;
}

else if (front == rear)
{
strcpy(temp->element, input);
temp = front;
delete temp;
temp = NULL;
front = NULL;
rear = NULL;
}

else
{
strcpy(temp->element, input);
temp = front;
front = front->next;
temp->next = NULL;
delete temp;
temp = NULL;
}
}

最佳答案

在入队中,当你说“temp = rear->next”时,你覆盖了指向你在临时中的新节点的指针。

在向链表中添加新节点时,通常最好先在新节点中设置指针:

temp->next = null;
rear->next = temp;
rear=temp;

还有:

  • 报错后,必须返回。如果你继续下去,你会崩溃的。最好抛出异常或者返回错误码

  • dequeue中的strcpys走错了路

  • 为了防止缓冲区溢出,您应该真正使用 strncpy 而不是 strcpy,然后确保目标以 null 终止,因为 Element 应该是一个字符串

关于c++ - 链表入队和出队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33337879/

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