如何在面向对象的形式(OOP)中用C++递归打印链表
我只是使用链表在堆栈上创建,但当我使用递归打印元素时,它会在geany中以随机代码退出如何在面向对象的形式(OOP)中用C++递归打印链表,c++,C++,我只是使用链表在堆栈上创建,但当我使用递归打印元素时,它会在geany中以随机代码退出 #include <iostream> using namespace std; class Node { public: int data; Node* next; }; class Stack { public: Node* Top; void stack() { Top = NULL; } void po
#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node* next;
};
class Stack
{
public:
Node* Top;
void stack()
{
Top = NULL;
}
void pop()
{
if(Top == NULL)
{
cout<<"\nstack empty";
}
Top = Top->next;
}
void push(int data)
{
Node* newNode = new Node();
newNode->data = data;
newNode->next = Top;
Top = newNode;
}
bool isEmpty()
{
if(Top == NULL)
{
return true;
}
else
{
return false;
}
}
void print()
{
tem_print(Top);
}
void tem_print(Node* t_top)
{
if(t_top == NULL)
{
return;
}
tem_print(t_top->next);
cout<<t_top->data;
}
};
int main()
{
Stack s;
s.push(1);
s.push(2);
s.print();
return 0;
}
我在里面使用了一个打印函数,我调用了另一个临时打印函数,它用于打印元素,如果我使用迭代方法打印,效果会很好
输出:
冻结3sec
然后打印这个
程序已退出,代码为:-1073741819
按任意键继续 您没有在代码中初始化Top,因此第一次从中读取时,您正在调用未定义的行为。带有UB的程序的结果可能是任何情况,包括冻结一段时间,或带错误代码退出
此功能:
void stack()
{
Top = NULL;
}
看起来很像构造器。如果是这样,您需要写:
Stack()
{
Top = NULL;
}
或者更好:
Stack() : Top(NULL) {}
事实上,如果在类中声明Top时只初始化它,甚至不需要构造函数
此外,在pop函数中,即使Top为NULL,也可以访问next。相反,您需要一个else语句:
void pop()
{
if(Top == NULL)
{
cout<<"\nstack empty";
}
else // needed to avoid UB
Top = Top->next;
}
这是一个例子
此外,您应该避免在代码中使用NULL:改用nullptr。最后,请避免使用命名空间std;,这是一个坏习惯。您没有在代码中初始化Top,因此第一次从中读取时,您正在调用未定义的行为。带有UB的程序的结果可能是任何情况,包括冻结一段时间,或带错误代码退出
此功能:
void stack()
{
Top = NULL;
}
看起来很像构造器。如果是这样,您需要写:
Stack()
{
Top = NULL;
}
或者更好:
Stack() : Top(NULL) {}
事实上,如果在类中声明Top时只初始化它,甚至不需要构造函数
此外,在pop函数中,即使Top为NULL,也可以访问next。相反,您需要一个else语句:
void pop()
{
if(Top == NULL)
{
cout<<"\nstack empty";
}
else // needed to avoid UB
Top = Top->next;
}
这是一个例子
此外,您应该避免在代码中使用NULL:改用nullptr。最后,请避免使用命名空间std;,这是一个坏习惯。您的弹出函数执行Top=Top->next;即使Top==NULL。您的pop函数执行Top=Top->next;即使Top==NULL。请共享输出您的代码中没有任何部分会初始化下一个设置为NULL的节点,因此您的条件永远不会是真的。我还相当确定,您的意思是void stack是构造函数堆栈,而不是headin push function i initialized newNode->next=Top,其中Top为null,因此在添加新节点时,我们会自动将最后一个节点设置为null。在您的代码中,Top从不为null,因为您从未将其设置为soPlease share输出您的代码中没有任何部分会初始化下一个设置为null的节点,所以你的条件永远不可能是真的我也很确定你的意思是void stack是构造函数堆栈,而不是headin push函数我初始化了newNode->next=Top,其中Top为null,所以在添加新节点时,我们会在代码中自动将最后一个节点设置为null,因为您从未将其设置为null,所以将添加return语句。所以它不会执行该行。感谢您的帮助并利用您的时间进行检查:数据将添加return语句。所以它不会执行该行。感谢您的帮助并利用您的时间进行检查:DWY您为什么删除了所有评论..:据我回忆,DI没有删除这些评论:我不记得这些评论是关于什么的,但是如果它们与帖子无关,它们就会被删除。你为什么要删除所有评论据我回忆,DI没有删除这些评论:我不记得这些评论是关于什么的,但如果它们与帖子无关,就会被删除。