使用双向链表堆叠

时间:2019-06-01 20:03:18

标签: c++

我有大学作业。通常堆栈使用线性链表,但他们要求我们使用双链表来制作堆栈。基本上,不是从头开始弹出元素,而是从头开始弹出。现在,这是我编写的代码。它的工作原理,并给我准确的结果。如果我像2,3和4一样推入,然后弹出一个,cout显示3,但是我在节点类的setnext或setprev中也得到了空指针异常,我似乎找不到问题。我尝试了不同的if语句,但是什么也没有。

class DNode
{
public:
    int Get() { return Object; }
    void Set(int Object) { this->Object = Object; }
    DNode* GetNext() { return NextNode; }
    void SetNext(DNode* NextNode) { this->NextNode = NextNode; }
    DNode* GetPrev() { return PrevNode; }
    void SetPrev(DNode* PrevNode) { this->PrevNode = PrevNode; }

private:
    int Object;
    DNode* PrevNode;
    DNode* NextNode;
};
class Stack
    {
    public:
Stack()
{
    HeadNode = nullptr;
    Size = 0;
}

~Stack()
{
    while (Size > 0)
    {
        Pop();
    }
}

void Push(int AddObject)
{
    DNode* NewNode = new DNode();
    NewNode->Set(AddObject);
    if (HeadNode == nullptr)
    {
        HeadNode = NewNode;
        HeadNode->SetPrev(nullptr);
        HeadNode->SetNext(nullptr);
    }
    else
    {
        HeadNode->SetNext(NewNode);
        NewNode->SetPrev(HeadNode);
        NewNode->SetNext(nullptr);
        HeadNode = NewNode;
    }
    Size++;
}
int Pop()
{
    if (Size == 1)
    {
        return HeadNode->Get();
        delete HeadNode;
        HeadNode == nullptr;
    }
    else if (Size > 1)
    {

        DNode* TempPtr = HeadNode;
        HeadNode = HeadNode->GetPrev();
        HeadNode->SetNext(nullptr);
        return TempPtr->Get();
        delete TempPtr;
    }
    Size--;
}

int Top()
{
    if (HeadNode != nullptr)
    {
        return HeadNode->Get();
    }
    return 0;
}

bool IsEmpty()
{
    if (Size == 0)
    {
        return true;
    }
    else if(Size > 0)
    {
        return false;
    }
}

private:
    DNode* HeadNode;
    int Size;
};

0 个答案:

没有答案