【问题标题】: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++ 书籍中了解变量范围和构造函数的初始化列表。)
  • 您尝试调试您的程序吗?
  • 等待我刚刚在编译器中看到了一个调试选项,它显示了正确的答案。但也给出了分割错误

标签: c++ struct linked-list


【解决方案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++”编译器中显示错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 2021-04-06
    • 2017-08-15
    • 2013-02-09
    相关资源
    最近更新 更多