簡體   English   中英

鏈表無法正確打印?

[英]linked list not printing correctly?

    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<<"\n\nEnter 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

可以將其正確重置,也可以在打印功能中使用局部變量。

這是您的函數的更正版本:

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成為第一次迭代后的最后一個元素。 這就是為什么您認為它已經消失了。 打印后,應將pointerFunc2重置為指向頭節點。 因此,請先保存它,然后在遍歷整個列表之后將其還原,以便下次打印堆棧時,將從頭節點開始。

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

stack_struct *pointerFunc2;

當在函數或類之外聲明變量時,該變量將成為全局變量。 全局變量在函數調用后仍然存在,並保留最后設置給它們的值。 為了成為局部變量,需要 printStack聲明一個變量,將其初始化為堆棧的頭部,然后在退出函數時將其丟棄。 關於pointerFunc也是如此。

printPointerpointerFunc3變量未使用,可以從源代碼中刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM