zoukankan      html  css  js  c++  java
  • 【链性栈】基本链性栈的实现

    #include<iostream>
    
    using namespace std;
    
    typedef struct _NODE_
    {
        int a;
        _NODE_* pNext;
    }Node,*pNode;
    
    
    typedef struct _TABLE_
    {
        pNode pHead;
        int iNodeCount;
    }Table,*pTable;
    
    void InitStack(pTable pTableTemp);
    
    bool PushStack(pTable pTableTemp, int a);
    
    bool PopStack(pTable pTableTemp,int* a);
    
    bool GetTop(pTable pTableTemp,int* a);
    
    bool IsEmpty(pTable pTableTemp);
    
    void DestroyStack(pTable pTableTemp);
    
    void ClearStack(pTable pTableTemp);
    
    int GetLength(pTable pTableTemp);
    
    
    int main()
    {
        pNode pNodeTemp = {0};
    
        Table TableTemp = {0};
    
        InitStack(&TableTemp);
    
        int i = 0;
        int a = 0;
        int Length = 0;
        int temp = 0;
        
        cout<<"当前状态:"<<endl;
        if(IsEmpty(&TableTemp))
        {
            cout<<"栈中没有元素"<<endl;
        }
        else
        {
            cout<<"栈中存在元素"<<endl;
        }
    
        cout<<"请输入元素,进行入栈操作."<<endl;
        for(i=0;i<10;i++)
        {
            cin>>a;
            PushStack(&TableTemp,a);
        }
        
        if(IsEmpty(&TableTemp))
        {
            cout<<"栈中没有元素"<<endl;
        }
        else
        {
            cout<<"栈中存在元素"<<endl;
        }
    
    
        GetTop(&TableTemp,&a);
    
        cout<<"栈顶元素为"<<a<<endl;
    
        cout<<"出栈顺序:"<<endl;
        for(i=0;i<10;i++)
        {
            PopStack(&TableTemp,&a);
            cout<<a<<ends;
        }
        cout<<endl;
    
    
        return 0;
    }
    
    void InitStack(pTable pTableTemp)
    {
        if(!IsEmpty(pTableTemp))
        {
            DestroyStack(pTableTemp);
            pTableTemp->iNodeCount = 0;
            pTableTemp->pHead = NULL;
        }
    }
    
    
    bool PushStack(pTable pTableTemp, int a)
    {
        pNode pNodeTemp = new Node;
    
        if(pNodeTemp != NULL)
        {
            pNodeTemp->a = a;
    
            pNodeTemp->pNext = NULL;
    
            pNodeTemp->pNext = pTableTemp->pHead;
    
            pTableTemp->pHead = pNodeTemp;
    
            pTableTemp->iNodeCount++;
    
            return true;
        }
    
        return false;
    }
    
    
    bool PopStack(pTable pTableTemp,int* a)
    {
        if(pTableTemp->iNodeCount == NULL)
        {
            return false;
        }
    
        *a = pTableTemp->pHead->a;
    
        pNode pNodeTemp = pTableTemp->pHead;
    
        pTableTemp->pHead = pTableTemp->pHead->pNext;
    
        delete pNodeTemp;
        
        pTableTemp->iNodeCount--;
    
        return true;
    }
    
    
    
    bool GetTop(pTable pTableTemp,int* a)
    {
        if(!IsEmpty(pTableTemp))
        {
            *a = pTableTemp->pHead->a;
            return true;
        }
        return false;
    }
    
    
    bool IsEmpty(pTable pTableTemp)
    {
        if(pTableTemp->iNodeCount == 0)
        {
            return true;
        }
    
        return false;
    }
    
    
    
    void DestroyStack(pTable pTableTemp)
    {
        pNode pNodeDel = pTableTemp->pHead;
    
        while(pNodeDel != NULL)
        {
            pTableTemp->pHead = pNodeDel->pNext;
            
            delete pNodeDel;
    
            pNodeDel = pTableTemp->pHead;
    
            pTableTemp->iNodeCount--;
        }
    }
    
    
    void ClearStack(pTable pTableTemp)
    {
        if(!IsEmpty(pTableTemp))
        {
            pTableTemp->pHead = NULL;
            pTableTemp->iNodeCount = 0;
        }
    }
    
    
    int GetLength(pTable pTableTemp)
    {
        return pTableTemp->iNodeCount;
    }

    //c++封类
    
    #include<iostream>
    
    using namespace std;
    
    typedef struct _NODE_
    {
        int a;
        _NODE_*pNext;
    }Node,*pNode;
    
    
    class CStack
    {
        
    private:
    
        pNode m_pHead;
        int m_iNodeCount;
    
    public:
    
        CStack()
        {
            m_pHead = NULL;
    
            m_iNodeCount = 0;
        }
        ~CStack()
        {
    
        }
    
        void InitStack();
        
        bool PushStack(int a);
    
        bool PopStack(int& a);
    
        bool GetLength(int& nLen);
    
        bool IsEmpty();
    
        void DestroyStack();
    
        bool GetTop(int& a);
    
    };
    
    
    int main()
    {
    
        return 0;
    }
    
    
    
    
    
    void CStack::InitStack()
    {
    
        if(m_pHead != NULL)
        {
            DestroyStack();
        }
    
        m_pHead = NULL;
    
        m_iNodeCount = 0;
    }
    
    bool CStack::PushStack(int a)
    {
        pNode pNodeTemp = new Node;
    
        if(pNodeTemp != NULL)
        {
            pNodeTemp->a = a;
            pNodeTemp->pNext = NULL;
    
            pNodeTemp->pNext = m_pHead;
    
            m_pHead = pNodeTemp;
    
            m_iNodeCount++;
    
            return true;
        }
    
        return false;
    }
    
    bool CStack::PopStack(int& a)
    {
        if(IsEmpty())
        {
            return false;
        }
    
        a = m_pHead->a;
        pNode pNodeDel = m_pHead;
        m_pHead = pNodeDel->pNext;
    
        delete pNodeDel;
    
        pNodeDel = m_pHead;
    
        m_iNodeCount--;
    
        return true;
    }
    bool CStack::GetLength(int& nLen)
    {
        nLen = m_iNodeCount;
        return true;
    }
    
    bool CStack::IsEmpty()
    {
        if(m_iNodeCount == 0)
        {
            return true;
        }
    
        return false;
    }
    void CStack::DestroyStack()
    {
        pNode pNodeDel = m_pHead;
    
        while(pNodeDel != NULL)
        {
            m_pHead = pNodeDel->pNext;
    
            delete pNodeDel;
    
            pNodeDel = m_pHead;
    
            m_iNodeCount--;
        }
    }
    
    bool CStack::GetTop(int& a)
    {
        a = m_pHead->a;
        return true;
    }
  • 相关阅读:
    已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]
    数据库相关内容 已看1 有用
    JS jquery ajax 已看1 有用
    Web性能优化 高并发网站解决 单例 已看1
    框架和事务 非常 有用 hibernate和mybatis区别
    SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
    客户注册功能,发短信功能分离 通过ActiveMQ实现
    在线下单
    LeetCode -- Count and Say
    LeetCode -- Word Pattern
  • 原文地址:https://www.cnblogs.com/Lee-geeker/p/3387678.html
Copyright © 2011-2022 走看看