【链性栈】基本链性栈的实现

#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;
}

 

转载于:https://www.cnblogs.com/Lee-geeker/p/3387678.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值