以下代码利用单向链表实现数据结构栈。分别实现了栈的基本操作方法:
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; } }