zoukankan      html  css  js  c++  java
  • 数据结构(2) -- 堆栈

    1、顺序存储

    
    
    //栈的顺序存储实现
    //Stack.h
    #ifndef STACK_H_
    #define STACK_H_
    #define ElementType int 
    #define MaxSize 100
    typedef struct _Node
    {
        ElementType data[MaxSize];
        int top;
    }Node;
    class Stack
    {
    private:
        Node data;
    public:
        Stack();
        ~Stack();
        int IsFull();
        void Push(ElementType item);
        int IsEmpty();
        ElementType Pop();
    };
    #endif
    
    //Stack.cpp
    #include "Stack.h"
    #include <iostream>
    
    Stack::Stack()
    {
        data.top = -1;
    }
    Stack::~Stack()
    {
    }
    int Stack::IsFull()
    {
        if (data.top == (MaxSize - 1))
            return 1;
        else
            return 0;
    }
    void Stack::Push(ElementType item)
    {
        if (IsFull() == 1)
        {
            std::cout << "栈溢出" << std::endl;
            return;
        }
        data.data[++(data.top)] = item;
    }
    
    int Stack::IsEmpty()
    {
        if (data.top == -1)
            return 1;
        else
            return 0;
    }
    
    ElementType Stack::Pop()
    {
        if (IsEmpty())
            std::cout << "栈已空" << std::endl;
        return data.data[(data.top)--];
    }
    
    
    
     

    2、链式存储

    //栈的链式存储实现
    //PStack.h
    #ifndef PSTACK_H_
    #define PSTACK_H_
    #define ElementType int 
    #define MaxSize 100
    typedef struct _PNode
    {
        ElementType data;
        _PNode* next;
    }PNode;
    
    class PStack
    {
    private:
        PNode *top;
    public:
        PStack();
        ~PStack();
        int IsFull();
        void Push(ElementType item);
        int IsEmpty();
        ElementType Pop();
    };
    #endif
    
    
    //PStack.cpp
    #include "PStack.h"
    #include <iostream>
    
    PStack::PStack()
    {
        top = new PNode();
        top->next = NULL;
    }
    PStack::~PStack()
    {
        delete top;
    }
    
    void PStack::Push(ElementType item)
    {    
        PNode* s = new PNode();
        s->data = item;
        s->next = top;
        top = s;
    }
    
    int PStack::IsEmpty()
    {
        if (top == NULL)
            return 1;
        else
            return 0;
    }
    
    ElementType PStack::Pop()
    {
        if (IsEmpty())
            std::cout << "栈已空" << std::endl;
        PNode *s;
        s = top;
        ElementType e = s->data;
        top = top->next;
        delete s;
        return e;
    }

    3、测试样例

    #include <iostream>
    #include "PStack.h"
    using namespace std;
    
    int main()
    {
        PStack st;
        st.Push(5);
        st.Push(6);
        st.Push(2);
        int a = st.Pop();
        int b = st.Pop();
        cout << "a , b" << a << " " << b << endl;
        st.Push(b / a);
        a = st.Pop();
        b = st.Pop();
        cout << "a , b" << a << " " << b << endl;
        st.Push(b + a);
        st.Push(3);
        st.Push(4);
        a = st.Pop();
        b = st.Pop();
        cout << "a , b" << a << " " << b << endl;
        st.Push(b * a);
        a = st.Pop();
        b = st.Pop();
        st.Push(b - a);
        cout << "a , b" << a << " " << b << endl;
        cout << "根据后缀表达是计算5+6/2-3*4的值为:" << st.Pop() << endl;
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    近一年工作感悟2
    项目管理实践感想
    领导力思考
    ASP.NET内置对象
    asp.net 在GridView控件上实现修改、添加、删除
    asp.net导出excel和打印指定内容的简单代码
    js让网页适应屏幕大小
    只能选择GridView中的一个CheckBox(单选CheckBox)
    JQuery实现拖拽draggable()方法
    获取XML文件中的值
  • 原文地址:https://www.cnblogs.com/yongssu/p/4394776.html
Copyright © 2011-2022 走看看