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;
    }
  • 相关阅读:
    iOS-深入理解(转载)
    iOS开发
    夜光遥感
    希尔伯特曲线在地图图像分割中的应用
    希尔伯特曲线
    NLP生成论文
    MapGIS SDK(C++)【基础篇】
    从npm到vue和nodejs
    分形在遥感和GIS中的应用
    MapReduce、Hadoop、PostgreSQL、Spark
  • 原文地址:https://www.cnblogs.com/Lee-geeker/p/3387678.html
Copyright © 2011-2022 走看看