以链表形式无限打印堆栈
Posted
技术标签:
【中文标题】以链表形式无限打印堆栈【英文标题】:Infinite printing of stack in linked list form 【发布时间】:2021-10-21 01:17:29 【问题描述】:#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
struct node
int data=0;
node *next=NULL;
;
class linked_stack
node *top; //top is the head here
int size;
public:
linked_stack()
size=0;
node *top=NULL;
void push(int data)
node *newNode=new node;
newNode->data=data;
newNode->next=top;
top=newNode;
size++;
int pop()
if(top==NULL)
cout<<"UNDERFLOW";
return -1;
else
size--;
node *temp=top;
top=top->next;
temp->next=NULL;
int popped=temp->data;
delete(temp);
return popped;
void display()
node *ptr=top;
while(ptr!=NULL)
cout<<ptr->data<<" ";
ptr=ptr->next;
cout<<endl;
;
int main()
linked_stack *stack=new linked_stack();
stack->push(2);
stack->pop();
stack->push(23);
stack->pop();
stack->push(45);
stack->push(36);
stack->push(2);
stack->display();
我刚刚开始学习堆栈,在这段代码中我创建了一个链表形式的堆栈。
上面执行的代码显示输出为 2 36 45 2 36 45 2 36 45 2 。 . . .till infinity 任何人都可以在这里找到错误吗? (请忽略这个括号文本只是试图达到字数限制!)
【问题讨论】:
在构造函数中,你得到了size=0;
是对的,但是为什么你决定在node* top = NULL;
中添加类型呢? (在你最喜欢的 C++ 书籍中了解变量范围和构造函数的初始化列表。)
您尝试调试您的程序吗?
等待我刚刚在编译器中看到了一个调试选项,它显示了正确的答案。但也给出了分割错误
【参考方案1】:
当我在调试器中运行我的原始代码时,它显示一个错误框“程序收到信号 SIGSEGV,分段错误。”但随之而来的是一个输出窗口,其中打印了“2 36 45”。
但代码在“在线 GDB C++ 编译器”上运行良好,但在“DevC++”编译器中显示错误(可能是这里的编译器问题)
【讨论】:
【参考方案2】:我对您的代码进行了一些编辑,分析了一些 边缘案例。它适用于我并打印:2 36 45
class linked_stack
node *top; //top is the head here
int size;
public:
linked_stack()
size=0;
node *top=nullptr;
void push(int data)
node *newNode=new node;
newNode->data=data;
newNode->next=top;
top=newNode;
size++;
int pop()
if(top==nullptr)
cout<<"UNDERFLOW";
return -1;
size--;
if(top->next == nullptr)
top = nullptr;
return -1;
node *temp=top;
top=top->next;
temp->next=NULL;
int popped=temp->data;
delete(temp);
return popped;
void display()
node *ptr=top;
while(ptr!=nullptr)
cout<<ptr->data<<" ";
ptr=ptr->next;
cout<<endl;
;
【讨论】:
对我也有效,开箱即用。 显示错误'nullptr not defined' 等待我刚刚在编译器中看到了一个调试选项,并且它显示了正确的答案。但也给出了分割错误 @AndreaMugnai 当我在调试器中运行我的原始代码时,它显示一个错误框“程序收到信号 SIGSEGV,分段错误”。但随之而来的是一个输出窗口,其中打印了“2 36 45” @AndreaMugnai 我的代码在“在线 GDB C++ 编译器”上运行良好,但在“DevC++”编译器中显示错误以上是关于以链表形式无限打印堆栈的主要内容,如果未能解决你的问题,请参考以下文章