#include <stdio.h>
#include <malloc.h>
#include "stack.h"
CStack::CStack()
{
m_length=-1;
m_pBase=NULL;
m_pTop=NULL;
}
CStack::~CStack()
{
DestoryStack();
}
void CStack::ClearStack()
{
pStackNode pNode;
while(m_pTop!=m_pBase)
{
pNode=m_pTop;
m_pTop=m_pTop->pPrior;
free(pNode);
}
m_length=0;
}
void CStack::DestoryStack()
{
if(m_length==-1)
return ;
else if(m_length==0)
{
free(m_pBase);
}
else if(m_length>0)
{
ClearStack();
free(m_pBase);
}
m_length=-1;
}
int CStack::GetLength()
{
return m_length;
}
void CStack::InitStack()
{
pStackNode pNode=(pStackNode)malloc(sizeof(SStackNode));
pNode->data=' ';
pNode->pPrior=NULL;
m_pBase=pNode;
m_pTop=pNode;
m_length=0;
}
bool CStack::isEmpty()
{
if(m_length==-1 || m_length==0)
return true;
else
return false;
}
DataType_S CStack::Pop()
{
if(m_length>0)
{
DataType_S value;
value=m_pTop->data;
m_pTop=m_pTop->pPrior;
m_length--;
return value;
}
else
return ' ';
}
void CStack::Push(DataType_S e)
{
pStackNode pNode=(pStackNode)malloc(sizeof(SStackNode));
pNode->data=e;
pNode->pPrior=m_pTop;
m_pTop=pNode;
m_length++;
}