到目前为止,我的代码是...

struct stack_struct
{
    int number;
    struct stack_struct *next_number;
};

stack_struct *mainStruct;

class stack_class
{
private:

    struct stack_struct *head;

public:
    stack_class();
    ~stack_class();
    void pushNumber(int number);
    void popNumber();
    void findNumber();
    void clearStack();
    void sizeFinder();
    void printStack();
    void reverseStack();//Extra Credit
};
stack_class mainClassStack;

stack_struct *pointerFunc,*tailPointer=NULL,*pointerFunc3,*printPointer;

stack_class::stack_class()
{
    head=NULL;
}

stack_class::~stack_class()
{
    clearStack();
    cout<<"\nList Cleared.\n";
    system("pause");
}


void stack_class::popNumber()
{
    stack_struct *pointerPop=NULL,*pointerPop2=NULL;
    int popCounter=0,i=0;
    pointerPop2=tailPointer;
    if(head==NULL)
    {
        cout<<"\nNo Member to Delete.\n";
    }
    else
    {
        while(pointerPop2)
        {
            popCounter++;
            //cout<<pointerFunc3->number<<endl;
            pointerPop2=pointerPop2->next_number;
        }
        pointerPop=tailPointer;
        while(i<(popCounter-2))
        {
            pointerPop=pointerPop->next_number;
            i++;
        }
        pointerPop->next_number=NULL;
        delete head;
        head=pointerPop;
    }

}

void stack_class::printStack()
{
    pointerFunc3=tailPointer;
    if(tailPointer==NULL)
    {
        cout<<"\nNo Members in List.\n";
    }
    else
    {
        cout<<"\n\nList Is:\n";
        while(pointerFunc3)
        {
            cout<<pointerFunc3->number<<endl;
            pointerFunc3=pointerFunc3->next_number;
        }
    }

}


只要不是最后一个数字,弹出就可以正常工作。如果弹出最后一个数字(列表为空),而我尝试打印该列表,则程序将无限打印垃圾信息。如果在列表为空后尝试弹出一个数字,程序将冻结。我该如何解决?

最佳答案

您也可以始终创建一个虚拟节点来解决此问题。除此以外:

ojit_pre

!!!!!尝试不要使用诸如(stack_class mainClassStack;

stack_struct * pointerFunc,* tailPointer = NULL,)

关于c++ - 在C++中从堆栈弹出一个数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15714867/

10-11 22:30
查看更多