来源:互联网 发布:socket网络编程视频 编辑:程序博客网 时间:2024/06/05 00:49

实际上也是一种线性结构,可以使用链表进行描述。与之不同的是栈结构的压栈(插入)和弹栈(删除)操作只能基于栈顶的数据元素。故栈是一种先进后出结构。


1.定义结点类

struct StackNode{    int val;    StackNode *next;    StackNode(int x = 0xFFFF)        :val(x), next(nullptr) {}};

2.定义栈类

class LinkedStack{public:    LinkedStack(int len = 0);    ~LinkedStack();    bool StackEmpty();    void StackClear();    int GetTop();    void Push(int const e);    void Pop();    int GetLen();    void printStack();private:    int StackLen;    StackNode *StackTop;};

StackEmpty 方法:判断栈是否为空;

StackClear 方法:清空整个栈;

GetTop 方法:得到栈顶数据元素;

Push 方法:压栈操作;

Pop 方法:弹栈操作;

GetLen 方法:得到栈的长度;

printStack 方法:打印栈。


3.方法实现

LinkedStack::LinkedStack(int len)    :StackLen(len){    StackTop = new StackNode();}LinkedStack::~LinkedStack(){    StackClear();    delete StackTop;}bool LinkedStack::StackEmpty(){    return StackTop == nullptr;}void LinkedStack::StackClear(){    StackNode *p = StackTop;    while (StackTop)    {        StackTop = p->next;        delete p;        p = StackTop;    }}int LinkedStack::GetTop(){    if (StackTop==nullptr)    {        return 0xFFFF;    }    else    {        return StackTop->val;    }}void LinkedStack::Push(int const e){    StackNode *p = new StackNode(e);    p->next = StackTop;    StackTop = p;    StackLen += 1;}void LinkedStack::Pop(){    StackNode *p = StackTop;    if (!StackEmpty())    {        StackTop = p->next;        delete p;    }}int LinkedStack::GetLen(){    return StackLen;}void LinkedStack::printStack(){    StackNode *p = StackTop;    if (StackEmpty())    {        return;    }    while (p->next)    {        std::cout << p->val << std::endl;        std::cout << "||" << std::endl;        p = p->next;    }    std::cout << p->val << std::endl;}
1 0
原创粉丝点击