stack.h
#pragma once
#include <iostream>
using namespace std;
class MyStack
{
public:
MyStack(void);
~MyStack(void);
MyStack(int size);//分配内存 初始化栈空间,设定栈最大容量,栈顶
bool stackEmpty();//空返回true
bool stackFull();//满返回true
void clearStack();//清空栈
int stackLength();//栈内已有的元素个数
bool push(char elem);//入栈 栈顶上升
bool pop(char& elem);//出栈 栈顶下降
char pop();
void stackTraverse(bool direction);//遍历栈所有元素
private:
int m_iSize;//栈最大容量
int m_iTop;//栈中元素的个数, 另外栈底永远不变就是0
char* m_pBuffer;//栈空间的起始指针地址
};
、、、、、、、、、、、、、、、、
stack.cpp
#include "stdafx.h"
#include "MyStack.h"
MyStack::MyStack(void)
{
}
MyStack::MyStack(int size)
{
m_pBuffer = new char[size];
m_iSize = size;
m_iTop = 0;
}
bool MyStack::stackEmpty()
{
return m_iTop == 0?true:false;
}
bool MyStack::stackFull()
{
return m_iTop == m_iSize?true:false;
}
void MyStack::clearStack()
{
m_iTop = 0;
}
int MyStack::stackLength()
{
return m_iTop;
}
bool MyStack::push(char elem)
{
if (stackFull())
{
return false;
}
else
{
m_pBuffer[m_iTop] = elem;
m_iTop++;
return true;
}
}
bool MyStack::pop(char& elem)
{
if (stackEmpty())
{
return false;
}
else
{
m_iTop--;
elem = m_pBuffer[m_iTop];
return true;
}
}
char MyStack::pop()
{
if (stackEmpty())
{
throw 1;
}
else
{
m_iTop--;
return m_pBuffer[m_iTop];
}
}
void MyStack::stackTraverse(bool direction)
{
if (direction)
{
//buttom to top
for (int i = 0 ; i < m_iTop; i++)
{
cout<<m_pBuffer[i]<<", ";
}
}
else
{
//top to buttom
for (int i =m_iTop-1 ; i >= 0; i--)
{
cout<<m_pBuffer[i]<<", ";
}
}
}
MyStack::~MyStack(void)
{
delete[] m_pBuffer;
m_pBuffer = NULL;
}