链表不能正确打印


    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 popANumber();
        void findNumber();
        void clearStack();
        void sizeFinder();
        void printStack();
    };
    stack_struct *pointerFunc,*pointerFunc2,*pointerFunc3,*printPointer;
    stack_class::stack_class()
    {
        head=NULL;
    }
    void stack_class::pushNumber(int numberFunc)
    {
        if(head==NULL)
        {
            head = new stack_struct;
            head->number = numberFunc;
            head->next_number = NULL;
            pointerFunc2=head;
        }
        else
        {
            pointerFunc = new stack_struct;
            pointerFunc->number=numberFunc;
            pointerFunc->next_number=NULL;
            head->next_number=pointerFunc;
            head=pointerFunc;
        }
    }
    void stack_class::printStack()
    {
                while(pointerFunc2)
                {
                    cout<<pointerFunc2->number<<endl;
                    pointerFunc2=pointerFunc2->next_number;
                }
    }
    int optionChosen;
    int main()
    {
        stack_class mainClassStack;
        do
        {
            cin>>optionChosen;
            switch(optionChosen)
            {
            case 1:
            {
                int pushInt;
                cout<<"nnEnter Number: ";
                cin >> pushInt;
                mainClassStack.pushNumber(pushInt);
                break;
            }
            case 2:
            {
                break;
            }
            case 3:
            {
                break;
            }
            case 4:
            {
                break;
            }
            case 5:
            {
                break;
            }
            case 6://print
            {
                mainClassStack.printStack();
                break;
            }
            default:
            {
                break;
            }
            }
        }while(optionChosen!=7);
        return 0;

我正在尝试使用动态内存(链表)实现数据列表的堆栈类型。但是当我尝试打印列表时,它只打印列表一次,如果我尝试使用选项6再次重印,它就像列表消失了一样。我把代码看了两遍,但还是不知道问题出在哪里。有什么建议吗?

您的代码的问题是,在您打印堆栈之后,您没有将pointerFunc2重置为head

要么正确地重置它,要么在print函数中使用一个局部变量

这是你的函数的更正版本:

void stack_class::printStack()
{
    while (pointerFunc2)
    {
        cout << pointerFunc2->number << endl;
        pointerFunc2 = pointerFunc2->next_number;
    }
    // reset pointerFunc2 so the next iteration
    // can start at the head and print again.
    pointerFunc2 = head;
}

问题是当你第一次用这个

打印堆栈时

pointerFunc2 = pointerFunc2 -> next_number;

pointerFunc2成为第一次迭代后的最后一个元素。这就是为什么你认为它消失了。您应该在打印后将poininterfunc2重置为指向头节点。因此,首先保存它,然后在遍历整个列表后,恢复它,以便下次打印堆栈时,您将从头节点开始。

第二次打印不工作的原因是您使用的是全局变量而不是局部变量:

stack_struct *pointerFunc2;

当你在函数或类之外声明一个变量时,它就变成了全局变量。全局变量在函数调用后仍然有效,并保留上次设置的值。为了成为局部变量,变量需要在 printStack内部声明,初始化为堆栈的头,然后在退出函数时丢弃。pointerFunc也是如此。

printPointerpointerFunc3变量是未使用的,可以从源代码中删除。

相关内容

  • 没有找到相关文章

最新更新