以下代码利用单向链表实现数据结构栈。分别实现了栈的基本操作方法:
1: 入栈 void push()
2: 出栈 bool pop()
3: 得到栈顶元素 bool top(int * value)
4: 判断栈是否为空 bool empty()
5: 得到栈的大小 int size()
6: 输出栈内元素 void output()
#include "Stack.h"
//构造一个空栈,头指针为空,数据项为栈的长度
CStack::CStack(void)
{
m_value = 0xFFFFFFFF;
m_pnext = NULL;
}
CStack::~CStack(void)
{
printf("delete %d\n", m_value);
}
void CStack::destroy()
{
CStack *pnode = this;
while(m_pnext != NULL)
{
CStack *ptemp = m_pnext;
m_pnext = m_pnext->m_pnext;
delete ptemp;
}
}
void CStack::push(int value)
{
CStack *newnode = new CStack;
newnode->m_value = value;
newnode->m_pnext = this->m_pnext;
this->m_pnext = newnode;
m_value++;
}
bool CStack::pop()
{
if (m_pnext == NULL)
{
return false;
}
else
{
m_pnext = m_pnext->m_pnext;
}
m_value--;
return true;
}
bool CStack::top(int *value)
{
if (m_pnext != NULL)
{
*value = m_pnext->m_value;
return true;
}
*value = 0xFFFFFFFF;
return false;
}
int CStack::size()
{
CStack *pnode = this;
int count = 0;
while(pnode->m_pnext != NULL)
{
count++;
pnode = pnode->m_pnext;
}
return count;
}
bool CStack::empty()
{
if (m_pnext == NULL)
{
return true;
}
return false;
}
void CStack::output()
{
CStack *pnode = this;
int count = 0;
while(pnode->m_pnext != NULL)
{
printf("index=%d value=%d\n", count, pnode->m_pnext->m_value);
pnode = pnode->m_pnext;
}
}